]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch 'nightly' into social-nightly
authorRoland Haeder <roland@mxchange.org>
Thu, 5 Mar 2015 23:01:27 +0000 (00:01 +0100)
committerRoland Haeder <roland@mxchange.org>
Thu, 5 Mar 2015 23:01:35 +0000 (00:01 +0100)
This branch will serve as a "pre-beta", or so. :-) And it will contain commits
from both my social-master and my local nightly branch.

Signed-off-by: Roland Haeder <roland@mxchange.org>
801 files changed:
EVENTS.txt
INSTALL
README.md
UPGRADE
actions/apiaccountregister.php
actions/apiaccountverifycredentials.php
actions/apifriendshipscreate.php
actions/apifriendshipsdestroy.php
actions/apifriendshipsexists.php
actions/apifriendshipsshow.php
actions/apimediaupload.php
actions/apitimelineretweetedtome.php
actions/apitimelineuser.php
actions/atompubsubscriptionfeed.php
actions/cancelsubscription.php
actions/doc.php
actions/emailsettings.php
actions/invite.php
actions/newnotice.php
actions/register.php
actions/shownotice.php
actions/subscribe.php
avatar/.gitignore [changed mode: 0755->0644]
classes/Attention.php
classes/Avatar.php
classes/Config.php
classes/Confirm_address.php
classes/Consumer.php
classes/Conversation.php
classes/Deleted_notice.php
classes/File.php
classes/File_redirection.php
classes/File_thumbnail.php
classes/Foreign_link.php
classes/Foreign_service.php
classes/Foreign_user.php
classes/Group_member.php
classes/Invitation.php
classes/Location_namespace.php
classes/Managed_DataObject.php
classes/Memcached_DataObject.php
classes/Nonce.php
classes/Notice.php
classes/Notice_source.php
classes/Oauth_application.php
classes/Oauth_application_user.php
classes/Oauth_token_association.php
classes/Profile.php
classes/Profile_list.php
classes/Profile_prefs.php
classes/Sms_carrier.php
classes/Status_network.php
classes/Subscription.php
classes/Subscription_queue.php
classes/Token.php
classes/User.php
classes/User_group.php
classes/User_im_prefs.php
classes/User_username.php
db/site.sql
htaccess.sample
index.php
install.php
js/util.js
lib/action.php
lib/activityimporter.php
lib/activitymover.php
lib/activityobject.php
lib/adminpanelnav.php
lib/apiaction.php
lib/apiauthaction.php
lib/atom10feed.php
lib/attachmentlistitem.php
lib/authenticationplugin.php
lib/cache.php
lib/common.php
lib/default.php
lib/docfile.php
lib/error.php
lib/event.php
lib/framework.php
lib/gnusocial.php [new file with mode: 0644]
lib/homestubnav.php
lib/htmloutputter.php
lib/imagefile.php
lib/installer.php
lib/mediafile.php
lib/menu.php
lib/mysqlschema.php
lib/noticelistitem.php
lib/plugin.php
lib/rssaction.php
lib/schemaupdater.php
lib/statusnet.php
lib/stompqueuemanager.php
lib/theme.php
lib/util.php
lib/xmloutputter.php
plugins/APC/locale/APC.pot [deleted file]
plugins/APC/locale/ast/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/br/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/de/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/es/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/eu/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/fr/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/gl/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/he/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/ia/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/id/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/it/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/mk/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/ms/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/nb/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/nl/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/pl/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/pt/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/pt_BR/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/ru/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/tl/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/uk/LC_MESSAGES/APC.po [deleted file]
plugins/APC/locale/zh_CN/LC_MESSAGES/APC.po [deleted file]
plugins/Adsense/actions/adsenseadminpanel.php [deleted file]
plugins/Adsense/locale/Adsense.pot [deleted file]
plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ca/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/eu/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/he/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ja/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/lb/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/lt/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ms/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/nb/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/pl/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/pt/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po [deleted file]
plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po [deleted file]
plugins/Aim/README [deleted file]
plugins/Aim/classes/Fake_Aim.php [deleted file]
plugins/Aim/extlib/phptoclib/README.txt [deleted file]
plugins/Aim/extlib/phptoclib/aimclassw.php [deleted file]
plugins/Aim/extlib/phptoclib/dconnection.php [deleted file]
plugins/Aim/locale/Aim.pot [deleted file]
plugins/Aim/locale/af/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/ca/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/de/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/es/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/eu/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/fi/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/fr/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/gl/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/ia/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/it/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/mk/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/ms/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/nl/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/pl/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/pt/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/sv/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/tl/LC_MESSAGES/Aim.po [deleted file]
plugins/Aim/locale/uk/LC_MESSAGES/Aim.po [deleted file]
plugins/AnonymousFave/AnonymousFavePlugin.php
plugins/AuthCrypt/AuthCryptPlugin.php
plugins/Autocomplete/actions/autocomplete.php
plugins/Autocomplete/js/autocomplete.go.js
plugins/Blacklist/BlacklistPlugin.php
plugins/Blacklist/classes/Homepage_blacklist.php
plugins/Blacklist/classes/Nickname_blacklist.php
plugins/Blog/BlogPlugin.php [deleted file]
plugins/Blog/actions/newblogentry.php [deleted file]
plugins/Blog/actions/showblogentry.php [deleted file]
plugins/Blog/blog.js [deleted file]
plugins/Blog/classes/Blog_entry.php [deleted file]
plugins/Blog/forms/blogentry.php [deleted file]
plugins/Blog/lib/blogentrylistitem.php [deleted file]
plugins/Blog/locale/Blog.pot [deleted file]
plugins/Blog/locale/ar/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/br/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/ca/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/de/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/es/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/eu/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/fr/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/gl/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/ia/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/it/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/lt/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/mk/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/nl/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/tl/LC_MESSAGES/Blog.po [deleted file]
plugins/Blog/locale/tr/LC_MESSAGES/Blog.po [deleted file]
plugins/Bookmark/BookmarkPlugin.php
plugins/Bookmark/actions/newbookmark.php
plugins/Bookmark/classes/Bookmark.php
plugins/Bookmark/forms/bookmark.php
plugins/CasAuthentication/CasAuthenticationPlugin.php
plugins/Cronish/CronishPlugin.php
plugins/DirectMessage/classes/Message.php
plugins/Directory/actions/groupdirectory.php
plugins/Directory/actions/userdirectory.php
plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php
plugins/DomainStatusNetwork/actions/globalapi.php
plugins/DomainStatusNetwork/lib/domainstatusnetworkinstaller.php
plugins/EmailRegistration/actions/emailregister.php
plugins/EmailRegistration/forms/confirmregistration.php
plugins/EmailReminder/classes/Email_reminder.php
plugins/EmailReminder/scripts/sendemailreminder.php
plugins/EmailSummary/scripts/sendemailsummary.php
plugins/Enjit/README [deleted file]
plugins/Enjit/enjitqueuehandler.php [deleted file]
plugins/Event/actions/cancelrsvp.php
plugins/Event/actions/newrsvp.php
plugins/Event/classes/Happening.php
plugins/Event/classes/RSVP.php
plugins/FacebookBridge/FacebookBridgePlugin.php
plugins/FacebookBridge/classes/Notice_to_item.php
plugins/Favorite/actions/disfavor.php
plugins/Favorite/classes/Fave.php
plugins/GNUsocialPhoto/classes/Photo.php
plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php
plugins/GNUsocialPhotos/classes/gnusocialphoto.php
plugins/GNUsocialPhotos/classes/gnusocialphotoalbum.php
plugins/GNUsocialProfileExtensions/classes/GNUsocialProfileExtensionField.php
plugins/GNUsocialVideo/classes/Video.php
plugins/GroupPrivateMessage/classes/Group_message.php
plugins/ImageMagick/ImageMagickPlugin.php
plugins/Irc/README [deleted file]
plugins/Irc/classes/Irc_waiting_message.php [deleted file]
plugins/Irc/extlib/.gitignore [deleted file]
plugins/Irc/extlib/phergie/.gitignore [deleted file]
plugins/Irc/extlib/phergie/LICENSE [deleted file]
plugins/Irc/extlib/phergie/Phergie/Autoload.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Bot.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Config.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Config/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Connection.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Connection/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Connection/Handler.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Driver/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Driver/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Driver/Statusnet.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Driver/Streams.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Command.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Handler.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Request.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Event/Response.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Hostmask.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Hostmask/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Acl.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/AltNick.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/AudioScrobbler.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/AutoJoin.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Beer.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Beer/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/BeerScore.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cache.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Cron.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Ctcp.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Daddy.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Encoding.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Google.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Handler.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Help.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Http.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Http/Response.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Ideone.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Invisible.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Iterator.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Join.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Karma.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Lart.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Part.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Php.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source/Local.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Ping.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Pong.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Prioritize.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Puppet.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Quit.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Reload.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Remind.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Serve.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/SpellCheck.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Statusnet.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Tea.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Tea/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Temperature.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/TerryChay.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/TheFuckingWeather.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Time.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/laconica.class.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/twitter.class.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Url.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Trim.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/UserInfo.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Wine.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Wine/db.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Plugin/Youtube.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Process/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Process/Async.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Process/Exception.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Process/Standard.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/StatusnetBot.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/INSTALL [deleted file]
plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/index.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Tools/README [deleted file]
plugins/Irc/extlib/phergie/Phergie/Ui/Abstract.php [deleted file]
plugins/Irc/extlib/phergie/Phergie/Ui/Console.php [deleted file]
plugins/Irc/extlib/phergie/PhergiePackageTask.php [deleted file]
plugins/Irc/extlib/phergie/README [deleted file]
plugins/Irc/extlib/phergie/Settings.php.dist [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/ConnectionTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/IteratorTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/KarmaTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/Mock.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PingTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PongTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/SpellCheckTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TerryChayTest.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestCase.php [deleted file]
plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestNonInstantiablePluginFromFile.php [deleted file]
plugins/Irc/extlib/phergie/Tests/TestHelper.php [deleted file]
plugins/Irc/extlib/phergie/Tests/phpunit.xml [deleted file]
plugins/Irc/extlib/phergie/build.xml [deleted file]
plugins/Irc/extlib/phergie/phergie.bat [deleted file]
plugins/Irc/extlib/phergie/phergie.php [deleted file]
plugins/Irc/lib/channelresponsechannel.php [deleted file]
plugins/Irc/lib/fakeirc.php [deleted file]
plugins/Irc/locale/Irc.pot [deleted file]
plugins/Irc/locale/ca/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/de/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/es/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/eu/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/fi/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/fr/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/gl/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/ia/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/it/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/ja/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/mk/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/nl/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/sv/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/tl/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/tr/LC_MESSAGES/Irc.po [deleted file]
plugins/Irc/locale/uk/LC_MESSAGES/Irc.po [deleted file]
plugins/LdapAuthentication/LdapAuthenticationPlugin.php
plugins/LinkPreview/actions/oembedproxy.php
plugins/Mapstraction/MapstractionPlugin.php
plugins/Minify/MinifyPlugin.php
plugins/NoticeTitle/classes/Notice_title.php
plugins/OStatus/actions/pushcallback.php
plugins/OStatus/actions/pushhub.php
plugins/OStatus/classes/FeedSub.php
plugins/OStatus/classes/HubSub.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/classes/Ostatus_source.php
plugins/OStatus/lib/salmonaction.php
plugins/Oembed/OembedPlugin.php
plugins/Oembed/classes/File_oembed.php
plugins/OpenID/OpenIDPlugin.php
plugins/OpenID/classes/User_openid.php
plugins/OpenID/classes/User_openid_trustroot.php
plugins/OpportunisticQM/OpportunisticQMPlugin.php
plugins/Poll/actions/newpoll.php
plugins/Poll/actions/respondpoll.php
plugins/Poll/classes/Poll.php
plugins/Poll/classes/Poll_response.php
plugins/QnA/actions/qnaclosequestion.php
plugins/QnA/actions/qnanewanswer.php
plugins/QnA/actions/qnanewquestion.php
plugins/QnA/actions/qnareviseanswer.php
plugins/QnA/actions/qnavote.php
plugins/QnA/classes/QnA_Answer.php
plugins/QnA/classes/QnA_Question.php
plugins/RSSCloud/RSSCloudPlugin.php
plugins/Realtime/classes/Realtime_channel.php
plugins/Realtime/scripts/cleanupchannels.php
plugins/Recaptcha/RecaptchaPlugin.php
plugins/SearchSub/actions/searchsub.php
plugins/Spotify/locale/Spotify.pot [deleted file]
plugins/Spotify/locale/de/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/es/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/fr/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/gl/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/he/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/ia/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/mk/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/nl/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/sv/LC_MESSAGES/Spotify.po [deleted file]
plugins/Spotify/locale/tl/LC_MESSAGES/Spotify.po [deleted file]
plugins/TagSub/actions/tagsub.php
plugins/TinyMCE/icons/placeholder.png [deleted file]
plugins/TinyMCE/icons/placeholder.xcf [deleted file]
plugins/TinyMCE/js/jquery.tinymce.js [deleted file]
plugins/TinyMCE/js/langs/en.js [deleted file]
plugins/TinyMCE/js/license.txt [deleted file]
plugins/TinyMCE/js/plugins/advhr/css/advhr.css [deleted file]
plugins/TinyMCE/js/plugins/advhr/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/advhr/js/rule.js [deleted file]
plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/advhr/rule.htm [deleted file]
plugins/TinyMCE/js/plugins/advimage/css/advimage.css [deleted file]
plugins/TinyMCE/js/plugins/advimage/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/advimage/image.htm [deleted file]
plugins/TinyMCE/js/plugins/advimage/img/sample.gif [deleted file]
plugins/TinyMCE/js/plugins/advimage/js/image.js [deleted file]
plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/advlink/css/advlink.css [deleted file]
plugins/TinyMCE/js/plugins/advlink/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/advlink/js/advlink.js [deleted file]
plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/advlink/link.htm [deleted file]
plugins/TinyMCE/js/plugins/advlist/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/autolink/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/autolink/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/autosave/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/autosave/langs/en.js [deleted file]
plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/directionality/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/emotions/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/emotions/emotions.htm [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif [deleted file]
plugins/TinyMCE/js/plugins/emotions/js/emotions.js [deleted file]
plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/example/dialog.htm [deleted file]
plugins/TinyMCE/js/plugins/example/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/example/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/example/img/example.gif [deleted file]
plugins/TinyMCE/js/plugins/example/js/dialog.js [deleted file]
plugins/TinyMCE/js/plugins/example/langs/en.js [deleted file]
plugins/TinyMCE/js/plugins/example/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/example_dependency/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/example_dependency/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css [deleted file]
plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/fullpage/fullpage.htm [deleted file]
plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js [deleted file]
plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm [deleted file]
plugins/TinyMCE/js/plugins/iespell/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css [deleted file]
plugins/TinyMCE/js/plugins/inlinepopups/template.htm [deleted file]
plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/layer/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/lists/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/lists/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/media/css/media.css [deleted file]
plugins/TinyMCE/js/plugins/media/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/media/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/media/js/embed.js [deleted file]
plugins/TinyMCE/js/plugins/media/js/media.js [deleted file]
plugins/TinyMCE/js/plugins/media/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/media/media.htm [deleted file]
plugins/TinyMCE/js/plugins/media/moxieplayer.swf [deleted file]
plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/paste/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/paste/js/pastetext.js [deleted file]
plugins/TinyMCE/js/plugins/paste/js/pasteword.js [deleted file]
plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/paste/pastetext.htm [deleted file]
plugins/TinyMCE/js/plugins/paste/pasteword.htm [deleted file]
plugins/TinyMCE/js/plugins/preview/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/preview/example.html [deleted file]
plugins/TinyMCE/js/plugins/preview/jscripts/embed.js [deleted file]
plugins/TinyMCE/js/plugins/preview/preview.html [deleted file]
plugins/TinyMCE/js/plugins/print/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/print/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/save/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/save/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm [deleted file]
plugins/TinyMCE/js/plugins/spellchecker/css/content.css [deleted file]
plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif [deleted file]
plugins/TinyMCE/js/plugins/style/css/props.css [deleted file]
plugins/TinyMCE/js/plugins/style/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/style/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/style/js/props.js [deleted file]
plugins/TinyMCE/js/plugins/style/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/style/props.htm [deleted file]
plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/table/cell.htm [deleted file]
plugins/TinyMCE/js/plugins/table/css/cell.css [deleted file]
plugins/TinyMCE/js/plugins/table/css/row.css [deleted file]
plugins/TinyMCE/js/plugins/table/css/table.css [deleted file]
plugins/TinyMCE/js/plugins/table/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/table/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/table/js/cell.js [deleted file]
plugins/TinyMCE/js/plugins/table/js/merge_cells.js [deleted file]
plugins/TinyMCE/js/plugins/table/js/row.js [deleted file]
plugins/TinyMCE/js/plugins/table/js/table.js [deleted file]
plugins/TinyMCE/js/plugins/table/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/table/merge_cells.htm [deleted file]
plugins/TinyMCE/js/plugins/table/row.htm [deleted file]
plugins/TinyMCE/js/plugins/table/table.htm [deleted file]
plugins/TinyMCE/js/plugins/template/blank.htm [deleted file]
plugins/TinyMCE/js/plugins/template/css/template.css [deleted file]
plugins/TinyMCE/js/plugins/template/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/template/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/template/js/template.js [deleted file]
plugins/TinyMCE/js/plugins/template/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/plugins/template/template.htm [deleted file]
plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js [deleted file]
plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/themes/advanced/about.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/anchor.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/charmap.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/color_picker.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/editor_template.js [deleted file]
plugins/TinyMCE/js/themes/advanced/editor_template_src.js [deleted file]
plugins/TinyMCE/js/themes/advanced/image.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg [deleted file]
plugins/TinyMCE/js/themes/advanced/img/flash.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/icons.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/iframe.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/pagebreak.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/quicktime.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/realmedia.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/shockwave.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/trans.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/video.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/img/windowsmedia.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/js/about.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/anchor.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/charmap.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/color_picker.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/image.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/link.js [deleted file]
plugins/TinyMCE/js/themes/advanced/js/source_editor.js [deleted file]
plugins/TinyMCE/js/themes/advanced/langs/en.js [deleted file]
plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js [deleted file]
plugins/TinyMCE/js/themes/advanced/link.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/shortcuts.htm [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/content.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/default/ui.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/highcontrast/content.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/highcontrast/dialog.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/highcontrast/ui.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css [deleted file]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css [deleted file]
plugins/TinyMCE/js/themes/advanced/source_editor.htm [deleted file]
plugins/TinyMCE/js/themes/simple/editor_template.js [deleted file]
plugins/TinyMCE/js/themes/simple/editor_template_src.js [deleted file]
plugins/TinyMCE/js/themes/simple/img/icons.gif [deleted file]
plugins/TinyMCE/js/themes/simple/langs/en.js [deleted file]
plugins/TinyMCE/js/themes/simple/skins/default/content.css [deleted file]
plugins/TinyMCE/js/themes/simple/skins/default/ui.css [deleted file]
plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css [deleted file]
plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png [deleted file]
plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css [deleted file]
plugins/TinyMCE/js/tiny_mce.js [deleted file]
plugins/TinyMCE/js/tiny_mce_popup.js [deleted file]
plugins/TinyMCE/js/tiny_mce_src.js [deleted file]
plugins/TinyMCE/js/utils/editable_selects.js [deleted file]
plugins/TinyMCE/js/utils/form_utils.js [deleted file]
plugins/TinyMCE/js/utils/mctabs.js [deleted file]
plugins/TinyMCE/js/utils/validate.js [deleted file]
plugins/TinyMCE/locale/Sample.po [deleted file]
plugins/TinyMCE/locale/TinyMCE.pot [deleted file]
plugins/TinyMCE/locale/ca/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/de/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/eo/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/es/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/fr/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/gl/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/he/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/ia/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/id/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/ja/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/mk/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/ms/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/nb/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/nl/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/pt/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/pt_BR/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/ru/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/tl/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TinyMCE/locale/uk/LC_MESSAGES/TinyMCE.po [deleted file]
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/TwitterBridge/actions/twitterauthorization.php
plugins/TwitterBridge/classes/Twitter_synch_status.php
plugins/VideoThumbnails/VideoThumbnailsPlugin.php
plugins/WebFinger/WebFingerPlugin.php
plugins/WebFinger/lib/webfingerresource.php
plugins/XCache/locale/XCache.pot [deleted file]
plugins/XCache/locale/ast/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/br/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/de/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/es/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/eu/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/fi/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/fr/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/gl/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/he/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/ia/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/id/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/mk/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/ms/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/nb/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/nl/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/pl/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/pt/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/pt_BR/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/ru/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/tl/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/tr/LC_MESSAGES/XCache.po [deleted file]
plugins/XCache/locale/uk/LC_MESSAGES/XCache.po [deleted file]
plugins/YammerImport/README [deleted file]
plugins/YammerImport/YammerImportPlugin.php [deleted file]
plugins/YammerImport/classes/Yammer_common.php [deleted file]
plugins/YammerImport/classes/Yammer_group.php [deleted file]
plugins/YammerImport/classes/Yammer_notice.php [deleted file]
plugins/YammerImport/classes/Yammer_notice_stub.php [deleted file]
plugins/YammerImport/classes/Yammer_state.php [deleted file]
plugins/YammerImport/classes/Yammer_user.php [deleted file]
plugins/YammerImport/css/admin.css [deleted file]
plugins/YammerImport/css/done.png [deleted file]
plugins/YammerImport/css/icon_processing.gif [deleted file]
plugins/YammerImport/forms/yammerapikey.php [deleted file]
plugins/YammerImport/forms/yammerauthinit.php [deleted file]
plugins/YammerImport/forms/yammerauthverify.php [deleted file]
plugins/YammerImport/forms/yammerprogress.php [deleted file]
plugins/YammerImport/lib/snyammerclient.php [deleted file]
plugins/YammerImport/lib/yammerqueuehandler.php [deleted file]
plugins/YammerImport/lib/yammerrunner.php [deleted file]
plugins/YammerImport/locale/YammerImport.pot [deleted file]
plugins/YammerImport/locale/br/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/de/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/es/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/eu/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/fr/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/ia/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/mk/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/ms/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/nl/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/pl/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/tl/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/tr/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/locale/uk/LC_MESSAGES/YammerImport.po [deleted file]
plugins/YammerImport/scripts/yammer-import.php [deleted file]
scripts/clean_file_table.php [new file with mode: 0755]
scripts/clean_profiles.php [new file with mode: 0755]
scripts/upgrade.php
theme/base/css/display.css
theme/neo-gnu/README
theme/neo-gnu/css/display.css
theme/neo-gnu/fonts/lato-bold-webfont.eot [deleted file]
theme/neo-gnu/fonts/lato-bold-webfont.svg [deleted file]
theme/neo-gnu/fonts/lato-bold-webfont.ttf [deleted file]
theme/neo-gnu/fonts/lato-bold-webfont.woff [deleted file]
theme/neo-gnu/fonts/lato-italic-webfont.eot [deleted file]
theme/neo-gnu/fonts/lato-italic-webfont.svg [deleted file]
theme/neo-gnu/fonts/lato-italic-webfont.ttf [deleted file]
theme/neo-gnu/fonts/lato-italic-webfont.woff [deleted file]
theme/neo-gnu/fonts/lato-regular-webfont.eot [deleted file]
theme/neo-gnu/fonts/lato-regular-webfont.svg [deleted file]
theme/neo-gnu/fonts/lato-regular-webfont.ttf [deleted file]
theme/neo-gnu/fonts/lato-regular-webfont.woff [deleted file]
theme/neo-gnu/fonts/stylesheet.css [deleted file]
theme/neo-quitter/css/display.css
theme/neo-quitter/favicon.ico
theme/neo-quitter/fonts/Lato-Bold.eot [deleted file]
theme/neo-quitter/fonts/Lato-Bold.ttf [deleted file]
theme/neo-quitter/fonts/Lato-Bold.woff [deleted file]
theme/neo-quitter/fonts/Lato-Italic.eot [deleted file]
theme/neo-quitter/fonts/Lato-Italic.ttf [deleted file]
theme/neo-quitter/fonts/Lato-Italic.woff [deleted file]
theme/neo-quitter/fonts/Lato-Regular.eot [deleted file]
theme/neo-quitter/fonts/Lato-Regular.ttf [deleted file]
theme/neo-quitter/fonts/Lato-Regular.woff [deleted file]
theme/neo-quitter/fonts/stylesheet.css [deleted file]
theme/neo-quitter/images/lock.png [deleted file]
theme/neo-quitter/images/lock_open.png [deleted file]

index 8f094d16434a3b86e270806e758ce769e68f2b33..cfba97403b20e1918193cb34483aabc5063d6750 100644 (file)
@@ -2,6 +2,13 @@ InitializePlugin: a chance to initialize a plugin in a complete environment
 
 CleanupPlugin: a chance to cleanup a plugin at the end of a program
 
+StartActionExecute: Right before the "prepare" call of the current Action
+- $action:  the current Action object
+- &$args:   array of arguments, referenced so you can modify the array
+
+EndActionExecute:   Right after the "handle" call of the current Action
+- $action:      the current Action object
+
 StartPrimaryNav: Showing the primary nav menu
 - $action: the current action
 
@@ -1444,6 +1451,9 @@ StartResizeImageFile: Hook to resize an image and output it to a file. No matchi
 - $outpath:   string with output filepath
 - $box:       array with size ('width', 'height') and boundary box('x', 'y', 'w', 'h').
 
+FillImageFileMetadata: Get more metadata about the ImageFile if it is perhaps not a real local file
+- $imagefile    ImageFile object which we're getting metadata for (such as animated status, width/height etc.)
+
 StartShowAttachmentRepresentation: Attachment representation, full file (or in rare cases thumbnails/previews).
 - $out:     HTMLOutputter class to use for outputting HTML.
 - $file:    'File' object which we're going to show representation for.
@@ -1463,3 +1473,27 @@ StartNotifyMentioned: During notice distribution, we send notifications (email,
 EndNotifyMentioned: During notice distribution, we send notifications (email, im...) to the profiles who were somehow mentioned.
 - $stored:         Notice object that is being distributed.
 - $mentioned_ids:  Array of profile IDs (not just for local users) who got mentioned by the notice.
+
+StartHomeStubNavItems: Go back Home nav items. Default includes just one item 'home'
+- $out:     HTMLOutputter used to output (usually an Action, but not always!)
+- &$items:  Referenced array of items in the nav (add if desired)
+
+EndHomeStubNavItems:
+- $out:     HTMLOutputter used to output (usually an Action, but not always!)
+- $items:   array of menu items
+
+StartSubMenu: Before outputting a submenu (including enclosing tags) to HTML
+- $out:     HTMLOutputter used to output (usually an Action, but not always!)
+- $menu:    The Menu object outputted as a submenu.
+- $label:   Localized text which represents the menu item.
+
+EndSubMenu: After outputting a submenu (including enclosing tags) to HTML
+- $out:     HTMLOutputter used to output (usually an Action, but not always!)
+- $menu:    The Menu object outputted as a submenu.
+- $label:   Localized text which represents the menu item.
+
+StartDocNav: Before outputting the docs Nav
+- $nav: The DoclNav widget
+
+EndDocNav: After outputting the docs Nav
+- $nav: The DoclNav widget
diff --git a/INSTALL b/INSTALL
index 0483320a78bc08795afbde082346043a583d37a9..aad21756fe1c3f1976e97dcf956491604e626c95 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -6,13 +6,16 @@ TABLE OF CONTENTS
 * Installation
     - Getting it up and running
     - Fancy URLs
+    - Themes
+    - Private
+* Extra features
     - Sphinx
     - SMS
-    - Queues and daemons
-    - Themes
     - Translation
+    - Queues and daemons
+* After installation
     - Backups
-    - Private
+    - Upgrading
 
 Prerequisites
 =============
@@ -41,9 +44,10 @@ functional setup of GNU Social:
 - php5-curl     Fetching files by HTTP.
 - php5-gd       Image manipulation (scaling).
 - php5-gmp      For Salmon signatures (part of OStatus).
+- php5-intl     Internationalization support (transliteration et al).
 - php5-json     For WebFinger lookups and more.
 - php5-mysqlnd  The native driver for PHP5 MariaDB connections. If you
-                  use MySQL, 'mysql' or 'mysqli' may work.
+                  use MySQL, 'php5-mysql' or 'php5-mysqli' may be enough.
 
 The above package names are for Debian based systems. In the case of
 Arch Linux, PHP is compiled with support for most extensions but they
@@ -68,7 +72,7 @@ For some functionality, you will also need the following extensions:
 
 You may also experience better performance from your site if you configure
 a PHP cache/accelerator. Most distributions come with "opcache" support.
-Enable it in your php.ini, it is documented there together with its settings.
+Enable it in your php.ini where it is documented together with its settings.
 
 Installation
 ============
@@ -130,9 +134,9 @@ especially if you've previously installed PHP/MariaDB packages.
    writeable by the Web server group, as noted above.
 
 5. Create a database to hold your site data. Something like this
-   should work:
+   should work (you will be prompted for your database password):
 
-       mysqladmin -u "root" --password="rootpassword" create gnusocial
+       mysqladmin -u "root" -p create social
 
    Note that GNU Social should have its own database; you should not share
    the database with another program. You can name it whatever you want,
@@ -146,17 +150,17 @@ especially if you've previously installed PHP/MariaDB packages.
    database. If you have shell access, this will probably work from the
    MariaDB shell:
 
-       GRANT ALL on gnusocial.*
-       TO 'gnusocial'@'localhost'
+       GRANT ALL on social.*
+       TO 'social'@'localhost'
        IDENTIFIED BY 'agoodpassword';
 
-   You should change the user identifier 'gnusocial' and 'agoodpassword'
+   You should change the user identifier 'social' and 'agoodpassword'
    to your preferred new database username and password. You may want to
    test logging in to MariaDB as this new user.
 
 7. In a browser, navigate to the GNU Social install script; something like:
 
-       http://social.example.net/install.php
+       https://social.example.net/install.php
 
    Enter the database connection information and your site name. The
    install program will configure your site and install the initial,
@@ -170,55 +174,100 @@ Fancy URLs
 ----------
 
 By default, GNU Social will use URLs that include the main PHP program's
-name in them. For example, a user's home profile might be found at:
+name in them. For example, a user's home profile might be found at either
+of these URLS depending on the webserver's configuration and capabilities:
 
-    http://example.net/gnusocial/index.php/gnusocial/fred
+    https://social.example.net/index.php/fred
+    https://social.example.net/index.php?p=fred
 
-On certain systems that don't support this kind of syntax, they'll
-look like this:
+It's possible to configure the software to use fancy URLs so it looks like
+this instead:
 
-    http://example.net/gnusocial/index.php?p=gnusocial/fred
-
-It's possible to configure the software so it looks like this instead:
-
-    http://example.net/gnusocial/fred
+    https://social.example.net/fred
 
 These "fancy URLs" are more readable and memorable for users. To use
 fancy URLs, you must either have Apache 2.x with .htaccess enabled and
 mod_rewrite enabled, -OR- know how to configure "url redirection" in
 your server (like lighttpd or nginx).
 
-1. Copy the htaccess.sample file to .htaccess in your StatusNet
-   directory.
-
-2. Change the "RewriteBase" in the new .htaccess file to be the URL path
-   to your GNU Social installation on your server. Typically this will
-   be the path to your GNU Social directory relative to your Web root.
-   If you are installing it in the root directory, leave it as '/'.
-
-3. Add, uncomment or change a line in your config.php file so it says:
-
+1. See the instructions for each respective webserver software:
+    * For Apache, inspect the "htaccess.sample" file and save it as
+        ".htaccess" after making any necessary modifications. Our sample
+        file is well commented. 
+    * For lighttpd, inspect the lighttpd.conf.example file and apply the
+        appropriate changes in your virtualhost configuration for lighttpd.
+    * For nginx and other webservers, we gladly accept contributions of
+        server configuration examples.
+
+2. Assuming your webserver is properly configured and have its settings
+    applied (remember to reload/restart it), you can add this to your
+    GNU social's config.php file: 
        $config['site']['fancy'] = true;
 
 You should now be able to navigate to a "fancy" URL on your server,
 like:
 
-    http://example.net/gnusocial/main/register
+    https://social.example.net/main/register
+
+Themes
+------
+
+As of right now, your ability change the theme is limited to CSS
+stylesheets and some image files; you can't change the HTML output,
+like adding or removing menu items, without the help of a plugin.
+
+You can choose a theme using the $config['site']['theme'] element in
+the config.php file. See below for details.
+
+You can add your own theme by making a sub-directory of the 'theme'
+subdirectory with the name of your theme. Each theme can have the
+following files:
+
+display.css: a CSS2 file for "default" styling for all browsers.
+logo.png: a logo image for the site.
+default-avatar-profile.png: a 96x96 pixel image to use as the avatar for
+    users who don't upload their own.
+default-avatar-stream.png: Ditto, but 48x48. For streams of notices.
+default-avatar-mini.png: Ditto ditto, but 24x24. For subscriptions
+    listing on profile pages.
+
+You may want to start by copying the files from the default theme to
+your own directory.
+
+Private
+-------
+
+A GNU social node can be configured as "private", which means it will not
+federate with other nodes in the network. It is not a recommended method
+of using GNU social and we cannot at the current state of development
+guarantee that there are no leaks (what a public network sees as features,
+private sites will likely see as bugs). 
+
+Private nodes are however an easy way to easily setup collaboration and
+image sharing within a workgroup or a smaller community where federation
+is not a desired feature. Also, it is possible to change this setting and
+instantly gain full federation features.
 
-If you changed your HTTP server configuration, you may need to restart
-the server first.
+Access to file attachments can also be restricted to logged-in users only:
 
-If it doesn't work, double-check that AllowOverride for the GNU Social
-directory is 'All' in your Apache configuration file. This is usually
-/etc/httpd.conf, /etc/apache/httpd.conf, or (on Debian and Ubuntu)
-/etc/apache2/sites-available/default. See the Apache documentation for
-.htaccess files for more details:
+1. Add a directory outside the web root where your file uploads will be
+   stored. Use this command as an initial guideline to create it:
 
-    http://httpd.apache.org/docs/2.2/howto/htaccess.html
+       mkdir /var/www/gnusocial-files
+
+2. Make the file uploads directory writeable by the web server. An
+   insecure way to do this is (to do it properly, read up on UNIX file
+   permissions and configure your webserver accordingly):
+
+       chmod a+x /var/www/gnusocial-files
+
+3. Tell GNU social to use this directory for file uploads. Add a line
+   like this to your config.php:
 
-Also, check that mod_rewrite is installed and enabled:
+       $config['attachments']['dir'] = '/var/www/gnusocial-files';
 
-    http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
+Extra features
+==============
 
 Sphinx
 ------
@@ -283,7 +332,21 @@ For this to work, there *must* be a domain or sub-domain for which all
 
        $config['mail']['domain'] = 'yourdomain.example.net';
 
+Translations
+------------
 
+For info on helping with translations, see the platform currently in use
+for translations: https://www.transifex.com/projects/p/gnu-social/
+
+Translations use the gettext system <http://www.gnu.org/software/gettext/>.
+If you for some reason do not wish to sign up to the Transifex service,
+you can review the files in the "locale/" sub-directory of GNU social.
+Each plugin also has its own translation files.
+
+To get your own site to use all the translated languages, and you are
+tracking the git repo, you will need to install at least 'gettext' on
+your system and then run:
+    $ make translations
 
 Queues and daemons
 ------------------
@@ -345,16 +408,13 @@ separate server is probably a good idea for high-volume sites.
    .htaccess file, but make sure that your config.php file is close
    to, or identical to, your Web server's version.
 
-3. In your config.php files (both the Web server and the queues
-   server!), set the following variable:
+3. In your config.php files (on the server where you run the queue
+    daemon), set the following variable:
 
-       $config['queue']['enabled'] = true;
        $config['queue']['daemon'] = true;
 
-   You may also want to look at the 'daemon' section of this file for
-   more daemon options. Note that if you set the 'user' and/or 'group'
-   options, you'll need to create that user and/or group by hand.
-   They're not created automatically.
+   You may also want to look at the 'Queues and Daemons' section in
+   this file for more background processing options.
 
 4. On the queues server, run the command scripts/startdaemons.sh.
 
@@ -384,85 +444,20 @@ It is also possible to use a STOMP server instead of our kind of hacky
 home-grown DB-based queue solution. This is strongly recommended for
 best response time, especially when using XMPP.
 
-Themes
-------
-
-Older themes (version 0.9.x and below) no longer work with StatusNet
-1.0.x, due to major changes in the site layout. We ship with three new
-themes for this version, 'neo', 'neo-blue' and 'neo-light'.
-
-As of right now, your ability to change the theme is site-wide; users
-can't choose their own theme. Additionally, the only thing you can
-change in the theme is CSS stylesheets and some image files; you can't
-change the HTML output, like adding or removing menu items.
-
-You can choose a theme using the $config['site']['theme'] element in
-the config.php file. See below for details.
-
-You can add your own theme by making a sub-directory of the 'theme'
-subdirectory with the name of your theme. Each theme can have the
-following files:
-
-display.css: a CSS2 file for "default" styling for all browsers.
-logo.png: a logo image for the site.
-default-avatar-profile.png: a 96x96 pixel image to use as the avatar for
-    users who don't upload their own.
-default-avatar-stream.png: Ditto, but 48x48. For streams of notices.
-default-avatar-mini.png: Ditto ditto, but 24x24. For subscriptions
-    listing on profile pages.
-
-You may want to start by copying the files from the default theme to
-your own directory.
-
-Translation
------------
-
-Translations in StatusNet use the gettext system <http://www.gnu.org/software/gettext/>.
-Theoretically, you can add your own sub-directory to the locale/
-subdirectory to add a new language to your system. You'll need to
-compile the ".po" files into ".mo" files, however.
-
-Contributions of translation information to StatusNet are very easy:
-you can use the Web interface at translatewiki.net to add one
-or a few or lots of new translations -- or even new languages. You can
-also download more up-to-date .po files there, if you so desire.
-
-For info on helping with translations, see http://status.net/wiki/Translations
+After installation
+==================
 
 Backups
 -------
 
-There is no built-in system for doing backups in StatusNet. You can make
+There is no built-in system for doing backups in GNU social. You can make
 backups of a working StatusNet system by backing up the database and
-the Web directory. To backup the database use mysqldump <http://ur1.ca/7xo>
+the Web directory. To backup the database use mysqldump <https://mariadb.com/kb/en/mariadb/mysqldump/>
 and to backup the Web directory, try tar.
 
-Private
--------
-
-The administrator can set the "private" flag for a site so that it's
-not visible to non-logged-in users. (This is the default for new installs of version 1.0!)
-
-This might be useful for workgroups who want to share a social
-networking site for project management, but host it on a public
-server.
-
-Total privacy is attempted but not guaranteed or ensured. Private sites
-currently don't work well with OStatus federation.
-
-Access to file attachments can also be restricted to logged-in users only.
-
-1. Add a directory outside the web root where your file uploads will be
-   stored. Usually a command like this will work:
-
-       mkdir /var/www/statusnet-files
-
-2. Make the file uploads directory writeable by the web server. An
-   insecure way to do this is:
-
-       chmod a+x /var/www/statusnet-files
-
-3. Tell StatusNet to use this directory for file uploads. Add a line
-   like this to your config.php:
+Upgrading
+---------
 
-       $config['attachments']['dir'] = '/var/www/statusnet-files';
+Upgrading is strongly recommended to stay up to date with security fixes
+and new features. For instructions on how to upgrade GNU social code,
+please see the UPGRADE file.
index 714195d240ad041f33989df357d325df803612c1..556ac07130d766a4ce40fedce056f01554237488 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-# GNU social 1.1.3
-February 2015-02-27
+# GNU social 1.2.x
+2015
 
 (c) Free Software Foundation, Inc
 (c) StatusNet, Inc
@@ -100,15 +100,19 @@ for additional terms.
 
 ## New this version
 
-This is a security fix and bug fix release since 1.1.3-beta2.
-All 1.1.x sites should upgrade to this version.
+This is the development branch for the 1.2.x version of GNU social.
+All daring 1.1.x admins should upgrade to this version.
 
 So far it includes the following changes:
 
+- Backing up a user's account is more and more complete.
+- Emojis 😸 (utf8mb4 support)
+
+The last release, 1.1.3, gave us these improvements:
+
 - XSS security fix (thanks Simon Waters, <https://www.surevine.com/>)
 - Many improvements to ease adoption of the Qvitter front-end <https://github.com/hannesmannerheim/qvitter>
 - Protocol adaptions for improved performance and stability
-- Backing up a user's account now appears to work as it should
 
 Upgrades from _StatusNet_ 1.1.1 will also experience these improvements:
 
@@ -146,7 +150,7 @@ In the current phase of development it is probably
 recommended to use git as a means to stay up to date
 with the source code. You can choose between these
 branches:
-- 1.1.x     "stable", few updates, well tested code
+- 1.2.x     "stable", few updates, well tested code
 - master    "testing", more updates, usually working well
 - nightly   "unstable", most updates, not always working
 
diff --git a/UPGRADE b/UPGRADE
index 10758c52e4c6d3c1535c7e4498b9055ab13f2ce7..d2cd365e55a9deb1e4bce5ed1acd339543994d8c 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -1,99 +1,98 @@
 Upgrading
 =========
 
-StatusNet 1.1.1 to GNU social
------------------------------
+GNU social 1.1.x to GNU social 1.2.x
+------------------------------------
+
+If you are tracking the GNU social git repository, we currently recommend
+using the "master" branch (or nightly if you want to use latest features)
+and follow this procedure: 
+
+0. Backup your data. The StatusNet upgrade discussions below have some
+    guidelines to back up the database and files (mysqldump and rsync).
+
+1. Stop your queue daemons (you can run this command even if you do not
+    use the queue daemons):
+    $ bash scripts/stopdaemons.sh
+
+2. Run the command to fetch the latest sourcecode:
+    $ git pull
+    
+    If you are not using git we recommend following the instructions below
+    for upgrading "StatusNet 1.1.x to GNU social 1.2.x" as they are similar.
+
+3. Run the upgrade script:
+    $ php scripts/upgrade.php
+
+   The upgrade script will likely take a long time because it will
+    upgrade the tables to another character encoding and make other
+    automated upgrades. Make sure it ends without errors. If you get
+    errors, create a new task on https://bugz.foocorp.net/
+
+4. Start your queue daemons again (you can run this command even if you
+    do not use the queue daemons):
+    $ bash scripts/startdaemons.sh
+
+5. Report any issues at https://bugz.foocorp.net/ (tag GNU social)
+
+If you are using ssh keys to log in to your server, you can make this
+procedure pretty painless (assuming you have automated backups already).
+Make sure you "cd" into the correct directory (in this case "htdocs")
+and use the correct login@hostname combo:
+    $ ssh social@domain.example 'cd htdocs
+            && bash scripts/stopdaemons.sh
+            && git pull
+            && time php scripts/upgrade.php
+            && bash scripts/startdaemons.sh'
+
+StatusNet 1.1.x to GNU social 1.2.x
+-----------------------------------
 
 We cannot support migrating from any other version of StatusNet than 
 1.1.1. If you are running a StatusNet version lower than this, please 
 follow the upgrade procedures for each respective StatusNet version.
 
-You are now running StatusNet 1.1.1 and want to migrate to GNU social.
-Beware there may be changes in minimum required version of PHP and the
-modules used, so double-check the INSTALL file's requirements list.
+You are now running StatusNet 1.1.1 and want to migrate to GNU social
+1.2.x. Beware there may be changes in minimum required version of PHP
+and the modules required, so review the INSTALL file (php5-intl is a
+newly added dependency for example).
 
-Before you begin: Make backups. Always make backups. Of your entire 
+Before you begin: Make backups. Always make backups. Of your entire 
 directory structure and the database too. All tables. All data. Alles.
 
-    0. Stop your queue daemons 'php scripts/stopdaemon.php' should do it.
-        Not everyone runs queue daemons, but the above command won't hurt.
+0. Make a backup of everything. To backup the database, you can use a
+variant of this command (you will be prompted for the database password):
+    $ mysqldump -u dbuser -p dbname > social-backup.sql
 
-    1. Unpack your GNU social code to a fresh directory.
-    
-    2. Synchronize your local files to the GNU social directory. These 
-        will be the local files such as avatars, config and files:
-
-            avatar/*
-            background/*
-            file/*
-            local/*
-            .htaccess
-            config.php
-
-    3. Replace your old StatusNet directory with the new GNU social
-        directory in your webserver root.
-    
-    4. Run the upgrade script: 'php scripts/upgrade.php'
-    
-    5. Start your queue daemons: 'php scripts/startdaemons.php'
-    
-    6. Report any issues at https://bugz.foocorp.net/ (tag GNU social)
-
-
-Legacy StatusNet instructions
------------------------------
-
-These instructions are here for historical and perhaps informational
-purposes.
-
-If you've been using StatusNet 1.0 or lower, or if you've
-been tracking the "git" version of the software, you will probably
-want to upgrade and keep your existing data. Try these step-by-step
-instructions; read to the end first before trying them.
-
-0. Download StatusNet and set up all the prerequisites as if you were
-   doing a new install.
-1. Make backups of both your database and your Web directory. UNDER NO
-   CIRCUMSTANCES should you try to do an upgrade without a known-good
-   backup. You have been warned.
-2. Shut down Web access to your site, either by turning off your Web
-   server or by redirecting all pages to a "sorry, under maintenance"
-   page.
-3. Shut down XMPP access to your site, typically by shutting down the
-   xmppdaemon.php process and all other daemons that you're running.
-   If you've got "monit" or "cron" automatically restarting your
-   daemons, make sure to turn that off, too.
-4. Shut down SMS and email access to your site. The easy way to do
-   this is to comment out the line piping incoming email to your
-   maildaemon.php file, and running something like "newaliases".
-5. Once all writing processes to your site are turned off, make a
-   final backup of the Web directory and database.
-6. Move your StatusNet directory to a backup spot, like "statusnet.bak".
-7. Unpack your StatusNet 1.1.1 tarball and move it to "statusnet" or
-   wherever your code used to be.
-8. Copy the config.php file and the contents of the avatar/, background/,
-   file/, and local/ subdirectories from your old directory to your new
-   directory.
-9. Copy htaccess.sample to .htaccess in the new directory. Change the
-   RewriteBase to use the correct path.
-10. Upgrade the database.
-
-    NOTE: this step is destructive and cannot be
-    reversed. YOU CAN EASILY DESTROY YOUR SITE WITH THIS STEP. Don't
-    do it without a known-good backup!
-
-    In your new StatusNet 1.1.1 directory and AFTER YOU MAKE A
-    BACKUP run the upgrade.php script like this:
-
-        php ./scripts/upgrade.php
-
-11. Use mysql or psql client to log into your database and make sure that
-    the notice, user, profile, subscription etc. tables are non-empty.
-12. Turn back on the Web server, and check that things still work.
-13. Turn back on XMPP bots and email maildaemon.
-
-NOTE: the 1.0.0 version of StatusNet changed the URLs for all admin
-panels from /admin/* to /panel/*. This now allows the (popular)
-username 'admin', but blocks the considerably less popular username
-'panel'. If you have an existing user named 'panel', you should rename
-them before upgrading.
+1. Stop your queue daemons 'bash scripts/stopdaemons.sh' should do it.
+    Not everyone runs queue daemons, but the above command won't hurt.
+
+2. Unpack your GNU social code to a fresh directory. You can do this
+    by cloning our git repository:
+    $ git clone https://gitorious.org/social/mainline.git gnusocial
+
+3. Synchronize your local files to the GNU social directory. These 
+    will be the local files such as avatars, config and files:
+
+        avatar/*
+        background/*
+        file/*
+        local/*
+        .htaccess
+        config.php
+
+    This command will point you in the right direction on how to do it:
+    $ rsync -avP statusnet/{.htaccess,avatar,background,file,local,config.php} gnusocial/
+
+4. Replace your old StatusNet directory with the new GNU social
+    directory in your webserver root.
+
+5. Run the upgrade script: 'php scripts/upgrade.php'
+   The upgrade script will likely take a long time because it will
+    upgrade the tables to another character encoding and make other
+    automated upgrades. Make sure it ends without errors. If you get
+    errors, create a new task on https://bugz.foocorp.net/
+
+6. Start your queue daemons: 'bash scripts/startdaemons.sh'
+
+7. Report any issues at https://bugz.foocorp.net/ (tag GNU social)
index b5481df1cba369e239fb9564ab75c85711d359e8..0d018007cdd5f1aec35d38bc58f241b3483ce759 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-        
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
@@ -152,34 +151,29 @@ class ApiAccountRegisterAction extends ApiAction
             // TRANS: Form validation error displayed when trying to register with non-matching passwords.
                $this->clientError(_('Passwords do not match.'), 400);
         } else {
-           
-               // annoy spammers
-               sleep(7);
-           
-               if ($user = User::register(array('nickname' => $nickname,
-                                                       'password' => $password,
-                                                       'email' => $email,
-                                                       'fullname' => $fullname,
-                                                       'homepage' => $homepage,
-                                                       'bio' => $bio,
-                                                       'location' => $location,
-                                                       'code' => $this->code))) {
-                   if (!$user instanceof User) {
-                       // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                       $this->clientError(_('Invalid username or password.'), 400);
-                   }
-
-                   Event::handle('EndRegistrationTry', array($this));
-
-                   $this->initDocument('json');
-                   $this->showJsonObjects($this->twitterUserArray($user->getProfile()));
-                   $this->endDocument('json');
-
-               } else {
-                   // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                       $this->clientError(_('Invalid username or password.'), 400);
-               }                   
-        } 
+
+            // annoy spammers
+            sleep(7);
+
+            try {
+                $user = User::register(array('nickname' => $nickname,
+                                                    'password' => $password,
+                                                    'email' => $email,
+                                                    'fullname' => $fullname,
+                                                    'homepage' => $homepage,
+                                                    'bio' => $bio,
+                                                    'location' => $location,
+                                                    'code' => $this->code));
+                Event::handle('EndRegistrationTry', array($this));
+
+                $this->initDocument('json');
+                $this->showJsonObjects($this->twitterUserArray($user->getProfile()));
+                $this->endDocument('json');
+
+            } catch (Exception $e) {
+                $this->clientError($e->getMessage(), 400);
+            }
+        }
     }
 
     /**
index 12daf3e1e6fe68150ea652154ee420bf32bf0ba8..f82060f54730d61c7ea6698256b7ea1573bebf0b 100644 (file)
@@ -57,7 +57,7 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
      */
     protected function handle()
     {
-        parent::handle();
+        parent::handle($args);
 
         if (!in_array($this->format, array('xml', 'json'))) {
             // TRANS: Client error displayed when coming across a non-supported API method.
index 873883c6513bd4ea8bac56c2dd2ebe79cedd5edb..3997a8b51c4161d48621e0112bb143fe7683903f 100644 (file)
@@ -29,9 +29,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Allows the authenticating users to follow (subscribe) the user specified in
@@ -90,7 +88,7 @@ class ApiFriendshipsCreateAction extends ApiAuthAction
             $this->clientError(_('Could not follow user: profile not found.'), 403);
         }
 
-        if ($this->user->isSubscribed($this->other)) {
+        if ($this->scoped->isSubscribed($this->other)) {
             $errmsg = sprintf(
                 // TRANS: Client error displayed when trying to follow a user that's already being followed.
                 // TRANS: %s is the nickname of the user that is already being followed.
@@ -101,9 +99,9 @@ class ApiFriendshipsCreateAction extends ApiAuthAction
         }
 
         try {
-            Subscription::start($this->user->getProfile(), $this->other);
-        } catch (Exception $e) {
-            $this->clientError($e->getMessage(), 403);
+            Subscription::start($this->scoped, $this->other);
+        } catch (AlreadyFulfilledException $e) {
+            $this->clientError($e->getMessage(), 409);
         }
 
         $this->initDocument($this->format);
index 610c912cb65f19c10dd6532e547af31f161f91dc..5c8036bc458b6db45e8f914259c38f9e3989bb99 100644 (file)
@@ -29,9 +29,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Allows the authenticating users to unfollow (unsubscribe) the user specified in
@@ -48,7 +46,9 @@ if (!defined('STATUSNET')) {
  */
 class ApiFriendshipsDestroyAction extends ApiAuthAction
 {
-    var $other  = null;
+    protected $needPost = true;
+
+    protected $other = null;
 
     /**
      * Take arguments for running
@@ -58,12 +58,11 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
      * @return boolean success flag
      *
      */
-    function prepare(array $args=array())
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
-        $this->user   = $this->auth_user;
-        $this->other  = $this->getTargetProfile($this->arg('id'));
+        $this->other = $this->getTargetProfile($this->arg('id'));
 
         return true;
     }
@@ -73,58 +72,40 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
      *
      * Check the format and show the user info
      *
-     * @param array $args $_REQUEST data (unused)
-     *
      * @return void
      */
-    function handle(array $args=array())
+    protected function handle()
     {
-        parent::handle($args);
-
-        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            $this->clientError(
-                // TRANS: Client error. POST is a HTTP command. It should not be translated.
-                _('This method requires a POST.'),
-                400,
-                $this->format
-            );
-            return;
-        }
+        parent::handle();
 
         if (!in_array($this->format, array('xml', 'json'))) {
             $this->clientError(
                 // TRANS: Client error displayed when coming across a non-supported API method.
                 _('API method not found.'),
-                404,
-                $this->format
+                404
             );
-            return;
         }
 
-        if (empty($this->other)) {
+        if (!$this->other instanceof Profile) {
             $this->clientError(
                 // TRANS: Client error displayed when trying to unfollow a user that cannot be found.
                 _('Could not unfollow user: User not found.'),
-                403,
-                $this->format
+                403
             );
-            return;
         }
 
         // Don't allow unsubscribing from yourself!
 
-        if ($this->user->id == $this->other->id) {
+        if ($this->scoped->id == $this->other->id) {
             $this->clientError(
                 // TRANS: Client error displayed when trying to unfollow self.
                 _("You cannot unfollow yourself."),
-                403,
-                $this->format
+                403
             );
-            return;
         }
 
         // throws an exception on error
-        Subscription::cancel($this->user->getProfile(), $this->other);
+        Subscription::cancel($this->scoped, $this->other);
 
         $this->initDocument($this->format);
         $this->showProfile($this->other, $this->format);
index 2f07b3ec7c665b8d147fa0a7e40481ca5052c5f9..21d82f96fd13f20fc41cf77bf247ccc12709d355 100644 (file)
@@ -29,9 +29,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Tests for the existence of friendship between two users. Will return true if
@@ -57,7 +55,7 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
      *
      * @return boolean success flag
      */
-    function prepare(array $args=array())
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
@@ -72,22 +70,18 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
      *
      * Check the format and show the user info
      *
-     * @param array $args $_REQUEST data (unused)
-     *
      * @return void
      */
-    function handle(array $args=array())
+    protected function handle()
     {
-        parent::handle($args);
+        parent::handle();
 
         if (empty($this->profile_a) || empty($this->profile_b)) {
             $this->clientError(
                 // TRANS: Client error displayed when supplying invalid parameters to an API call checking if a friendship exists.
                 _('Two valid IDs or nick names must be supplied.'),
-                400,
-                $this->format
+                400
             );
-            return;
         }
 
         $result = Subscription::exists($this->profile_a, $this->profile_b);
index 1cbb98891ae2c01c6f05623938908ba8e9faa577..31f47ce2f15f59dd0d07ded6e9991e0a9bf22cde 100644 (file)
@@ -29,9 +29,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Outputs detailed information about the relationship between two users
@@ -56,7 +54,7 @@ class ApiFriendshipsShowAction extends ApiBareAuthAction
      *
      * @return boolean success flag
      */
-    function prepare(array $args=array())
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
@@ -109,13 +107,11 @@ class ApiFriendshipsShowAction extends ApiBareAuthAction
      *
      * Check the format and show the user info
      *
-     * @param array $args $_REQUEST data (unused)
-     *
      * @return void
      */
-    function handle(array $args=array())
+    protected function handle()
     {
-        parent::handle($args);
+        parent::handle();
 
         if (!in_array($this->format, array('xml', 'json'))) {
             // TRANS: Client error displayed when coming across a non-supported API method.
index 8580b209a541893c0a699c32660a1ae2835dd751..b675478cf67dcadde4fc33e476e082c78a231493 100644 (file)
@@ -52,7 +52,7 @@ class ApiMediaUploadAction extends ApiAuthAction
      */
     protected function handle()
     {
-        parent::handle();
+        parent::handle($args);
 
         // Workaround for PHP returning empty $_POST and $_FILES when POST
         // length > post_max_size in php.ini
index a3ffa7db3037a6262cb4678f067cdb146f72fad1..14091eedee256cd66df8ab7b144f75e38b526a3e 100644 (file)
@@ -27,9 +27,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Show most recent notices that are repeats in user's inbox
@@ -59,7 +57,7 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
      *
      * @return boolean success flag
      */
-    function prepare(array $args=array())
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
@@ -79,35 +77,33 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
      *
      * show a timeline of the user's repeated notices
      *
-     * @param array $args $_REQUEST data (unused)
-     *
      * @return void
      */
-    function handle(array $args=array())
+    protected function handle()
     {
-        parent::handle($args);
+        parent::handle();
 
         $offset = ($this->page-1) * $this->cnt;
         $limit  = $this->cnt;
 
         // TRANS: Title for Atom feed "repeated to me". %s is the user nickname.
-        $title      = sprintf(_("Repeated to %s"), $this->auth_user->nickname);
+        $title      = sprintf(_("Repeated to %s"), $this->scoped->getNickname());
         $subtitle   = sprintf(
             // @todo FIXME: $profile is not defined.
             // TRANS: Subtitle for API action that shows most recent notices that are repeats in user's inbox.
             // TRANS: %1$s is the sitename, %2$s is a user nickname, %3$s is a user profile name.
             _('%1$s notices that were to repeated to %2$s / %3$s.'),
-            $sitename, $this->user->nickname, $profile->getBestName()
+            $sitename, $this->scoped->getNickname(), $profile->getBestName()
         );
         $taguribase = TagURI::base();
-        $id         = "tag:$taguribase:RepeatedToMe:" . $this->auth_user->id;
+        $id         = "tag:$taguribase:RepeatedToMe:" . $this->scoped->id;
 
         $link = common_local_url(
             'all',
-             array('nickname' => $this->auth_user->nickname)
+             array('nickname' => $this->scoped->getNickname())
         );
 
-        $strm = $this->auth_user->repeatedToMe($offset, $limit, $this->since_id, $this->max_id);
+        $strm = $this->scoped->repeatedToMe($offset, $limit, $this->since_id, $this->max_id);
 
         switch ($this->format) {
         case 'xml':
@@ -119,7 +115,7 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
         case 'atom':
             header('Content-Type: application/atom+xml; charset=utf-8');
 
-            $atom = new AtomNoticeFeed($this->auth_user);
+            $atom = new AtomNoticeFeed($this->scoped->getUser());
 
             $atom->setId($id);
             $atom->setTitle($title);
@@ -137,7 +133,7 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
             break;
         case 'as':
             header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
-            $doc = new ActivityStreamJSONDocument($this->auth_user);
+            $doc = new ActivityStreamJSONDocument($this->scoped->getUser());
             $doc->setTitle($title);
             $doc->addLink($link, 'alternate', 'text/html');
             $doc->addItemsFromNotices($strm);
index 81b8fcc88f3c5856e1bae420444a8639d42de904..1ec6b74de6ea74bf495f1369820134beefb2c43c 100644 (file)
@@ -79,6 +79,10 @@ class ApiTimelineUserAction extends ApiBareAuthAction
             $this->clientError(_('No such user.'), 404);
         }
 
+        if (!$this->target->isLocal()) {
+            $this->serverError(_('Remote user timelines are not available here yet.'), 501);
+        }
+
         $this->notices = $this->getNotices();
 
         return true;
@@ -405,7 +409,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction
 
         // Get (safe!) HTML and text versions of the content
 
-        $rendered = $this->purify($sourceContent);
+        $rendered = common_purify($sourceContent);
         $content = common_strip_html($rendered);
 
         $shortened = $this->auth_user->shortenLinks($content);
@@ -504,13 +508,4 @@ class ApiTimelineUserAction extends ApiBareAuthAction
 
         return $saved;
     }
-
-    function purify($content)
-    {
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*');
-        return htmLawed($content, $config);
-    }
 }
index 413277a5d355e31150189dd8ecd0385a59064ec5..6a483b95c09f7c1cfea1d7ea0749add33a300758 100644 (file)
@@ -230,18 +230,11 @@ class AtompubsubscriptionfeedAction extends AtompubAction
                 $this->clientError(sprintf(_('Unknown profile %s.'), $person->id));
             }
 
-            if (Subscription::exists($this->_profile, $profile)) {
+            try {
+                $sub = Subscription::start($this->_profile, $profile);
+            } catch (AlreadyFulfilledException $e) {
                 // 409 Conflict
-                // TRANS: Client error displayed trying to subscribe to an already subscribed profile.
-                // TRANS: %s is the profile the user already has a subscription on.
-                $this->clientError(sprintf(_('Already subscribed to %s.'),
-                                           $person->id),
-                                   409);
-            }
-
-            if (Subscription::start($this->_profile, $profile)) {
-                $sub = Subscription::pkeyGet(array('subscriber' => $this->_profile->id,
-                                                   'subscribed' => $profile->id));
+                $this->clientError($e->getMessage(), 409);
             }
 
             Event::handle('EndAtomPubNewActivity', array($activity, $sub));
index 35e775ab1ddfb2ebb1e322a5011e3e4c3d8a2b3c..4f4805814bd9357ec108efcd310dcdc01735b3a8 100644 (file)
@@ -70,7 +70,7 @@ class CancelsubscriptionAction extends FormAction
             common_debug('Tried to cancel a non-existing pending subscription');
         }
 
-        if (StatusNet::isAjax()) {
+        if (GNUsocial::isAjax()) {
             $this->startHTML('text/xml;charset=utf-8');
             $this->elementStart('head');
             // TRANS: Title after unsubscribing from a group.
index 8d6c16c594e3c787c65f7f1f7dc5df0d7d6e1c12..d59c63631a4c02049f8b29ae4042c4ee37110b65 100644 (file)
@@ -174,11 +174,15 @@ class DocNav extends Menu
 {
     function show()
     {
-        $stub = new HomeStubNav($this->action);
-        $this->submenu(_m('MENU','Home'), $stub);
-
-        $docs = new DocListNav($this->action);
-        $this->submenu(_m('MENU','Docs'), $docs);
+        if (Event::handle('StartDocNav', array($this))) {
+            $stub = new HomeStubNav($this->action);
+            $this->submenu(_m('MENU','Home'), $stub);
+
+            $docs = new DocListNav($this->action);
+            $this->submenu(_m('MENU','Docs'), $docs);
+            
+            Event::handle('EndDocNav', array($this));
+        }
     }
 }
 
index 0c2033d821d0587a0bcbf5aeb974d17ad3024ebd..47c6fe54e513a738cedf12a7275d6e8edcbbf19a 100644 (file)
@@ -313,7 +313,7 @@ class EmailsettingsAction extends SettingsAction
      */
     function savePreferences()
     {
-        $user = common_current_user();
+        $user = $this->scoped->getUser();
 
         if (Event::handle('StartEmailSaveForm', array($this, $this->scoped))) {
             $emailnotifysub   = $this->boolean('emailnotifysub');
@@ -323,8 +323,6 @@ class EmailsettingsAction extends SettingsAction
             $emailmicroid     = $this->boolean('emailmicroid');
             $emailpost        = $this->boolean('emailpost');
 
-            assert(!is_null($user)); // should already be checked
-
             $user->query('BEGIN');
 
             $original = clone($user);
@@ -340,6 +338,7 @@ class EmailsettingsAction extends SettingsAction
 
             if ($result === false) {
                 common_log_db_error($user, 'UPDATE', __FILE__);
+                $user->query('ROLLBACK');
                 // TRANS: Server error thrown on database error updating e-mail preferences.
                 $this->serverError(_('Could not update user.'));
             }
index 2853fb070768f4b7477af85544957bb39dd039f4..c3464efb5407ccbbf8bacadbe6c158f815c5dc60 100644 (file)
@@ -118,7 +118,7 @@ class InviteAction extends Action
                         $this->already[] = $other;
                     } else {
                         try {
-                            Subscription::start($profile, $other);
+                            Subscription::ensureStart($profile, $other);
                             $this->subbed[] = $other;
                         } catch (Exception $e) {
                             // subscription failed, but keep working
index 692ba765c8a4dd485b25abb0930e24c3a23b7f2d..f9b04cae3c3b29d325cb4797f2a87d782e437e11 100644 (file)
@@ -110,7 +110,7 @@ class NewnoticeAction extends FormAction
         $cmd = $inter->handle_command($user, $content);
 
         if ($cmd) {
-            if (StatusNet::isAjax()) {
+            if (GNUsocial::isAjax()) {
                 $cmd->execute(new AjaxWebChannel($this));
             } else {
                 $cmd->execute(new WebChannel($this));
@@ -195,7 +195,7 @@ class NewnoticeAction extends FormAction
 
         Event::handle('EndSaveNewNoticeWeb', array($this, $user, &$content_shortened, &$options));
 
-        if (!StatusNet::isAjax()) {
+        if (!GNUsocial::isAjax()) {
             $url = common_local_url('shownotice', array('notice' => $this->stored->id));
             common_redirect($url, 303);
         }
index 6b7764d37a35d001623da92da2933a32c3daebc5..f030c279d878c8f6083915a94baf188b049b1aa5 100644 (file)
@@ -27,9 +27,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
 
 /**
  * An action for registering a new user account
@@ -229,40 +227,38 @@ class RegisterAction extends Action
             } else if ($password != $confirm) {
                 // TRANS: Form validation error displayed when trying to register with non-matching passwords.
                 $this->showForm(_('Passwords do not match.'));
-            } else if ($user = User::register(array('nickname' => $nickname,
+            } else {
+                try {
+                    $user = User::register(array('nickname' => $nickname,
                                                     'password' => $password,
                                                     'email' => $email,
                                                     'fullname' => $fullname,
                                                     'homepage' => $homepage,
                                                     'bio' => $bio,
                                                     'location' => $location,
-                                                    'code' => $code))) {
-                if (!($user instanceof User)) {
+                                                    'code' => $code));
+                    // success!
+                    if (!common_set_user($user)) {
+                        // TRANS: Server error displayed when saving fails during user registration.
+                        $this->serverError(_('Error setting user.'));
+                    }
+                    // this is a real login
+                    common_real_login(true);
+                    if ($this->boolean('rememberme')) {
+                        common_debug('Adding rememberme cookie for ' . $nickname);
+                        common_rememberme($user);
+                    }
+
+                    // Re-init language env in case it changed (not yet, but soon)
+                    common_init_language();
+
+                    Event::handle('EndRegistrationTry', array($this));
+
+                    $this->showSuccess();
+                } catch (Exception $e) {
                     // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                    $this->showForm(_('Invalid username or password.'));
-                    return;
-                }
-                // success!
-                if (!common_set_user($user)) {
-                    // TRANS: Server error displayed when saving fails during user registration.
-                    $this->serverError(_('Error setting user.'));
-                }
-                // this is a real login
-                common_real_login(true);
-                if ($this->boolean('rememberme')) {
-                    common_debug('Adding rememberme cookie for ' . $nickname);
-                    common_rememberme($user);
+                    $this->showForm($e->getMessage());
                 }
-
-                // Re-init language env in case it changed (not yet, but soon)
-                common_init_language();
-
-                Event::handle('EndRegistrationTry', array($this));
-
-                $this->showSuccess();
-            } else {
-                // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                $this->showForm(_('Invalid username or password.'));
             }
         }
     }
index 33bfa6bf61728dba8f17d1166d9fd790b3d37a2a..cf50ee8ad8fd38736d503f94b816961468c3eff7 100644 (file)
@@ -70,7 +70,7 @@ class ShownoticeAction extends ManagedAction
     {
         parent::prepare($args);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->notice = $this->getNotice();
index 6a232e38351b6bee461c914b501361c042852508..1da061819baf835b90d10610127e780fad3ca2a2 100644 (file)
@@ -122,7 +122,7 @@ class SubscribeAction extends Action
     {
         // Throws exception on error
 
-        $sub = Subscription::start($this->user->getProfile(),
+        $sub = Subscription::ensureStart($this->user->getProfile(),
                                    $this->other);
 
         if ($this->boolean('ajax')) {
old mode 100755 (executable)
new mode 100644 (file)
index ef0dcb1df7dd4dc56798f087bafdcb48374506da..c15a118e122f7a6f397b2323a8684c4094f20f14 100644 (file)
@@ -22,7 +22,7 @@ class Attention extends Managed_DataObject
     public $__table = 'attention';  // table name
     public $notice_id;              // int(4) primary_key not_null
     public $profile_id;             // int(4) primary_key not_null
-    public $reason;                 // varchar(255)
+    public $reason;                 // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                // datetime()   not_null
     public $modified;               // timestamp   not_null default_CURRENT_TIMESTAMP
 
@@ -33,7 +33,7 @@ class Attention extends Managed_DataObject
             'fields' => array(
                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice_id to give attention'),
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile_id for feed receiver'),
-                'reason' => array('type' => 'varchar', 'length' => 255, 'description' => 'Optional reason why this was brought to the attention of profile_id'),
+                'reason' => array('type' => 'varchar', 'length' => 191, 'description' => 'Optional reason why this was brought to the attention of profile_id'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index d86ffdfcdb8514e8132ac61bf44da2411b2a4137..9af7c40ffd2e28f921e3fee1d208a8e1e0afc5e9 100644 (file)
@@ -15,8 +15,8 @@ class Avatar extends Managed_DataObject
     public $width;                           // int(4)  primary_key not_null
     public $height;                          // int(4)  primary_key not_null
     public $mediatype;                       // varchar(32)   not_null
-    public $filename;                        // varchar(255)
-    public $url;                             // varchar(255)  unique_key
+    public $filename;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $url;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -32,14 +32,14 @@ class Avatar extends Managed_DataObject
                 'width' => array('type' => 'int', 'not null' => true, 'description' => 'image width'),
                 'height' => array('type' => 'int', 'not null' => true, 'description' => 'image height'),
                 'mediatype' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'file type'),
-                'filename' => array('type' => 'varchar', 'length' => 255, 'description' => 'local filename, if local'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'avatar location'),
+                'filename' => array('type' => 'varchar', 'length' => 191, 'description' => 'local filename, if local'),
+                'url' => array('type' => 'text', 'description' => 'avatar location, not indexed - do not use in WHERE statement'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
             'primary key' => array('profile_id', 'width', 'height'),
             'unique keys' => array(
-                'avatar_url_key' => array('url'),
+//                'avatar_filename_key' => array('filename'),
             ),
             'foreign keys' => array(
                 'avatar_profile_id_fkey' => array('profile', array('profile_id' => 'id')),
index 899396d710e13823270698903eaf5dcdfc422ea5..2e8492849c4b9f68abb1586aad52f9406e9c81f2 100644 (file)
@@ -35,7 +35,7 @@ class Config extends Managed_DataObject
     public $__table = 'config';                          // table name
     public $section;                         // varchar(32)  primary_key not_null
     public $setting;                         // varchar(32)  primary_key not_null
-    public $value;                           // varchar(255)
+    public $value;                           // varchar(191)   not 255 because utf8mb4 takes more space
 
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
@@ -46,7 +46,7 @@ class Config extends Managed_DataObject
             'fields' => array(
                 'section' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'default' => '', 'description' => 'configuration section'),
                 'setting' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'default' => '', 'description' => 'configuration setting'),
-                'value' => array('type' => 'varchar', 'length' => 255, 'description' => 'configuration value'),
+                'value' => array('type' => 'varchar', 'length' => 191, 'description' => 'configuration value'),
             ),
             'primary key' => array('section', 'setting'),
         );
index 97c69872a60d1cb524c357e0a2b1f37a62a09b6f..2cb5b65131af2194c80616c1f80c00bdac1c8eff 100644 (file)
@@ -12,8 +12,8 @@ class Confirm_address extends Managed_DataObject
     public $__table = 'confirm_address';                 // table name
     public $code;                            // varchar(32)  primary_key not_null
     public $user_id;                         // int(4)   not_null
-    public $address;                         // varchar(255)   not_null
-    public $address_extra;                   // varchar(255)   not_null
+    public $address;                         // varchar(191)   not_null   not 255 because utf8mb4 takes more space
+    public $address_extra;                   // varchar(191)   not_null   not 255 because utf8mb4 takes more space
     public $address_type;                    // varchar(8)   not_null
     public $claimed;                         // datetime()  
     public $sent;                            // datetime()  
@@ -28,8 +28,8 @@ class Confirm_address extends Managed_DataObject
             'fields' => array(
                 'code' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'good random code'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user who requested confirmation'),
-                'address' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'address (email, xmpp, SMS, etc.)'),
-                'address_extra' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'carrier ID, for SMS'),
+                'address' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'address (email, xmpp, SMS, etc.)'),
+                'address_extra' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'carrier ID, for SMS'),
                 'address_type' => array('type' => 'varchar', 'length' => 8, 'not null' => true, 'description' => 'address type ("email", "xmpp", "sms")'),
                 'claimed' => array('type' => 'datetime', 'description' => 'date this was claimed for queueing'),
                 'sent' => array('type' => 'datetime', 'description' => 'date this was sent for queueing'),
index 68e973bfb095bcfe55180c539026856b04c1f087..4121938ed864fd090ab25164980267492a8d737c 100644 (file)
@@ -10,8 +10,8 @@ class Consumer extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'consumer';                        // table name
-    public $consumer_key;                    // varchar(255)  primary_key not_null
-    public $consumer_secret;                 // varchar(255)   not_null
+    public $consumer_key;                    // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
+    public $consumer_secret;                 // varchar(191)   not_null   not 255 because utf8mb4 takes more space
     public $seed;                            // char(32)   not_null
     public $created;                         // datetime   not_null
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
@@ -24,8 +24,8 @@ class Consumer extends Managed_DataObject
         return array(
             'description' => 'OAuth consumer record',
             'fields' => array(
-                'consumer_key' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'unique identifier, root URL'),
-                'consumer_secret' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'secret value'),
+                'consumer_key' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'unique identifier, root URL'),
+                'consumer_secret' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'secret value'),
                 'seed' => array('type' => 'char', 'length' => 32, 'not null' => true, 'description' => 'seed for new tokens by this consumer'),
 
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
index 56f61c63ab2c1453ebd8250c6c17b721bd358bcc..343668cc49d95e6632488c77f87668ed690aaecf 100644 (file)
@@ -35,7 +35,7 @@ class Conversation extends Managed_DataObject
 {
     public $__table = 'conversation';        // table name
     public $id;                              // int(4)  primary_key not_null
-    public $uri;                             // varchar(255)  unique_key
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $created;                         // datetime   not_null
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
 
@@ -44,7 +44,7 @@ class Conversation extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'should be set from root notice id (since 2014-03-01 commit)'),
-                'uri' => array('type' => 'varchar', 'not null'=>true, 'length' => 255, 'description' => 'URI of the conversation'),
+                'uri' => array('type' => 'varchar', 'not null'=>true, 'length' => 191, 'description' => 'URI of the conversation'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index 4c17be185a0ff438fe34004dc0fb28d0c7d9f9cd..a9167f19a48ee2c5069123567562dfcc13d1e70f 100644 (file)
@@ -34,7 +34,7 @@ class Deleted_notice extends Managed_DataObject
     public $__table = 'deleted_notice';                  // table name
     public $id;                              // int(4)  primary_key not_null
     public $profile_id;                      // int(4)   not_null
-    public $uri;                             // varchar(255)  unique_key
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $deleted;                         // datetime()   not_null
 
@@ -47,7 +47,7 @@ class Deleted_notice extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'identity of notice'),
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'author of the notice'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier, usually a tag URI'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date the notice record was created'),
                 'deleted' => array('type' => 'datetime', 'not null' => true, 'description' => 'date the notice record was created'),
             ),
index 1fcc83dd8845f22943d406627ddda6d4be7d01fb..1b97e2d6607b8d852a000cc68d59f223debc9350 100644 (file)
@@ -26,29 +26,36 @@ class File extends Managed_DataObject
 {
     public $__table = 'file';                            // table name
     public $id;                              // int(4)  primary_key not_null
-    public $url;                             // varchar(255)  unique_key
+    public $urlhash;                         // varchar(64)  unique_key
+    public $url;                             // text
+    public $filehash;                        // varchar(64)     indexed
     public $mimetype;                        // varchar(50)
     public $size;                            // int(4)
-    public $title;                           // varchar(255)
+    public $title;                           // varchar(191)   not 255 because utf8mb4 takes more space
     public $date;                            // int(4)
     public $protected;                       // int(4)
-    public $filename;                        // varchar(255)
+    public $filename;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $width;                           // int(4)
     public $height;                          // int(4)
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
+    const URLHASH_ALG = 'sha256';
+    const FILEHASH_ALG = 'sha256';
+
     public static function schemaDef()
     {
         return array(
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'destination URL after following redirections'),
+                'urlhash' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'sha256 of destination URL (url field)'),
+                'url' => array('type' => 'text', 'description' => 'destination URL after following possible redirections'),
+                'filehash' => array('type' => 'varchar', 'length' => 64, 'not null' => false, 'description' => 'sha256 of the file contents, only for locally stored files of course'),
                 'mimetype' => array('type' => 'varchar', 'length' => 50, 'description' => 'mime type of resource'),
                 'size' => array('type' => 'int', 'description' => 'size of resource when available'),
-                'title' => array('type' => 'varchar', 'length' => 255, 'description' => 'title of resource when available'),
+                'title' => array('type' => 'varchar', 'length' => 191, 'description' => 'title of resource when available'),
                 'date' => array('type' => 'int', 'description' => 'date of resource according to http query'),
                 'protected' => array('type' => 'int', 'description' => 'true when URL is private (needs login)'),
-                'filename' => array('type' => 'varchar', 'length' => 255, 'description' => 'if a local file, name of the file'),
+                'filename' => array('type' => 'varchar', 'length' => 191, 'description' => 'if a local file, name of the file'),
                 'width' => array('type' => 'int', 'description' => 'width in pixels, if it can be described as such and data is available'),
                 'height' => array('type' => 'int', 'description' => 'height in pixels, if it can be described as such and data is available'),
 
@@ -56,7 +63,10 @@ class File extends Managed_DataObject
             ),
             'primary key' => array('id'),
             'unique keys' => array(
-                'file_url_key' => array('url'),
+                'file_urlhash_key' => array('urlhash'),
+            ),
+            'indexes' => array(
+                'file_filehash_idx' => array('filehash'),
             ),
         );
     }
@@ -77,10 +87,11 @@ class File extends Managed_DataObject
         // I don't know why we have to keep doing this but I'm adding this last check to avoid
         // uniqueness bugs.
 
-        $file = File::getKV('url', $given_url);
+        $file = File::getKV('urlhash', self::hashurl($given_url));
         
         if (!$file instanceof File) {
             $file = new File;
+            $file->urlhash = self::hashurl($given_url);
             $file->url = $given_url;
             if (!empty($redir_data['protected'])) $file->protected = $redir_data['protected'];
             if (!empty($redir_data['title'])) $file->title = $redir_data['title'];
@@ -122,51 +133,56 @@ class File extends Managed_DataObject
             throw new ServerException('No canonical URL from given URL to process');
         }
 
-        $file = File::getKV('url', $given_url);
-        if (!$file instanceof File) {
+        $file = null;
+
+        try {
+            $file = File::getByUrl($given_url);
+        } catch (NoResultException $e) {
             // First check if we have a lookup trace for this URL already
-            $file_redir = File_redirection::getKV('url', $given_url);
-            if ($file_redir instanceof File_redirection) {
+            try {
+                $file_redir = File_redirection::getByUrl($given_url);
                 $file = File::getKV('id', $file_redir->file_id);
                 if (!$file instanceof File) {
                     // File did not exist, let's clean up the File_redirection entry
                     $file_redir->delete();
                 }
+            } catch (NoResultException $e) {
+                // We just wanted to doublecheck whether a File_thumbnail we might've had
+                // actually referenced an existing File object.
             }
+        }
 
-            // If we still don't have a File object, let's create one now!
-            if (!$file instanceof File) {
-                // @fixme for new URLs this also looks up non-redirect data
-                // such as target content type, size, etc, which we need
-                // for File::saveNew(); so we call it even if not following
-                // new redirects.
-                $redir_data = File_redirection::where($given_url);
-                if (is_array($redir_data)) {
-                    $redir_url = $redir_data['url'];
-                } elseif (is_string($redir_data)) {
-                    $redir_url = $redir_data;
-                    $redir_data = array();
-                } else {
-                    // TRANS: Server exception thrown when a URL cannot be processed.
-                    throw new ServerException(sprintf(_("Cannot process URL '%s'"), $given_url));
-                }
+        // If we still don't have a File object, let's create one now!
+        if (!$file instanceof File) {
+            // @fixme for new URLs this also looks up non-redirect data
+            // such as target content type, size, etc, which we need
+            // for File::saveNew(); so we call it even if not following
+            // new redirects.
+            $redir_data = File_redirection::where($given_url);
+            if (is_array($redir_data)) {
+                $redir_url = $redir_data['url'];
+            } elseif (is_string($redir_data)) {
+                $redir_url = $redir_data;
+                $redir_data = array();
+            } else {
+                // TRANS: Server exception thrown when a URL cannot be processed.
+                throw new ServerException(sprintf(_("Cannot process URL '%s'"), $given_url));
+            }
 
-                // TODO: max field length
-                if ($redir_url === $given_url || strlen($redir_url) > 255 || !$followRedirects) {
-                    // Save the File object based on our lookup trace
-                    $file = File::saveNew($redir_data, $given_url);
-                } else {
-                    // This seems kind of messed up... for now skipping this part
-                    // if we're already under a redirect, so we don't go into
-                    // horrible infinite loops if we've been given an unstable
-                    // redirect (where the final destination of the first request
-                    // doesn't match what we get when we ask for it again).
-                    //
-                    // Seen in the wild with clojure.org, which redirects through
-                    // wikispaces for auth and appends session data in the URL params.
-                    $file = self::processNew($redir_url, $notice_id, /*followRedirects*/false);
-                    File_redirection::saveNew($redir_data, $file->id, $given_url);
-                }
+            if ($redir_url === $given_url || !$followRedirects) {
+                // Save the File object based on our lookup trace
+                $file = File::saveNew($redir_data, $given_url);
+            } else {
+                // This seems kind of messed up... for now skipping this part
+                // if we're already under a redirect, so we don't go into
+                // horrible infinite loops if we've been given an unstable
+                // redirect (where the final destination of the first request
+                // doesn't match what we get when we ask for it again).
+                //
+                // Seen in the wild with clojure.org, which redirects through
+                // wikispaces for auth and appends session data in the URL params.
+                $file = self::processNew($redir_url, $notice_id, /*followRedirects*/false);
+                File_redirection::saveNew($redir_data, $file->id, $given_url);
             }
 
             if (!$file instanceof File) {
@@ -237,12 +253,7 @@ class File extends Managed_DataObject
 
     static function filename(Profile $profile, $origname, $mimetype)
     {
-        try {
-            $ext = common_supported_mime_to_ext($mimetype);
-        } catch (Exception $e) {
-            // We don't support this mimetype, but let's guess the extension
-            $ext = substr(strrchr($mimetype, '/'), 1);
-        }
+        $ext = self::guessMimeExtension($mimetype);
 
         // Normalize and make the original filename more URL friendly.
         $origname = basename($origname, ".$ext");
@@ -263,6 +274,17 @@ class File extends Managed_DataObject
         return $filename;
     }
 
+    static function guessMimeExtension($mimetype)
+    {
+        try {
+            $ext = common_supported_mime_to_ext($mimetype);
+        } catch (Exception $e) {
+            // We don't support this mimetype, but let's guess the extension
+            $ext = substr(strrchr($mimetype, '/'), 1);
+        }
+        return strtolower($ext);
+    }
+
     /**
      * Validation for as-saved base filenames
      */
@@ -303,7 +325,7 @@ class File extends Managed_DataObject
 
         }
 
-        if (StatusNet::useHTTPS()) {
+        if (GNUsocial::useHTTPS()) {
 
             $sslserver = common_config('attachments', 'sslserver');
 
@@ -381,6 +403,10 @@ class File extends Managed_DataObject
      * @param $crop   bool  Crop to the max-values' aspect ratio
      *
      * @return File_thumbnail
+     *
+     * @throws UseFileAsThumbnailException  if the file is considered an image itself and should be itself as thumbnail
+     * @throws UnsupportedMediaException    if, despite trying, we can't understand how to make a thumbnail for this format
+     * @throws ServerException              on various other errors
      */
     public function getThumbnail($width=null, $height=null, $crop=false, $force_still=true)
     {
@@ -394,82 +420,19 @@ class File extends Managed_DataObject
             }
         }
 
-        if ($width === null || $width < 1) {
-            $width = common_config('thumbnail', 'width');
-            $height = common_config('thumbnail', 'height');
-            $crop = common_config('thumbnail', 'crop');
-        }
-
-        if ($height === null || $height < 1) {
-            $height = $width;
-            $crop = true;
-        }
-
         // Debug log (convert crop to int to have TRUE being displayed as 1 and FALSE as 0)
-        common_debug('[' . __METHOD__ . ':' . __LINE__ . ']: width=' . $width . ',height=' . $height . ',crop=' . intval($crop));
-
-        // Get proper aspect ratio width and height before lookup
-        // We have to do it through an ImageFile object because of orientation etc.
-        // Only other solution would've been to rotate + rewrite uploaded files.
-        list($width, $height, $x, $y, $w, $h) =
-                                $image->scaleToFit($width, $height, $crop);
-
-        $params = array('file_id'=> $this->id,
-                        'width'  => $width,
-                        'height' => $height);
-        $thumb = File_thumbnail::pkeyGet($params);
-        if ($thumb instanceof File_thumbnail) {
-            return $thumb;
-        }
-
-        // throws exception on failure to generate thumbnail
-        $outname = "thumb-{$width}x{$height}-" . $image->filename;
-        $outpath = self::path($outname);
-
-        // The boundary box for our resizing
-        $box = array('width'=>$width, 'height'=>$height,
-                     'x'=>$x,         'y'=>$y,
-                     'w'=>$w,         'h'=>$h);
-
-        // Doublecheck that parameters are sane and integers.
-        if ($box['width'] < 1 || $box['width'] > common_config('thumbnail', 'maxsize')
-                || $box['height'] < 1 || $box['height'] > common_config('thumbnail', 'maxsize')
-                || $box['w'] < 1 || $box['x'] >= $image->width
-                || $box['h'] < 1 || $box['y'] >= $image->height) {
-            // Fail on bad width parameter. If this occurs, it's due to algorithm in ImageFile->scaleToFit
-            common_debug("Boundary box parameters for resize of {$this->filepath} : ".var_export($box,true));
-            throw new ServerException('Bad thumbnail size parameters. maxsize=' .
-                common_config('thumbnail', 'maxsize') .
-                ',box[width]=' . $box['width'] .
-                ',box[height]=' . $box['height'] .
-                ',box[w]=' . $box['w'] .
-                ',box[h]=' . $box['h'] .
-                ',box[x]=' . $box['x'] .
-                ',box[y]=' . $box['y'] .
-                ',this->width=' . $this->width .
-                ',this->heigh=' . $this->height .
-                ',this->filepath=' . $this->filepath .
-                ',this->filename=' . $this->filename
-            );
-        }
-
-        common_debug(sprintf('Generating a thumbnail of File id==%u of size %ux%u', $this->id, $width, $height));
-        // Perform resize and store into file
-        $image->resizeTo($outpath, $box);
-
-        // Avoid deleting the original
-        if ($image->getPath() != self::path($image->filename)) {
-            $image->unlink();
-        }
-        return File_thumbnail::saveThumbnail($this->id,
-                                      self::url($outname),
-                                      $width, $height,
-                                      $outname);
+        /* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . ']: width=' . $width . ',height=' . $height . ',crop=' . intval($crop));
+
+        return $image->getFileThumbnail($width, $height, $crop);
     }
 
     public function getPath()
     {
-        return self::path($this->filename);
+        $filepath = self::path($this->filename);
+        if (!file_exists($filepath)) {
+            throw new FileNotFoundException($filepath);
+        }
+        return $filepath;
     }
 
     public function getUrl()
@@ -477,7 +440,7 @@ class File extends Managed_DataObject
         if (!empty($this->filename)) {
             // A locally stored file, so let's generate a URL for our instance.
             $url = self::url($this->filename);
-            if ($url != $this->url) {
+            if (self::hashurl($url) !== $this->urlhash) {
                 // For indexing purposes, in case we do a lookup on the 'url' field.
                 // also we're fixing possible changes from http to https, or paths
                 $this->updateUrl($url);
@@ -489,16 +452,40 @@ class File extends Managed_DataObject
         return $this->url;
     }
 
+    static public function getByUrl($url)
+    {
+        $file = new File();
+        $file->urlhash = self::hashurl($url);
+        if (!$file->find(true)) {
+            throw new NoResultException($file);
+        }
+        return $file;
+    }
+
+    /**
+     * @param   string  $hashstr    String of (preferrably lower case) hexadecimal characters, same as result of 'hash_file(...)'
+     */
+    static public function getByHash($hashstr, $alg=File::FILEHASH_ALG)
+    {
+        $file = new File();
+        $file->filehash = strtolower($hashstr);
+        if (!$file->find(true)) {
+            throw new NoResultException($file);
+        }
+        return $file;
+    }
+
     public function updateUrl($url)
     {
-        $file = File::getKV('url', $url);
+        $file = File::getKV('urlhash', self::hashurl($url));
         if ($file instanceof File) {
             throw new ServerException('URL already exists in DB');
         }
-        $sql = 'UPDATE %1$s SET url=%2$s WHERE url=%3$s;';
+        $sql = 'UPDATE %1$s SET urlhash=%2$s, url=%3$s WHERE urlhash=%4$s;';
         $result = $this->query(sprintf($sql, $this->__table,
+                                             $this->_quote((string)self::hashurl($url)),
                                              $this->_quote((string)$url),
-                                             $this->_quote((string)$this->url)));
+                                             $this->_quote((string)$this->urlhash)));
         if ($result === false) {
             common_log_db_error($this, 'UPDATE', __FILE__);
             throw new ServerException("Could not UPDATE {$this->__table}.url");
@@ -517,9 +504,9 @@ class File extends Managed_DataObject
 
     function blowCache($last=false)
     {
-        self::blow('file:notice-ids:%s', $this->url);
+        self::blow('file:notice-ids:%s', $this->urlhash);
         if ($last) {
-            self::blow('file:notice-ids:%s;last', $this->url);
+            self::blow('file:notice-ids:%s;last', $this->urlhash);
         }
         self::blow('file:notice-count:%d', $this->id);
     }
@@ -597,4 +584,54 @@ class File extends Managed_DataObject
 
         return $title ?: null;
     }
+
+    static public function hashurl($url)
+    {
+        if (empty($url)) {
+            throw new Exception('No URL provided to hash algorithm.');
+        }
+        return hash(self::URLHASH_ALG, $url);
+    }
+
+    static public function beforeSchemaUpdate()
+    {
+        $table = strtolower(get_called_class());
+        $schema = Schema::get();
+        $schemadef = $schema->getTableDef($table);
+
+        // 2015-02-19 We have to upgrade our table definitions to have the urlhash field populated
+        if (isset($schemadef['fields']['urlhash']) && isset($schemadef['unique keys']['file_urlhash_key'])) {
+            // We already have the urlhash field, so no need to migrate it.
+            return;
+        }
+        echo "\nFound old $table table, upgrading it to contain 'urlhash' field...";
+        // We have to create a urlhash that is _not_ the primary key,
+        // transfer data and THEN run checkSchema
+        $schemadef['fields']['urlhash'] = array (
+                                              'type' => 'varchar',
+                                              'length' => 64,
+                                              'not null' => true,
+                                              'description' => 'sha256 of destination URL (url field)',
+                                            );
+        $schemadef['fields']['url'] = array (
+                                              'type' => 'text',
+                                              'description' => 'destination URL after following possible redirections',
+                                            );
+        unset($schemadef['unique keys']);
+        $schema->ensureTable($table, $schemadef);
+        echo "DONE.\n";
+
+        $classname = ucfirst($table);
+        $tablefix = new $classname;
+        // urlhash is hash('sha256', $url) in the File table
+        echo "Updating urlhash fields in $table table...";
+        // Maybe very MySQL specific :(
+        $tablefix->query(sprintf('UPDATE %1$s SET %2$s=%3$s;',
+                            $schema->quoteIdentifier($table),
+                            'urlhash',
+                            // The line below is "result of sha256 on column `url`"
+                            'SHA2(url, 256)'));
+        echo "DONE.\n";
+        echo "Resuming core schema upgrade...";
+    }
 }
index 292e6372a65374687385e2180254c57849ff4077..d52b29feaeeb12360d95be35127fc041069abad9 100644 (file)
@@ -29,7 +29,8 @@ class File_redirection extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'file_redirection';                // table name
-    public $url;                             // varchar(255)  primary_key not_null
+    public $urlhash;                         // varchar(64) primary_key not_null
+    public $url;                             // text
     public $file_id;                         // int(4)
     public $redirections;                    // int(4)
     public $httpcode;                        // int(4)
@@ -42,19 +43,30 @@ class File_redirection extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'url' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'short URL (or any other kind of redirect) for file (id)'),
+                'urlhash' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'sha256 hash of the URL'),
+                'url' => array('type' => 'text', 'description' => 'short URL (or any other kind of redirect) for file (id)'),
                 'file_id' => array('type' => 'int', 'description' => 'short URL for what URL/file'),
                 'redirections' => array('type' => 'int', 'description' => 'redirect count'),
                 'httpcode' => array('type' => 'int', 'description' => 'HTTP status code (20x, 30x, etc.)'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
-            'primary key' => array('url'),
+            'primary key' => array('urlhash'),
             'foreign keys' => array(
                 'file_redirection_file_id_fkey' => array('file' => array('file_id' => 'id')),
             ),
         );
     }
 
+    static public function getByUrl($url)
+    {
+        $file = new File_redirection();
+        $file->urlhash = File::hashurl($url);
+        if (!$file->find(true)) {
+            throw new NoResultException($file);
+        }
+        return $file;
+    }
+
     static function _commonHttp($url, $redirs) {
         $request = new HTTPClient($url);
         $request->setConfig(array(
@@ -161,17 +173,18 @@ class File_redirection extends Managed_DataObject
      */
     public function where($in_url, $discover=true) {
         // let's see if we know this...
-        $a = File::getKV('url', $in_url);
-
-        if (!empty($a)) {
+        try {
+            $a = File::getByUrl($in_url);
             // this is a direct link to $a->url
             return $a->url;
-        } else {
-            $b = File_redirection::getKV('url', $in_url);
-            if (!empty($b)) {
+        } catch (NoResultException $e) {
+            try {
+                $b = File_redirection::getByUrl($in_url);
                 // this is a redirect to $b->file_id
                 $a = File::getKV('id', $b->file_id);
                 return $a->url;
+            } catch (NoResultException $e) {
+                // Oh well, let's keep going
             }
         }
 
@@ -274,6 +287,7 @@ class File_redirection extends Managed_DataObject
             $file_redir = File_redirection::getKV('url', $short_url);
             if (!$file_redir instanceof File_redirection) {
                 $file_redir = new File_redirection;
+                $file_redir->urlhash = File::hashurl($short_url);
                 $file_redir->url = $short_url;
                 $file_redir->file_id = $file_id;
                 $file_redir->insert();
@@ -334,10 +348,53 @@ class File_redirection extends Managed_DataObject
 
     function saveNew(array $data, $file_id, $url) {
         $file_redir = new File_redirection;
+        $file_redir->urlhash = File::hashurl($short_url);
         $file_redir->url = $url;
         $file_redir->file_id = $file_id;
         $file_redir->redirections = intval($data['redirects']);
         $file_redir->httpcode = intval($data['code']);
         $file_redir->insert();
     }
+
+    static public function beforeSchemaUpdate()
+    {
+        $table = strtolower(get_called_class());
+        $schema = Schema::get();
+        $schemadef = $schema->getTableDef($table);
+
+        // 2015-02-19 We have to upgrade our table definitions to have the urlhash field populated
+        if (isset($schemadef['fields']['urlhash']) && in_array('urlhash', $schemadef['primary key'])) {
+            // We already have the urlhash field, so no need to migrate it.
+            return;
+        }
+        echo "\nFound old $table table, upgrading it to contain 'urlhash' field...";
+        // We have to create a urlhash that is _not_ the primary key,
+        // transfer data and THEN run checkSchema
+        $schemadef['fields']['urlhash'] = array (
+                                              'type' => 'varchar',
+                                              'length' => 64,
+                                              'not null' => true,
+                                              'description' => 'sha256 hash of the URL',
+                                            );
+        $schemadef['fields']['url'] = array (
+                                              'type' => 'text',
+                                              'description' => 'short URL (or any other kind of redirect) for file (id)',
+                                            );
+        unset($schemadef['primary key']);
+        $schema->ensureTable($table, $schemadef);
+        echo "DONE.\n";
+
+        $classname = ucfirst($table);
+        $tablefix = new $classname;
+        // urlhash is hash('sha256', $url) in the File table
+        echo "Updating urlhash fields in $table table...";
+        // Maybe very MySQL specific :(
+        $tablefix->query(sprintf('UPDATE %1$s SET %2$s=%3$s;',
+                            $schema->quoteIdentifier($table),
+                            'urlhash',
+                            // The line below is "result of sha256 on column `url`"
+                            'SHA2(url, 256)'));
+        echo "DONE.\n";
+        echo "Resuming core schema upgrade...";
+    }
 }
index 11236f087d3e2241b652d09bfcc6b08222279438..bfe7c30aefdb1a91bfa618b2242cbda758e883f1 100644 (file)
@@ -27,8 +27,8 @@ class File_thumbnail extends Managed_DataObject
 {
     public $__table = 'file_thumbnail';                  // table name
     public $file_id;                         // int(4)  primary_key not_null
-    public $url;                             // varchar(255)  unique_key
-    public $filename;                        // varchar(255)
+    public $url;                             // text
+    public $filename;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $width;                           // int(4)  primary_key
     public $height;                          // int(4)  primary_key
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -38,8 +38,8 @@ class File_thumbnail extends Managed_DataObject
         return array(
             'fields' => array(
                 'file_id' => array('type' => 'int', 'not null' => true, 'description' => 'thumbnail for what URL/file'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL of thumbnail'),
-                'filename' => array('type' => 'varchar', 'length' => 255, 'description' => 'if stored locally, filename is put here'),
+                'url' => array('type' => 'text', 'not null' => false, 'description' => 'URL of thumbnail'),
+                'filename' => array('type' => 'varchar', 'length' => 191, 'description' => 'if stored locally, filename is put here'),
                 'width' => array('type' => 'int', 'description' => 'width of thumbnail'),
                 'height' => array('type' => 'int', 'description' => 'height of thumbnail'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
@@ -120,46 +120,38 @@ class File_thumbnail extends Managed_DataObject
         return File::path($filename);
     }
 
+    static function url($filename)
+    {
+        // TODO: Store thumbnails in their own directory and don't use File::url here
+        return File::url($filename);
+    }
+
     public function getPath()
     {
-        return self::path($this->filename);
+        $filepath = self::path($this->filename);
+        if (!file_exists($filepath)) {
+            throw new FileNotFoundException($filepath);
+        }
+        return $filepath;
     }
 
     public function getUrl()
     {
         if (!empty($this->getFile()->filename)) {
-            // A locally stored File, so let's generate a URL for our instance.
-            $url = File::url($this->filename);
-            if ($url != $this->url) {
-                // For indexing purposes, in case we do a lookup on the 'url' field.
-                // also we're fixing possible changes from http to https, or paths
-                $this->updateUrl($url);
+            // A locally stored File, so we can dynamically generate a URL.
+            if (!empty($this->url)) {
+                // Let's just clear this field as there is no point in having it for local files.
+                $orig = clone($this);
+                $this->url = null;
+                $this->update($orig);
             }
-            return $url;
+            return self::url($this->filename);
         }
 
         // No local filename available, return the URL we have stored
         return $this->url;
     }
 
-    public function updateUrl($url)
-    {
-        $file = File_thumbnail::getKV('url', $url);
-        if ($file instanceof File_thumbnail) {
-            throw new ServerException('URL already exists in DB');
-        }
-        $sql = 'UPDATE %1$s SET url=%2$s WHERE url=%3$s;';
-        $result = $this->query(sprintf($sql, $this->__table,
-                                             $this->_quote((string)$url),
-                                             $this->_quote((string)$this->url)));
-        if ($result === false) {
-            common_log_db_error($this, 'UPDATE', __FILE__);
-            throw new ServerException("Could not UPDATE {$this->__table}.url");
-        }
-
-        return $result;
-    }
-
     public function delete($useWhere=false)
     {
         if (!empty($this->filename) && file_exists(File_thumbnail::path($this->filename))) {
index a964d87fdd9baa19e2a1fd024a74f9d3c5745c6c..6176ec43bc3f3a1bf568ce4effb3e66726697219 100644 (file)
@@ -13,7 +13,7 @@ class Foreign_link extends Managed_DataObject
     public $user_id;                         // int(4)  primary_key not_null
     public $foreign_id;                      // bigint(8)  primary_key not_null unsigned
     public $service;                         // int(4)  primary_key not_null
-    public $credentials;                     // varchar(255)
+    public $credentials;                     // varchar(191)   not 255 because utf8mb4 takes more space
     public $noticesync;                      // tinyint(1)   not_null default_1
     public $friendsync;                      // tinyint(1)   not_null default_2
     public $profilesync;                     // tinyint(1)   not_null default_1
@@ -32,7 +32,7 @@ class Foreign_link extends Managed_DataObject
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'link to user on this system, if exists'),
                 'foreign_id' => array('type' => 'int', 'size' => 'big', 'unsigned' => true, 'not null' => true, 'description' => 'link to user on foreign service, if exists'),
                 'service' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to service'),
-                'credentials' => array('type' => 'varchar', 'length' => 255, 'description' => 'authc credentials, typically a password'),
+                'credentials' => array('type' => 'varchar', 'length' => 191, 'description' => 'authc credentials, typically a password'),
                 'noticesync' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 1, 'description' => 'notice synchronization, bit 1 = sync outgoing, bit 2 = sync incoming, bit 3 = filter local replies'),
                 'friendsync' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 2, 'description' => 'friend synchronization, bit 1 = sync outgoing, bit 2 = sync incoming'),
                 'profilesync' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 1, 'description' => 'profile synchronization, bit 1 = sync outgoing, bit 2 = sync incoming'),
index df9fd5825d8fd49a4a61c8aaed488f6f7a560ffc..78c1c0cee5bc68cf74022d890259362cea0c4b3a 100644 (file)
@@ -12,7 +12,7 @@ class Foreign_service extends Managed_DataObject
     public $__table = 'foreign_service';                 // table name
     public $id;                              // int(4)  primary_key not_null
     public $name;                            // varchar(32)  unique_key not_null
-    public $description;                     // varchar(255)
+    public $description;                     // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -25,7 +25,7 @@ class Foreign_service extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'numeric key for service'),
                 'name' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'name of the service'),
-                'description' => array('type' => 'varchar', 'length' => 255, 'description' => 'description'),
+                'description' => array('type' => 'varchar', 'length' => 191, 'description' => 'description'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index eeaf817876b7ff8ead28c47cb6e82bc6cf3d621a..c1739d318a08737cedccfec1a8af17b316ee9e71 100644 (file)
@@ -12,8 +12,8 @@ class Foreign_user extends Managed_DataObject
     public $__table = 'foreign_user';                    // table name
     public $id;                              // bigint(8)  primary_key not_null
     public $service;                         // int(4)  primary_key not_null
-    public $uri;                             // varchar(255)  unique_key not_null
-    public $nickname;                        // varchar(255)
+    public $uri;                             // varchar(191)  unique_key not_null   not 255 because utf8mb4 takes more space
+    public $nickname;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -26,8 +26,8 @@ class Foreign_user extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'int', 'size' => 'big', 'not null' => true, 'description' => 'unique numeric key on foreign service'),
                 'service' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to service'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'identifying URI'),
-                'nickname' => array('type' => 'varchar', 'length' => 255, 'description' => 'nickname on foreign service'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'identifying URI'),
+                'nickname' => array('type' => 'varchar', 'length' => 191, 'description' => 'nickname on foreign service'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index 14f417758da21890fecf21a944cdc77891c3beb8..392440222b066d6c153c2a9704acb88f4ade03a1 100644 (file)
@@ -12,7 +12,7 @@ class Group_member extends Managed_DataObject
     public $group_id;                        // int(4)  primary_key not_null
     public $profile_id;                      // int(4)  primary_key not_null
     public $is_admin;                        // tinyint(1)
-    public $uri;                             // varchar(255)
+    public $uri;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -26,7 +26,7 @@ class Group_member extends Managed_DataObject
                 'group_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to user_group'),
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
                 'is_admin' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'is this user an admin?'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universal identifier'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universal identifier'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index a40bd0f330a5b96d8afaba56f3d7743a79efc9c6..ca03bb7aa10fe4dfa868fd8ccce5dc99c046054c 100644 (file)
@@ -12,7 +12,7 @@ class Invitation extends Managed_DataObject
     public $__table = 'invitation';                      // table name
     public $code;                            // varchar(32)  primary_key not_null
     public $user_id;                         // int(4)   not_null
-    public $address;                         // varchar(255)  multiple_key not_null
+    public $address;                         // varchar(191)  multiple_key not_null   not 255 because utf8mb4 takes more space
     public $address_type;                    // varchar(8)  multiple_key not_null
     public $registered_user_id;              // int(4)   not_null
     public $created;                         // datetime()   not_null
@@ -34,7 +34,7 @@ class Invitation extends Managed_DataObject
             'fields' => array(
                 'code' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'random code for an invitation'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'who sent the invitation'),
-                'address' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'invitation sent to'),
+                'address' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'invitation sent to'),
                 'address_type' => array('type' => 'varchar', 'length' => 8, 'not null' => true, 'description' => 'address type ("email", "xmpp", "sms")'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'registered_user_id' => array('type' => 'int', 'not null' => false, 'description' => 'if the invitation is converted, who the new user is'),
index 3690ecc0446a7d3617c4f82d9a680cd4531ebd1b..a84147395348308ae96b5e818df92206acd1cd40 100644 (file)
@@ -32,7 +32,7 @@ class Location_namespace extends Managed_DataObject
 
     public $__table = 'location_namespace';              // table name
     public $id;                              // int(4)  primary_key not_null
-    public $description;                     // varchar(255)
+    public $description;                     // varchar(191)
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -44,7 +44,7 @@ class Location_namespace extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'identity for this namespace'),
-                'description' => array('type' => 'varchar', 'length' => 255, 'description' => 'description of the namespace'),
+                'description' => array('type' => 'varchar', 'length' => 191, 'description' => 'description of the namespace'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date the record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index a628b8bee3aa1834879ecae689e4c9ca40ce2940..b324984b7f8e7512d4c8b77606654ca6b10b8ae2 100644 (file)
@@ -299,6 +299,11 @@ abstract class Managed_DataObject extends Memcached_DataObject
         return $ckeys;
     }
 
+    public function escapedTableName()
+    {
+        return common_database_tablename($this->tableName());
+    }
+
     /**
      * Returns an ID, checked that it is set and reasonably valid
      *
@@ -391,4 +396,9 @@ abstract class Managed_DataObject extends Memcached_DataObject
         // @FIXME return true only if something changed (otherwise 0)
         return $result;
     }
+
+    static public function beforeSchemaUpdate()
+    {
+        // NOOP
+    }
 }
index 76358cbe13e892a84d660736a820e3a083c648cf..6d1d0522ba6a41ee65c970cd70c83bd9d2a0e671 100644 (file)
@@ -734,7 +734,7 @@ class Memcached_DataObject extends Safe_DataObject
         return $string;
     }
 
-    // We overload so that 'SET NAMES "utf8"' is called for
+    // We overload so that 'SET NAMES "utf8mb4"' is called for
     // each connection
 
     function _connect()
@@ -784,9 +784,9 @@ class Memcached_DataObject extends Safe_DataObject
                 $conn = $DB->connection;
                 if (!empty($conn)) {
                     if ($DB instanceof DB_mysqli || $DB instanceof MDB2_Driver_mysqli) {
-                        mysqli_set_charset($conn, 'utf8');
+                        mysqli_set_charset($conn, 'utf8mb4');
                     } else if ($DB instanceof DB_mysql || $DB instanceof MDB2_Driver_mysql) {
-                        mysql_set_charset('utf8', $conn);
+                        mysql_set_charset('utf8mb4', $conn);
                     }
                 }
             }
index 9d8dfece044b8ee740c41fefca852800e2828219..d37aade4a8f85063c045142a4670a0a00f43af4b 100644 (file)
@@ -10,7 +10,7 @@ class Nonce extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'nonce';                           // table name
-    public $consumer_key;                    // varchar(255)  primary_key not_null
+    public $consumer_key;                    // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
     public $tok;                             // char(32)
     public $nonce;                           // char(32)  primary_key not_null
     public $ts;                              // datetime()  primary_key not_null
@@ -39,7 +39,7 @@ class Nonce extends Managed_DataObject
         return array(
             'description' => 'OAuth nonce record',
             'fields' => array(
-                'consumer_key' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'unique identifier, root URL'),
+                'consumer_key' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'unique identifier, root URL'),
                 'tok' => array('type' => 'char', 'length' => 32, 'description' => 'buggy old value, ignored'),
                 'nonce' => array('type' => 'char', 'length' => 32, 'not null' => true, 'description' => 'nonce'),
                 'ts' => array('type' => 'datetime', 'not null' => true, 'description' => 'timestamp sent'),
index 15f4f75be0e819793729ef980db92784ceadc63d..86eee49321a22ec89ec56e9edb3f29359a767b6a 100644 (file)
@@ -55,10 +55,10 @@ class Notice extends Managed_DataObject
     public $__table = 'notice';                          // table name
     public $id;                              // int(4)  primary_key not_null
     public $profile_id;                      // int(4)  multiple_key not_null
-    public $uri;                             // varchar(255)  unique_key
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $content;                         // text
     public $rendered;                        // text
-    public $url;                             // varchar(255)
+    public $url;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime  multiple_key not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
     public $reply_to;                        // int(4)
@@ -70,8 +70,8 @@ class Notice extends Managed_DataObject
     public $location_id;                     // int(4)
     public $location_ns;                     // int(4)
     public $repeat_of;                       // int(4)
-    public $verb;                            // varchar(255)
-    public $object_type;                     // varchar(255)
+    public $verb;                            // varchar(191)   not 255 because utf8mb4 takes more space
+    public $object_type;                     // varchar(191)   not 255 because utf8mb4 takes more space
     public $scope;                           // int(4)
 
     /* the code above is auto generated do not remove the tag below */
@@ -83,10 +83,10 @@ class Notice extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'who made the update'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier, usually a tag URI'),
                 'content' => array('type' => 'text', 'description' => 'update content', 'collate' => 'utf8_general_ci'),
                 'rendered' => array('type' => 'text', 'description' => 'HTML version of the content'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL of any attachment (image, video, bookmark, whatever)'),
+                'url' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL of any attachment (image, video, bookmark, whatever)'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
                 'reply_to' => array('type' => 'int', 'description' => 'notice replied to (usually a guess)'),
@@ -98,8 +98,8 @@ class Notice extends Managed_DataObject
                 'location_id' => array('type' => 'int', 'description' => 'location id if possible'),
                 'location_ns' => array('type' => 'int', 'description' => 'namespace for location'),
                 'repeat_of' => array('type' => 'int', 'description' => 'notice this is a repeat of'),
-                'object_type' => array('type' => 'varchar', 'length' => 255, 'description' => 'URI representing activity streams object type', 'default' => 'http://activitystrea.ms/schema/1.0/note'),
-                'verb' => array('type' => 'varchar', 'length' => 255, 'description' => 'URI representing activity streams verb', 'default' => 'http://activitystrea.ms/schema/1.0/post'),
+                'object_type' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI representing activity streams object type', 'default' => 'http://activitystrea.ms/schema/1.0/note'),
+                'verb' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI representing activity streams verb', 'default' => 'http://activitystrea.ms/schema/1.0/post'),
                 'scope' => array('type' => 'int',
                                  'description' => 'bit map for distribution scope; 0 = everywhere; 1 = this server only; 2 = addressees; 4 = followers; null = default'),
             ),
@@ -128,7 +128,7 @@ class Notice extends Managed_DataObject
 
         return $def;
     }
-       
+
     /* Notice types */
     const LOCAL_PUBLIC    =  1;
     const REMOTE          =  0;
@@ -142,7 +142,7 @@ class Notice extends Managed_DataObject
     const FOLLOWER_SCOPE  = 8;
 
     protected $_profile = array();
-    
+
     /**
      * Will always return a profile, if anything fails it will
      * (through _setProfile) throw a NoProfileException.
@@ -157,7 +157,7 @@ class Notice extends Managed_DataObject
         }
         return $this->_profile[$this->profile_id];
     }
-    
+
     public function _setProfile(Profile $profile=null)
     {
         if (!$profile instanceof Profile) {
@@ -268,7 +268,7 @@ class Notice extends Managed_DataObject
         }
         return $title;
     }
-    
+
     public function getContent()
     {
         return $this->content;
@@ -677,7 +677,7 @@ class Notice extends Managed_DataObject
                 $notice->insert();  // throws exception on failure
                 // If it's not part of a conversation, it's
                 // the beginning of a new conversation.
-                if (empty($notice->conversation)) { 
+                if (empty($notice->conversation)) {
                     $orig = clone($notice);
                     // $act->context->conversation will be null if it was not provided
                     $conv = Conversation::create($notice, $options['conversation']);
@@ -780,7 +780,7 @@ class Notice extends Managed_DataObject
                           'distribute' => true);
 
         // options will have default values when nothing has been supplied
-        $options = array_merge($defaults, $options); 
+        $options = array_merge($defaults, $options);
         foreach (array_keys($defaults) as $key) {
             // Only convert the keynames we specify ourselves from 'defaults' array into variables
             $$key = $options[$key];
@@ -960,7 +960,7 @@ class Notice extends Managed_DataObject
             // Prepare inbox delivery, may be queued to background.
             $stored->distribute();
         }
-        
+
         return $stored;
     }
 
@@ -1070,13 +1070,9 @@ class Notice extends Managed_DataObject
         }
 
         $args = func_get_args();
-
         $format = array_shift($args);
-
         $keyPart = vsprintf($format, $args);
-
         $cacheKey = Cache::key($keyPart);
-        
         $c->delete($cacheKey);
 
         // delete the "last" stream, too, if this notice is
@@ -1190,24 +1186,20 @@ class Notice extends Managed_DataObject
     }
 
        protected $_attachments = array();
-       
+
     function attachments() {
                if (isset($this->_attachments[$this->id])) {
             return $this->_attachments[$this->id];
         }
-               
+
         $f2ps = File_to_post::listGet('post_id', array($this->id));
-               
                $ids = array();
-               
                foreach ($f2ps[$this->id] as $f2p) {
-            $ids[] = $f2p->file_id;    
+            $ids[] = $f2p->file_id;
         }
-               
-               $files = File::multiGet('id', $ids);
 
+               $files = File::multiGet('id', $ids);
                $this->_attachments[$this->id] = $files->fetchAll();
-               
         return $this->_attachments[$this->id];
     }
 
@@ -1289,7 +1281,7 @@ class Notice extends Managed_DataObject
             $root->free();
             return $root;
         }
-        
+
         if (is_null($profile)) {
             $keypart = sprintf('notice:conversation_root:%d:null', $this->id);
         } else {
@@ -1297,7 +1289,7 @@ class Notice extends Managed_DataObject
                                $this->id,
                                $profile->id);
         }
-            
+
         $root = self::cacheGet($keypart);
 
         if ($root !== false && $root->inScope($profile)) {
@@ -1710,9 +1702,9 @@ class Notice extends Managed_DataObject
     function getReplyProfiles()
     {
         $ids = $this->getReplies();
-        
+
         $profiles = Profile::multiGet('id', $ids);
-        
+
         return $profiles->fetchAll();
     }
 
@@ -1750,9 +1742,9 @@ class Notice extends Managed_DataObject
      *
      * @return array of Group objects
      */
-    
+
     protected $_groups = array();
-    
+
     function getGroups()
     {
         // Don't save groups for repeats
@@ -1760,27 +1752,24 @@ class Notice extends Managed_DataObject
         if (!empty($this->repeat_of)) {
             return array();
         }
-        
+
         if (isset($this->_groups[$this->id])) {
             return $this->_groups[$this->id];
         }
-        
+
         $gis = Group_inbox::listGet('notice_id', array($this->id));
 
         $ids = array();
 
-               foreach ($gis[$this->id] as $gi)
-               {
+               foreach ($gis[$this->id] as $gi) {
                    $ids[] = $gi->group_id;
                }
-               
+
                $groups = User_group::multiGet('id', $ids);
-               
                $this->_groups[$this->id] = $groups->fetchAll();
-               
                return $this->_groups[$this->id];
     }
-    
+
     function _setGroups($groups)
     {
         $this->_groups[$this->id] = $groups;
@@ -2162,7 +2151,7 @@ class Notice extends Managed_DataObject
             // Unfortunately this is likely to lose tags or URLs
             // at the end of long notices.
             $content = mb_substr($content, 0, $maxlen - 4) . ' ...';
-        }     
+        }
 
 
         // Scope is same as this one's
@@ -2690,89 +2679,69 @@ class Notice extends Managed_DataObject
             $scope = self::defaultScope();
         }
 
-        // If there's no scope, anyone (even anon) is in scope.
-
-        if ($scope == 0) { // Not private
-
+        if ($scope == 0 && !$this->getProfile()->isPrivateStream()) { // Not scoping, so it is public.
             return !$this->isHiddenSpam($profile);
+        }
 
-        } else { // Private, somehow
-
-            // If there's scope, anon cannot be in scope
+        // If there's scope, anon cannot be in scope
+        if (empty($profile)) {
+            return false;
+        }
 
-            if (empty($profile)) {
-                return false;
-            }
+        // Author is always in scope
+        if ($this->profile_id == $profile->id) {
+            return true;
+        }
 
-            // Author is always in scope
+        // Only for users on this site
+        if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
+            return false;
+        }
 
-            if ($this->profile_id == $profile->id) {
-                return true;
-            }
+        // Only for users mentioned in the notice
+        if ($scope & Notice::ADDRESSEE_SCOPE) {
 
-            // Only for users on this site
+            $reply = Reply::pkeyGet(array('notice_id' => $this->id,
+                                         'profile_id' => $profile->id));
 
-            if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
+            if (!$reply instanceof Reply) {
                 return false;
             }
+        }
 
-            // Only for users mentioned in the notice
-
-            if ($scope & Notice::ADDRESSEE_SCOPE) {
-
-                $reply = Reply::pkeyGet(array('notice_id' => $this->id,
-                                             'profile_id' => $profile->id));
-                                                                                
-                if (!$reply instanceof Reply) {
-                    return false;
-                }
-            }
-
-            // Only for members of the given group
-
-            if ($scope & Notice::GROUP_SCOPE) {
+        // Only for members of the given group
+        if ($scope & Notice::GROUP_SCOPE) {
 
-                // XXX: just query for the single membership
+            // XXX: just query for the single membership
 
-                $groups = $this->getGroups();
+            $groups = $this->getGroups();
 
-                $foundOne = false;
+            $foundOne = false;
 
-                foreach ($groups as $group) {
-                    if ($profile->isMember($group)) {
-                        $foundOne = true;
-                        break;
-                    }
-                }
-
-                if (!$foundOne) {
-                    return false;
+            foreach ($groups as $group) {
+                if ($profile->isMember($group)) {
+                    $foundOne = true;
+                    break;
                 }
             }
 
-            // Only for followers of the author
-
-            $author = null;
+            if (!$foundOne) {
+                return false;
+            }
+        }
 
-            if ($scope & Notice::FOLLOWER_SCOPE) {
+        if ($scope & Notice::FOLLOWER_SCOPE || $this->getProfile()->isPrivateStream()) {
 
-                try {
-                    $author = $this->getProfile();
-                } catch (Exception $e) {
-                    return false;
-                }
-        
-                if (!Subscription::exists($profile, $author)) {
-                    return false;
-                }
+            if (!Subscription::exists($profile, $this->getProfile())) {
+                return false;
             }
-
-            return !$this->isHiddenSpam($profile);
         }
+
+        return !$this->isHiddenSpam($profile);
     }
 
     function isHiddenSpam($profile) {
-        
+
         // Hide posts by silenced users from everyone but moderators.
 
         if (common_config('notice', 'hidespam')) {
@@ -2822,7 +2791,7 @@ class Notice extends Managed_DataObject
         $skip = array('_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats');
         return array_diff($vars, $skip);
     }
-    
+
     static function defaultScope()
     {
        $scope = common_config('notice', 'defaultscope');
@@ -2839,7 +2808,6 @@ class Notice extends Managed_DataObject
        static function fillProfiles($notices)
        {
                $map = self::getProfiles($notices);
-               
                foreach ($notices as $entry=>$notice) {
             try {
                        if (array_key_exists($notice->profile_id, $map)) {
@@ -2850,42 +2818,35 @@ class Notice extends Managed_DataObject
                 unset($notices[$entry]);
             }
                }
-               
+
                return array_values($map);
        }
-       
+
        static function getProfiles(&$notices)
        {
                $ids = array();
                foreach ($notices as $notice) {
                        $ids[] = $notice->profile_id;
                }
-               
                $ids = array_unique($ids);
-               
-               return Profile::pivotGet('id', $ids); 
+               return Profile::pivotGet('id', $ids);
        }
-       
+
        static function fillGroups(&$notices)
        {
         $ids = self::_idsOf($notices);
-               
         $gis = Group_inbox::listGet('notice_id', $ids);
-               
         $gids = array();
 
-               foreach ($gis as $id => $gi)
-               {
+               foreach ($gis as $id => $gi) {
                    foreach ($gi as $g)
                    {
                        $gids[] = $g->group_id;
                    }
                }
-               
+
                $gids = array_unique($gids);
-               
                $group = User_group::pivotGet('id', $gids);
-               
                foreach ($notices as $notice)
                {
                        $grps = array();
@@ -2909,21 +2870,16 @@ class Notice extends Managed_DataObject
     static function fillAttachments(&$notices)
     {
         $ids = self::_idsOf($notices);
-
         $f2pMap = File_to_post::listGet('post_id', $ids);
-               
                $fileIds = array();
-               
                foreach ($f2pMap as $noticeId => $f2ps) {
             foreach ($f2ps as $f2p) {
-                $fileIds[] = $f2p->file_id;    
+                $fileIds[] = $f2p->file_id;
             }
         }
 
         $fileIds = array_unique($fileIds);
-
                $fileMap = File::pivotGet('id', $fileIds);
-
                foreach ($notices as $notice)
                {
                        $files = array();
index 6f3d2e5634d4249dc5632de95f6196b9575bac5a..f31d4411ffbd5d4f975fb8f1ecb591391b540711 100644 (file)
@@ -11,8 +11,8 @@ class Notice_source extends Managed_DataObject
 
     public $__table = 'notice_source';                   // table name
     public $code;                            // varchar(32)  primary_key not_null
-    public $name;                            // varchar(255)   not_null
-    public $url;                             // varchar(255)   not_null
+    public $name;                            // varchar(191)   not_null   not 255 because utf8mb4 takes more space
+    public $url;                             // varchar(191)   not_null   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -24,8 +24,8 @@ class Notice_source extends Managed_DataObject
         return array(
             'fields' => array(
                 'code' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'source code'),
-                'name' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'name of the source'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'url to link to'),
+                'name' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'name of the source'),
+                'url' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'url to link to'),
                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'date this record was created'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index b29fdfe41b1fb059cb79ae409010950a44be1650..9cf3f5e108849b859018c6520b10c5fc0967b6e8 100644 (file)
@@ -12,14 +12,14 @@ class Oauth_application extends Managed_DataObject
     public $__table = 'oauth_application';               // table name
     public $id;                              // int(4)  primary_key not_null
     public $owner;                           // int(4)   not_null
-    public $consumer_key;                    // varchar(255)   not_null
-    public $name;                            // varchar(255)   not_null
-    public $description;                     // varchar(255)
-    public $icon;                            // varchar(255)   not_null
-    public $source_url;                      // varchar(255)
-    public $organization;                    // varchar(255)
-    public $homepage;                        // varchar(255)
-    public $callback_url;                    // varchar(255)   not_null
+    public $consumer_key;                    // varchar(191)   not_null   not 255 because utf8mb4 takes more space
+    public $name;                            // varchar(191)   not_null   not 255 because utf8mb4 takes more space
+    public $description;                     // varchar(191)              not 255 because utf8mb4 takes more space
+    public $icon;                            // varchar(191)              not_null   not 255 because utf8mb4 takes more space
+    public $source_url;                      // varchar(191)              not 255 because utf8mb4 takes more space
+    public $organization;                    // varchar(191)              not 255 because utf8mb4 takes more space
+    public $homepage;                        // varchar(191)              not 255 because utf8mb4 takes more space
+    public $callback_url;                    // varchar(191)   not_null   not 255 because utf8mb4 takes more space
     public $type;                            // tinyint(1)
     public $access_type;                     // tinyint(1)
     public $created;                         // datetime   not_null
@@ -43,12 +43,12 @@ class Oauth_application extends Managed_DataObject
     static function maxDesc()
     {
         // This used to default to textlimit or allow unlimited descriptions,
-        // but this isn't part of a notice and the field's limited to 255 chars
-        // in the DB, so those seem silly.
+        // but this isn't part of a notice and the field's limited to 191 chars
+        // in the DB, so those seem silly. (utf8mb4 takes up more space, so can't use 255)
         //
-        // Now just defaulting to 255 max unless a smaller application desclimit
+        // Now just defaulting to 191 max unless a smaller application desclimit
         // is actually set. Setting to 0 will use the maximum.
-        $max = 255;
+        $max = 191;
         $desclimit = intval(common_config('application', 'desclimit'));
         if ($desclimit > 0 && $desclimit < $max) {
             return $desclimit;
@@ -163,14 +163,14 @@ class Oauth_application extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
                 'owner' => array('type' => 'int', 'not null' => true, 'description' => 'owner of the application'),
-                'consumer_key' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'application consumer key'),
-                'name' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'name of the application'),
-                'description' => array('type' => 'varchar', 'length' => 255, 'description' => 'description of the application'),
-                'icon' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'application icon'),
-                'source_url' => array('type' => 'varchar', 'length' => 255, 'description' => 'application homepage - used for source link'),
-                'organization' => array('type' => 'varchar', 'length' => 255, 'description' => 'name of the organization running the application'),
-                'homepage' => array('type' => 'varchar', 'length' => 255, 'description' => 'homepage for the organization'),
-                'callback_url' => array('type' => 'varchar', 'length' => 255, 'description' => 'url to redirect to after authentication'),
+                'consumer_key' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'application consumer key'),
+                'name' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'name of the application'),
+                'description' => array('type' => 'varchar', 'length' => 191, 'description' => 'description of the application'),
+                'icon' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'application icon'),
+                'source_url' => array('type' => 'varchar', 'length' => 191, 'description' => 'application homepage - used for source link'),
+                'organization' => array('type' => 'varchar', 'length' => 191, 'description' => 'name of the organization running the application'),
+                'homepage' => array('type' => 'varchar', 'length' => 191, 'description' => 'homepage for the organization'),
+                'callback_url' => array('type' => 'varchar', 'length' => 191, 'description' => 'url to redirect to after authentication'),
                 'type' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'type of app, 1 = browser, 2 = desktop'),
                 'access_type' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'default access type, bit 1 = read, bit 2 = write'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
index 007e4d1db6656be08b574886f17352f16a462109..60b2e8fa2c505caaca88bc52aeb707cca2aeb2f3 100644 (file)
@@ -13,7 +13,7 @@ class Oauth_application_user extends Managed_DataObject
     public $profile_id;                      // int(4)  primary_key not_null
     public $application_id;                  // int(4)  primary_key not_null
     public $access_type;                     // tinyint(1)
-    public $token;                           // varchar(255)
+    public $token;                           // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime   not_null
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
 
@@ -27,7 +27,7 @@ class Oauth_application_user extends Managed_DataObject
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'user of the application'),
                 'application_id' => array('type' => 'int', 'not null' => true, 'description' => 'id of the application'),
                 'access_type' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'access type, bit 1 = read, bit 2 = write'),
-                'token' => array('type' => 'varchar', 'length' => 255, 'description' => 'request or access token'),
+                'token' => array('type' => 'varchar', 'length' => 191, 'description' => 'request or access token'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index ec5eae3064016b1778de2741278289034eae41cc..83bc0d80541fe2b9dbd0b3fa047d59156e73a7e2 100644 (file)
@@ -12,7 +12,7 @@ class Oauth_token_association extends Managed_DataObject
     public $__table = 'oauth_token_association';          // table name
     public $profile_id;                      // int(4)  primary_key not_null
     public $application_id;                  // int(4)  primary_key not_null
-    public $token;                           // varchar(255) primary key not null
+    public $token;                           // varchar(191) primary key not null   not 255 because utf8mb4 takes more space
     public $created;                         // datetime   not_null
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
 
@@ -43,7 +43,7 @@ class Oauth_token_association extends Managed_DataObject
             'fields' => array(
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'associated user'),
                 'application_id' => array('type' => 'int', 'not null' => true, 'description' => 'the application'),
-                'token' => array('type' => 'varchar', 'length' => '255', 'not null' => true, 'description' => 'token used for this association'),
+                'token' => array('type' => 'varchar', 'length' => '191', 'not null' => true, 'description' => 'token used for this association'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index 0b608fbb24883164733d90560d8c9a8c1c5cbbcc..a944d5b4d23f5768c6d4ffcd4ade2b21b61b79a8 100644 (file)
@@ -30,11 +30,11 @@ class Profile extends Managed_DataObject
     public $__table = 'profile';                         // table name
     public $id;                              // int(4)  primary_key not_null
     public $nickname;                        // varchar(64)  multiple_key not_null
-    public $fullname;                        // varchar(255)  multiple_key
-    public $profileurl;                      // varchar(255)
-    public $homepage;                        // varchar(255)  multiple_key
+    public $fullname;                        // varchar(191)  multiple_key   not 255 because utf8mb4 takes more space
+    public $profileurl;                      // varchar(191)                 not 255 because utf8mb4 takes more space
+    public $homepage;                        // varchar(191)  multiple_key   not 255 because utf8mb4 takes more space
     public $bio;                             // text()  multiple_key
-    public $location;                        // varchar(255)  multiple_key
+    public $location;                        // varchar(191)  multiple_key   not 255 because utf8mb4 takes more space
     public $lat;                             // decimal(10,7)
     public $lon;                             // decimal(10,7)
     public $location_id;                     // int(4)
@@ -49,11 +49,11 @@ class Profile extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
                 'nickname' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'nickname or username', 'collate' => 'utf8_general_ci'),
-                'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name', 'collate' => 'utf8_general_ci'),
-                'profileurl' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL, cached so we dont regenerate'),
-                'homepage' => array('type' => 'varchar', 'length' => 255, 'description' => 'identifying URL', 'collate' => 'utf8_general_ci'),
+                'fullname' => array('type' => 'varchar', 'length' => 191, 'description' => 'display name', 'collate' => 'utf8_general_ci'),
+                'profileurl' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL, cached so we dont regenerate'),
+                'homepage' => array('type' => 'varchar', 'length' => 191, 'description' => 'identifying URL', 'collate' => 'utf8_general_ci'),
                 'bio' => array('type' => 'text', 'description' => 'descriptive biography', 'collate' => 'utf8_general_ci'),
-                'location' => array('type' => 'varchar', 'length' => 255, 'description' => 'physical location', 'collate' => 'utf8_general_ci'),
+                'location' => array('type' => 'varchar', 'length' => 191, 'description' => 'physical location', 'collate' => 'utf8_general_ci'),
                 'lat' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'latitude'),
                 'lon' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'longitude'),
                 'location_id' => array('type' => 'int', 'description' => 'location id if possible'),
@@ -1451,6 +1451,12 @@ class Profile extends Managed_DataObject
         return $feed;
     }
 
+    public function repeatedToMe($offset=0, $limit=20, $since_id=null, $max_id=null)
+    {
+        // TRANS: Exception thrown when trying view "repeated to me".
+        throw new Exception(_('Not implemented since inbox change.'));
+    }
+
     /*
      * Get a Profile object by URI. Will call external plugins for help
      * using the event StartGetProfileFromURI.
@@ -1566,6 +1572,15 @@ class Profile extends Managed_DataObject
         return $this->getUser()->shortenLinks($text, $always);
     }
 
+    public function isPrivateStream()
+    {
+        // We only know of public remote users as of yet...
+        if (!$this->isLocal()) {
+            return false;
+        }
+        return $this->getUser()->private_stream ? true : false;
+    }
+
     public function delPref($namespace, $topic) {
         return Profile_prefs::setData($this, $namespace, $topic, null);
     }
index 0ad8106e3187d10b88da3dcfe0d45857d146c2f5..2b3d2aa5ad4dd87e73f6d86bf94bb0f2886cb392 100644 (file)
@@ -43,8 +43,8 @@ class Profile_list extends Managed_DataObject
     public $private;                         // tinyint(1)
     public $created;                         // datetime   not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
-    public $uri;                             // varchar(255)  unique_key
-    public $mainpage;                        // varchar(255)
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $mainpage;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $tagged_count;                    // smallint
     public $subscriber_count;                // smallint
 
@@ -64,8 +64,8 @@ class Profile_list extends Managed_DataObject
                 'created' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date the tag was added'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date the tag was modified'),
 
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universal identifier'),
-                'mainpage' => array('type' => 'varchar', 'length' => 255, 'description' => 'page to link to'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universal identifier'),
+                'mainpage' => array('type' => 'varchar', 'length' => 191, 'description' => 'page to link to'),
                 'tagged_count' => array('type' => 'int', 'default' => 0, 'description' => 'number of people tagged with this tag by this user'),
                 'subscriber_count' => array('type' => 'int', 'default' => 0, 'description' => 'number of subscribers to this tag'),
             ),
index ee0fa0e27cce09c96a5e2d568a9c9558397bf518..27034390f848d4293ff35f701b95d2ac2ef57a77 100644 (file)
@@ -31,8 +31,8 @@ class Profile_prefs extends Managed_DataObject
 {
     public $__table = 'profile_prefs';       // table name
     public $profile_id;                      // int(4)  primary_key not_null
-    public $namespace;                       // varchar(255)  not_null
-    public $topic;                           // varchar(255)  not_null
+    public $namespace;                       // varchar(191)  not_null
+    public $topic;                           // varchar(191)  not_null
     public $data;                            // text
     public $created;                         // datetime   not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
@@ -42,8 +42,8 @@ class Profile_prefs extends Managed_DataObject
         return array(
             'fields' => array(
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'user'),
-                'namespace' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'namespace, like pluginname or category'),
-                'topic' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'preference key, i.e. description, age...'),
+                'namespace' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'namespace, like pluginname or category'),
+                'topic' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'preference key, i.e. description, age...'),
                 'data' => array('type' => 'blob', 'description' => 'topic data, may be anything'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 7d3a5fc0ca22a5432cf5baf8393e46d6b7fd2fb3..d37cf42d970a0b2928e1948da732efed0bb73795 100644 (file)
@@ -12,7 +12,7 @@ class Sms_carrier extends Managed_DataObject
     public $__table = 'sms_carrier';                     // table name
     public $id;                              // int(4)  primary_key not_null
     public $name;                            // varchar(64)  unique_key
-    public $email_pattern;                   // varchar(255)   not_null
+    public $email_pattern;                   // varchar(191)   not_null   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -30,7 +30,7 @@ class Sms_carrier extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'primary key for SMS carrier'),
                 'name' => array('type' => 'varchar', 'length' => 64, 'description' => 'name of the carrier'),
-                'email_pattern' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'sprintf pattern for making an email address from a phone number'),
+                'email_pattern' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'sprintf pattern for making an email address from a phone number'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index ffbf9d5a3c0efd0c9c708739aff459a9702bc117..3498b4bd24b4ae18a0a9f5213ff9666beff92977 100644 (file)
@@ -29,15 +29,15 @@ class Status_network extends Safe_DataObject
     public $__table = 'status_network';                  // table name
     public $site_id;                         // int(4) primary_key not_null
     public $nickname;                        // varchar(64)   unique_key not_null
-    public $hostname;                        // varchar(255)  unique_key
-    public $pathname;                        // varchar(255)  unique_key
-    public $dbhost;                          // varchar(255)
-    public $dbuser;                          // varchar(255)
-    public $dbpass;                          // varchar(255)
-    public $dbname;                          // varchar(255)
-    public $sitename;                        // varchar(255)
-    public $theme;                           // varchar(255)
-    public $logo;                            // varchar(255)
+    public $hostname;                        // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $pathname;                        // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $dbhost;                          // varchar(191)               not 255 because utf8mb4 takes more space
+    public $dbuser;                          // varchar(191)               not 255 because utf8mb4 takes more space
+    public $dbpass;                          // varchar(191)               not 255 because utf8mb4 takes more space
+    public $dbname;                          // varchar(191)               not 255 because utf8mb4 takes more space
+    public $sitename;                        // varchar(191)               not 255 because utf8mb4 takes more space
+    public $theme;                           // varchar(191)               not 255 because utf8mb4 takes more space
+    public $logo;                            // varchar(191)               not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
index 4d7eb524dcf8d89da61e4ba15d9a2bac39d7b7cc..6601bcd6fc10ce0b0678b17e5fd3392dc653b09c 100644 (file)
@@ -32,9 +32,9 @@ class Subscription extends Managed_DataObject
     public $subscribed;                      // int(4)  primary_key not_null
     public $jabber;                          // tinyint(1)   default_1
     public $sms;                             // tinyint(1)   default_1
-    public $token;                           // varchar(255)
-    public $secret;                          // varchar(255)
-    public $uri;                             // varchar(255)
+    public $token;                           // varchar(191)   not 255 because utf8mb4 takes more space
+    public $secret;                          // varchar(191)   not 255 because utf8mb4 takes more space
+    public $uri;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -46,9 +46,9 @@ class Subscription extends Managed_DataObject
                 'subscribed' => array('type' => 'int', 'not null' => true, 'description' => 'profile being listened to'),
                 'jabber' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'deliver jabber messages'),
                 'sms' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'deliver sms messages'),
-                'token' => array('type' => 'varchar', 'length' => 255, 'description' => 'authorization token'),
-                'secret' => array('type' => 'varchar', 'length' => 255, 'description' => 'token secret'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier'),
+                'token' => array('type' => 'varchar', 'length' => 191, 'description' => 'authorization token'),
+                'secret' => array('type' => 'varchar', 'length' => 191, 'description' => 'token secret'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
@@ -94,8 +94,12 @@ class Subscription extends Managed_DataObject
         if (Event::handle('StartSubscribe', array($subscriber, $other))) {
             $otherUser = User::getKV('id', $other->id);
             if ($otherUser instanceof User && $otherUser->subscribe_policy == User::SUBSCRIBE_POLICY_MODERATE && !$force) {
-                $sub = Subscription_queue::saveNew($subscriber, $other);
-                $sub->notify();
+                try {
+                    $sub = Subscription_queue::saveNew($subscriber, $other);
+                    $sub->notify();
+                } catch (AlreadyFulfilledException $e) {
+                    $sub = Subscription_queue::getSubQueue($subscriber, $other);
+                }
             } else {
                 $sub = self::saveNew($subscriber->id, $other->id);
                 $sub->notify();
@@ -124,7 +128,7 @@ class Subscription extends Managed_DataObject
                 }
             }
 
-            if ($sub instanceof Subscription) { // i.e. not SubscriptionQueue
+            if ($sub instanceof Subscription) { // i.e. not Subscription_queue
                 Event::handle('EndSubscribe', array($subscriber, $other));
             }
         }
@@ -132,6 +136,16 @@ class Subscription extends Managed_DataObject
         return $sub;
     }
 
+    static function ensureStart(Profile $subscriber, Profile $other, $force=false)
+    {
+        try {
+            $sub = self::start($subscriber, $other, $force);
+        } catch (AlreadyFulfilledException $e) {
+            return self::getSubscription($subscriber, $other);
+        }
+        return $sub;
+    }
+
     /**
      * Low-level subscription save.
      * Outside callers should use Subscription::start()
@@ -232,9 +246,25 @@ class Subscription extends Managed_DataObject
 
     static function exists(Profile $subscriber, Profile $other)
     {
-        $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
-                                           'subscribed' => $other->id));
-        return ($sub instanceof Subscription);
+        try {
+            $sub = self::getSubscription($subscriber, $other);
+        } catch (NoResultException $e) {
+            return false;
+        }
+
+        return true;
+    }
+
+    static function getSubscription(Profile $subscriber, Profile $other)
+    {
+        // This is essentially a pkeyGet but we have an object to return in NoResultException
+        $sub = new Subscription();
+        $sub->subscriber = $subscriber->id;
+        $sub->subscribed = $other->id;
+        if (!$sub->find(true)) {
+            throw new NoResultException($sub);
+        }
+        return $sub;
     }
 
     function asActivity()
index 405eca93fd0f7309ffdd6c5e78b1375c2918120e..878fcf5796968028b7464b441a00aeb9e1eaf2a2 100644 (file)
@@ -36,6 +36,9 @@ class Subscription_queue extends Managed_DataObject
 
     public static function saveNew(Profile $subscriber, Profile $subscribed)
     {
+        if (self::exists($subscriber, $subscribed)) {
+            throw new AlreadyFulfilledException(_('This subscription request is already in progress.'));
+        }
         $rq = new Subscription_queue();
         $rq->subscriber = $subscriber->id;
         $rq->subscribed = $subscribed->id;
@@ -51,6 +54,18 @@ class Subscription_queue extends Managed_DataObject
         return ($sub instanceof Subscription_queue);
     }
 
+    static function getSubQueue(Profile $subscriber, Profile $other)
+    {
+        // This is essentially a pkeyGet but we have an object to return in NoResultException
+        $sub = new Subscription_queue();
+        $sub->subscriber = $subscriber->id;
+        $sub->subscribed = $other->id;
+        if (!$sub->find(true)) {
+            throw new NoResultException($sub);
+        }
+        return $sub;
+    }
+
     /**
      * Complete a pending subscription, as we've got approval of some sort.
      *
index 8d8a4d1c113db4719ff9db2fc9e139ef65ca5f7d..89b3f4ecf1de24f646a3e4eb039e6b64616c8b60 100644 (file)
@@ -10,13 +10,13 @@ class Token extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'token';                           // table name
-    public $consumer_key;                    // varchar(255)  primary_key not_null
+    public $consumer_key;                    // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
     public $tok;                             // char(32)  primary_key not_null
     public $secret;                          // char(32)   not_null
     public $type;                            // tinyint(1)   not_null
     public $state;                           // tinyint(1)
-    public $verifier;                        // varchar(255)
-    public $verified_callback;               // varchar(255)
+    public $verifier;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $verified_callback;               // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -27,13 +27,13 @@ class Token extends Managed_DataObject
         return array(
             'description' => 'OAuth token record',
             'fields' => array(
-                'consumer_key' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'unique identifier, root URL'),
+                'consumer_key' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'unique identifier, root URL'),
                 'tok' => array('type' => 'char', 'length' => 32, 'not null' => true, 'description' => 'identifying value'),
                 'secret' => array('type' => 'char', 'length' => 32, 'not null' => true, 'description' => 'secret value'),
                 'type' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 0, 'description' => 'request or access'),
                 'state' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'for requests, 0 = initial, 1 = authorized, 2 = used'),
-                'verifier' => array('type' => 'varchar', 'length' => 255, 'description' => 'verifier string for OAuth 1.0a'),
-                'verified_callback' => array('type' => 'varchar', 'length' => 255, 'description' => 'verified callback URL for OAuth 1.0a'),
+                'verifier' => array('type' => 'varchar', 'length' => 191, 'description' => 'verifier string for OAuth 1.0a'),
+                'verified_callback' => array('type' => 'varchar', 'length' => 191, 'description' => 'verified callback URL for OAuth 1.0a'),
 
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 7a19ae3a0a04cbf9e39cdb5d724106292078d78b..f543a7552855fb74af4ac729bf8cfb579c3e2c47 100644 (file)
@@ -34,9 +34,9 @@ class User extends Managed_DataObject
     public $__table = 'user';                            // table name
     public $id;                              // int(4)  primary_key not_null
     public $nickname;                        // varchar(64)  unique_key
-    public $password;                        // varchar(255)
-    public $email;                           // varchar(255)  unique_key
-    public $incomingemail;                   // varchar(255)  unique_key
+    public $password;                        // varchar(191)               not 255 because utf8mb4 takes more space
+    public $email;                           // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $incomingemail;                   // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $emailnotifysub;                  // tinyint(1)   default_1
     public $emailnotifyfav;                  // tinyint(1)   default_1
     public $emailnotifynudge;                // tinyint(1)   default_1
@@ -50,8 +50,8 @@ class User extends Managed_DataObject
     public $carrier;                         // int(4)
     public $smsnotify;                       // tinyint(1)
     public $smsreplies;                      // tinyint(1)
-    public $smsemail;                        // varchar(255)
-    public $uri;                             // varchar(255)  unique_key
+    public $smsemail;                        // varchar(191)               not 255 because utf8mb4 takes more space
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $autosubscribe;                   // tinyint(1)
     public $subscribe_policy;                // tinyint(1)
     public $urlshorteningservice;            // varchar(50)   default_ur1.ca
@@ -69,9 +69,9 @@ class User extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
                 'nickname' => array('type' => 'varchar', 'length' => 64, 'description' => 'nickname or username, duped in profile'),
-                'password' => array('type' => 'varchar', 'length' => 255, 'description' => 'salted password, can be null for OpenID users'),
-                'email' => array('type' => 'varchar', 'length' => 255, 'description' => 'email address for password recovery etc.'),
-                'incomingemail' => array('type' => 'varchar', 'length' => 255, 'description' => 'email address for post-by-email'),
+                'password' => array('type' => 'varchar', 'length' => 191, 'description' => 'salted password, can be null for OpenID users'),
+                'email' => array('type' => 'varchar', 'length' => 191, 'description' => 'email address for password recovery etc.'),
+                'incomingemail' => array('type' => 'varchar', 'length' => 191, 'description' => 'email address for post-by-email'),
                 'emailnotifysub' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of subscriptions'),
                 'emailnotifyfav' => array('type' => 'int', 'size' => 'tiny', 'default' => null, 'description' => 'Notify by email of favorites'),
                 'emailnotifynudge' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of nudges'),
@@ -85,8 +85,8 @@ class User extends Managed_DataObject
                 'carrier' => array('type' => 'int', 'description' => 'foreign key to sms_carrier'),
                 'smsnotify' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'whether to send notices to SMS'),
                 'smsreplies' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'whether to send notices to SMS on replies'),
-                'smsemail' => array('type' => 'varchar', 'length' => 255, 'description' => 'built from sms and carrier'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'),
+                'smsemail' => array('type' => 'varchar', 'length' => 191, 'description' => 'built from sms and carrier'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier, usually a tag URI'),
                 'autosubscribe' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'automatically subscribe to users who subscribe to us'),
                 'subscribe_policy' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => '0 = anybody can subscribe; 1 = require approval'),
                 'urlshorteningservice' => array('type' => 'varchar', 'length' => 50, 'default' => 'internal', 'description' => 'service to use for auto-shortening URLs'),
@@ -191,7 +191,8 @@ class User extends Managed_DataObject
      *              string 'password' (may be missing for eg OpenID registrations)
      *              string 'code' invite code
      *              ?string 'uri' permalink to notice; defaults to local notice URL
-     * @return mixed User object or false on failure
+     * @return  User object
+     * @throws  Exception on failure
      */
     static function register(array $fields) {
 
@@ -205,12 +206,8 @@ class User extends Managed_DataObject
             $email = common_canonical_email($email);
         }
 
-        try {
-            $profile->nickname = Nickname::normalize($nickname, true);
-        } catch (NicknameException $e) {
-            common_log(LOG_WARNING, sprintf('Bad nickname during User registration for %s: %s', $nickname, $e->getMessage()), __FILE__);
-            return false;
-        }
+        // Normalize _and_ check whether it is in use. Throw NicknameException on failure.
+        $profile->nickname = Nickname::normalize($nickname, true);
 
         $profile->profileurl = common_profile_url($profile->nickname);
 
@@ -277,7 +274,9 @@ class User extends Managed_DataObject
             $id = $profile->insert();
             if ($id === false) {
                 common_log_db_error($profile, 'INSERT', __FILE__);
-                return false;
+                $profile->query('ROLLBACK');
+                // TRANS: Profile data could not be inserted for some reason.
+                throw new ServerException(_m('Could not insert profile data for new user.'));
             }
 
             $user->id = $id;
@@ -297,7 +296,8 @@ class User extends Managed_DataObject
             if ($result === false) {
                 common_log_db_error($user, 'INSERT', __FILE__);
                 $profile->query('ROLLBACK');
-                return false;
+                // TRANS: User data could not be inserted for some reason.
+                throw new ServerException(_m('Could not insert user data for new user.'));
             }
 
             // Everyone is subscribed to themself
@@ -312,7 +312,8 @@ class User extends Managed_DataObject
             if (!$result) {
                 common_log_db_error($subscription, 'INSERT', __FILE__);
                 $profile->query('ROLLBACK');
-                return false;
+                // TRANS: Subscription data could not be inserted for some reason.
+                throw new ServerException(_m('Could not insert subscription data for new user.'));
             }
 
             // Mark that this invite was converted
@@ -334,7 +335,8 @@ class User extends Managed_DataObject
                 if (!$result) {
                     common_log_db_error($confirm, 'INSERT', __FILE__);
                     $profile->query('ROLLBACK');
-                    return false;
+                    // TRANS: Email confirmation data could not be inserted for some reason.
+                    throw new ServerException(_m('Could not insert email confirmation data for new user.'));
                 }
             }
 
@@ -352,7 +354,7 @@ class User extends Managed_DataObject
                     common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
                                __FILE__);
                 } else {
-                    Subscription::start($profile, $defuser->getProfile());
+                    Subscription::ensureStart($profile, $defuser->getProfile());
                 }
             }
 
@@ -385,6 +387,10 @@ class User extends Managed_DataObject
             Event::handle('EndUserRegister', array($profile));
         }
 
+        if (!$user instanceof User) {
+            throw new ServerException('User could not be registered. Probably an event hook that failed.');
+        }
+
         return $user;
     }
 
@@ -687,11 +693,9 @@ class User extends Managed_DataObject
         return $stream->getNotices($offset, $limit, $since_id, $max_id);
     }
 
-
-    function repeatedToMe($offset=0, $limit=20, $since_id=null, $max_id=null)
+    public function repeatedToMe($offset=0, $limit=20, $since_id=null, $max_id=null)
     {
-        // TRANS: Exception thrown when trying view "repeated to me".
-        throw new Exception(_('Not implemented since inbox change.'));
+        return $this->getProfile()->repeatedToMe($offset, $limit, $since_id, $max_id);
     }
 
     public static function siteOwner()
@@ -994,6 +998,11 @@ class User extends Managed_DataObject
         return $act;
     }
 
+    public function isPrivateStream()
+    {
+        return $this->getProfile()->isPrivateStream();
+    }
+
     public function delPref($namespace, $topic)
     {
         return $this->getProfile()->delPref($namespace, $topic);
index 78a7b9f1fdce87f6a5fa347807c0b97369da3952..7885a4d3a149e72f387edd24b2b746a9620509ef 100644 (file)
@@ -15,18 +15,18 @@ class User_group extends Managed_DataObject
     public $__table = 'user_group';                      // table name
     public $id;                              // int(4)  primary_key not_null
     public $nickname;                        // varchar(64)
-    public $fullname;                        // varchar(255)
-    public $homepage;                        // varchar(255)
+    public $fullname;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $homepage;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $description;                     // text
-    public $location;                        // varchar(255)
-    public $original_logo;                   // varchar(255)
-    public $homepage_logo;                   // varchar(255)
-    public $stream_logo;                     // varchar(255)
-    public $mini_logo;                       // varchar(255)
+    public $location;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $original_logo;                   // varchar(191)   not 255 because utf8mb4 takes more space
+    public $homepage_logo;                   // varchar(191)   not 255 because utf8mb4 takes more space
+    public $stream_logo;                     // varchar(191)   not 255 because utf8mb4 takes more space
+    public $mini_logo;                       // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime   not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
-    public $uri;                             // varchar(255)  unique_key
-    public $mainpage;                        // varchar(255)
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $mainpage;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $join_policy;                     // tinyint
     public $force_scope;                     // tinyint
 
@@ -41,21 +41,21 @@ class User_group extends Managed_DataObject
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
 
                 'nickname' => array('type' => 'varchar', 'length' => 64, 'description' => 'nickname for addressing'),
-                'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name'),
-                'homepage' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL, cached so we dont regenerate'),
+                'fullname' => array('type' => 'varchar', 'length' => 191, 'description' => 'display name'),
+                'homepage' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL, cached so we dont regenerate'),
                 'description' => array('type' => 'text', 'description' => 'group description'),
-                'location' => array('type' => 'varchar', 'length' => 255, 'description' => 'related physical location, if any'),
+                'location' => array('type' => 'varchar', 'length' => 191, 'description' => 'related physical location, if any'),
 
-                'original_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'original size logo'),
-                'homepage_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'homepage (profile) size logo'),
-                'stream_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'stream-sized logo'),
-                'mini_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'mini logo'),
+                'original_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'original size logo'),
+                'homepage_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'homepage (profile) size logo'),
+                'stream_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'stream-sized logo'),
+                'mini_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'mini logo'),
 
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
 
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universal identifier'),
-                'mainpage' => array('type' => 'varchar', 'length' => 255, 'description' => 'page for group info to link to'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universal identifier'),
+                'mainpage' => array('type' => 'varchar', 'length' => 191, 'description' => 'page for group info to link to'),
                 'join_policy' => array('type' => 'int', 'size' => 'tiny', 'description' => '0=open; 1=requires admin approval'),      
                 'force_scope' => array('type' => 'int', 'size' => 'tiny', 'description' => '0=never,1=sometimes,-1=always'),
             ),
index cba91ea252cc41a28ff27f42eccb4003af01ce50..16fd030bb42ce43c35307ef4d8826fb3fa5fd263 100644 (file)
@@ -36,8 +36,8 @@ class User_im_prefs extends Managed_DataObject
 
     public $__table = 'user_im_prefs';       // table name
     public $user_id;                         // int(4)  primary_key not_null
-    public $screenname;                      // varchar(255)  not_null
-    public $transport;                       // varchar(255)  not_null
+    public $screenname;                      // varchar(191)  not_null   not 255 because utf8mb4 takes more space
+    public $transport;                       // varchar(191)  not_null   not 255 because utf8mb4 takes more space
     public $notify;                          // tinyint(1)
     public $replies;                         // tinyint(1)
     public $microid;                         // tinyint(1)
@@ -53,8 +53,8 @@ class User_im_prefs extends Managed_DataObject
         return array(
             'fields' => array(
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user'),
-                'screenname' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'screenname on this service'),
-                'transport' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'transport (ex xmpp, aim)'),
+                'screenname' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'screenname on this service'),
+                'transport' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'transport (ex xmpp, aim)'),
                 'notify' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 0, 'description' => 'Notify when a new notice is sent'),
                 'replies' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 0, 'description' => 'Send replies  from people not subscribed to'),
                 'microid' => array('type' => 'int', 'size' => 'tiny', 'not null' => true, 'default' => 1, 'description' => 'Publish a MicroID'),
index b252ee31565f58234859ca87ac1eaa23bdd7123e..0173a6efc4a0d647c76122014841363d2ce47946 100644 (file)
@@ -11,8 +11,8 @@ class User_username extends Managed_DataObject
 
     public $__table = 'user_username';                     // table name
     public $user_id;                        // int(4)  not_null
-    public $provider_name;                  // varchar(255)  primary_key not_null
-    public $username;                       // varchar(255)  primary_key not_null
+    public $provider_name;                  // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
+    public $username;                       // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
     public $created;                        // datetime()   not_null
     public $modified;                       // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -23,8 +23,8 @@ class User_username extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'provider_name' => array('type' => 'varchar', 'length' => 255, 'description' => 'provider name'),
-                'username' => array('type' => 'varchar', 'length' => 255, 'description' => 'username'),
+                'provider_name' => array('type' => 'varchar', 'length' => 191, 'description' => 'provider name'),
+                'username' => array('type' => 'varchar', 'length' => 191, 'description' => 'username'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice id this title relates to'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index c630a83d522cfdbf7c35f72adfb572d65b5b5bbb..5e9693f5f71ac5b7d0fa4dad3dd9db1905c707fe 100644 (file)
@@ -21,7 +21,7 @@ create table status_network (
     created datetime not null comment 'date this record was created',
     modified timestamp comment 'date this record was modified'
 
-) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
+) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 
 create table status_network_tag (
     site_id integer  comment 'unique id',
@@ -30,5 +30,5 @@ create table status_network_tag (
 
     constraint primary key (site_id, tag),
     index status_network_tag_tag_idx (tag)
-) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
+) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 
index c7be2d86a0cd30b23ca5ed737e118ed90dcb20dd..f7513cc0c7dd54153a80600ea16eacd168c443c5 100644 (file)
@@ -1,11 +1,31 @@
+### GNU social "fancy URL" setup
+#
+#   Change the "RewriteBase" in the new .htaccess file to be the URL path
+#       to your GNU Social installation on your server. Typically this will
+#       be the path to your GNU Social directory relative to your Web root.
+#       If you are installing it in the root directory, leave it as '/'.
+#
+#   If it doesn't work, double-check that AllowOverride for the GNU Social
+#       directory is 'All' in your Apache configuration file. This can be
+#       * /etc/apache2/apache2.conf (generic)
+#       * /etc/apache2/sites-available/default(on Debian and Ubuntu)
+#       * ...many other variations depending on distribution...
+#
+#   See the Apache documentation for .htaccess files for more details:
+#       https://httpd.apache.org/docs/2.4/howto/htaccess.html
+#
+#   Also, check that mod_rewrite is installed and enabled:
+#       https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
+
+
 <IfModule mod_rewrite.c>
   RewriteEngine On
 
-  # NOTE: change this to your actual StatusNet base URL path,
+  # NOTE: change this to your actual GNU social base URL path,
   # minus the domain part:
   #
-  #   http://example.com/        => /
-  #   http://example.com/mublog/ => /mublog/
+  #   https://social.example.com/        => /
+  #   https://example.com/social/ => /social/
   #
   RewriteBase /
   #RewriteBase /mublog/
@@ -19,7 +39,6 @@
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule (.*) index.php?p=$1 [L,QSA]
-<<<<<<< HEAD
 
   ## You can also use PATHINFO by using this RewriteRule instead:
   # RewriteRule (.*) index.php/$1 [L,QSA]
 
 <FilesMatch "\.(ini)">
   # For mod_access_compat in Apache <2.4
-  Order allow,deny
+  #Order allow,deny
 
   # Use this instead for Apache >2.4 (mod_authz_host)
   # Require all denied
 </FilesMatch>
-=======
-</IfModule>
-
-<FilesMatch "\.(ini)">
-  Order allow,deny
-</FilesMatch>
-
->>>>>>> Adding htaccess.sample back*shame*
index 3289d29b34215858c738024713ecd09ac696fe31..c68e8836fdb97bf1e37d772f889b7f97d7512181 100644 (file)
--- a/index.php
+++ b/index.php
@@ -268,7 +268,7 @@ function main()
     $site_ssl = common_config('site', 'ssl');
 
     // If the request is HTTP and it should be HTTPS...
-    if ($site_ssl != 'never' && !StatusNet::isHTTPS() && common_is_sensitive($args['action'])) {
+    if ($site_ssl != 'never' && !GNUsocial::isHTTPS() && common_is_sensitive($args['action'])) {
         common_redirect(common_local_url($args['action'], $args));
     }
 
index d72cf69b07b68dd1429755a73ad6fff4ee2b2d25..2752c967677cddc4dc07e68d43537893fbe4413e 100644 (file)
@@ -265,10 +265,10 @@ class WebInstaller extends Installer
                     <li>
                         <label for="site_profile">Type of site</label>
                         <select id="site_profile" name="site_profile">
-                            <option value="private">Private</option>
                             <option value="community">Community</option>
-                            <option value ="public">Public</option>
-                            <option value ="singleuser">Single User</option>
+                            <option value="public">Public (open registration)</option>
+                            <option value="singleuser">Single User</option>
+                            <option value="private">Private (no federation)</option>
                         </select>
                         <p class="form_guide">Initial access settings for your site</p>
                     </li>
index 9c727e9a5376b2cde9d5d9a2418ea57988dc6af0..2611d8515ac73e6b8b1812d68696b2075cf874a0 100644 (file)
@@ -1562,60 +1562,6 @@ var SN = { // StatusNet
             });
         },
 
-        /**
-         * Called when a people tag edit box is shown in the interface
-         *
-         * - loads the jQuery UI autocomplete plugin
-         * - sets event handlers for tag completion
-         *
-         */
-        PeopletagAutocomplete: function (txtBox) {
-            var split = function (val) {
-                return val.split( /\s+/ );
-            }
-            var extractLast = function (term) {
-                return split(term).pop();
-            }
-
-            // don't navigate away from the field on tab when selecting an item
-            txtBox.on( "keydown", function ( event ) {
-                if ( event.keyCode === $.ui.keyCode.TAB &&
-                        $(this).data( "autocomplete" ).menu.active ) {
-                    event.preventDefault();
-                }
-            }).autocomplete({
-                minLength: 0,
-                source: function (request, response) {
-                    // delegate back to autocomplete, but extract the last term
-                    response($.ui.autocomplete.filter(
-                        SN.C.PtagACData, extractLast(request.term)));
-                },
-                focus: function () {
-                    return false;
-                },
-                select: function (event, ui) {
-                    var terms = split(this.value);
-                    terms.pop();
-                    terms.push(ui.item.value);
-                    terms.push("");
-                    this.value = terms.join(" ");
-                    return false;
-                }
-            }).data('autocomplete')._renderItem = function (ul, item) {
-                    // FIXME: with jQuery UI you cannot have it highlight the match
-                    var _l = '<a class="ptag-ac-line-tag">' + item.tag
-                          + ' <em class="privacy_mode">' + item.mode + '</em>'
-                          + '<span class="freq">' + item.freq + '</span></a>'
-
-                    return $("<li/>")
-                            .addClass('mode-' + item.mode)
-                            .addClass('ptag-ac-line')
-                            .data("item.autocomplete", item)
-                            .append(_l)
-                            .appendTo(ul);
-                }
-        },
-
         /**
          * Run setup for the ajax people tags editor
          *
@@ -1644,7 +1590,6 @@ var SN = { // StatusNet
                         }
 
                         SN.C.PtagACData = data;
-                        SN.Init.PeopletagAutocomplete(form.find('#tags'));
                     }
                 });
 
index c019b65dc92f40e38f2acfe74991cbc5149d8bb4..d4e14ab3447cc53d3cdd7d7d058e91c2efadc387 100644 (file)
@@ -118,16 +118,18 @@ class Action extends HTMLOutputter // lawsuit
             common_config_set('db', 'database', $mirror);
         }
 
-        $status = $this->prepare($args);
-        if ($status) {
-            $this->handle($args);
-        } else {
-            common_debug('Prepare failed for Action.');
+        if (Event::handle('StartActionExecute', array($this, &$args))) {
+            $prepared = $this->prepare($args);
+            if ($prepared) {
+                $this->handle($args);
+            } else {
+                common_debug('Prepare failed for Action.');
+            }
         }
 
         $this->flush();
 
-        Event::handle('EndActionExecute', array($status, $this));
+        Event::handle('EndActionExecute', array($this));
     }
 
     /**
@@ -156,8 +158,8 @@ class Action extends HTMLOutputter // lawsuit
         $this->action = strtolower($this->trimmed('action'));
 
         if ($this->ajax || $this->boolean('ajax')) {
-            // check with StatusNet::isAjax()
-            StatusNet::setAjax(true);
+            // check with GNUsocial::isAjax()
+            GNUsocial::setAjax(true);
         }
 
         if ($this->needLogin) {
@@ -206,7 +208,7 @@ class Action extends HTMLOutputter // lawsuit
      */
     function showPage()
     {
-        if (StatusNet::isAjax()) {
+        if (GNUsocial::isAjax()) {
             self::showAjax();
             return;
         }
@@ -326,7 +328,7 @@ class Action extends HTMLOutputter // lawsuit
         } else {
             // favicon.ico should be HTTPS if the rest of the page is
             $this->element('link', array('rel' => 'shortcut icon',
-                                         'href' => common_path('favicon.ico', StatusNet::isHTTPS())));
+                                         'href' => common_path('favicon.ico', GNUsocial::isHTTPS())));
         }
 
         if (common_config('site', 'mobile')) {
@@ -415,7 +417,7 @@ class Action extends HTMLOutputter // lawsuit
                 $this->script('extlib/jquery.form.js');
                 $this->script('extlib/jquery-ui/jquery-ui.js');
                 $this->script('extlib/jquery.cookie.js');
-                $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/extlib/json2.js', StatusNet::isHTTPS()).'"); }');
+                $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/extlib/json2.js', GNUsocial::isHTTPS()).'"); }');
                 $this->script('extlib/jquery.infieldlabel.js');
 
                 Event::handle('EndShowJQueryScripts', array($this));
@@ -638,7 +640,7 @@ class Action extends HTMLOutputter // lawsuit
             $this->elementStart('a', array('class' => 'home bookmark',
                                            'href' => $url));
 
-            if (StatusNet::isHTTPS()) {
+            if (GNUsocial::isHTTPS()) {
                 $logoUrl = common_config('site', 'ssllogo');
                 if (empty($logoUrl)) {
                     // if logo is an uploaded file, try to fall back to HTTPS file URL
@@ -1144,7 +1146,7 @@ class Action extends HTMLOutputter // lawsuit
                 $image    = common_config('license', 'image');
                 $sslimage = common_config('license', 'sslimage');
 
-                if (StatusNet::isHTTPS()) {
+                if (GNUsocial::isHTTPS()) {
                     if (!empty($sslimage)) {
                         $url = $sslimage;
                     } else if (preg_match('#^http://i.creativecommons.org/#', $image)) {
index 2cf950183005a3477352488f68e965cb94200626..51ea8ddf6bdca3d3871e03f103ca81a0f9a04cd3 100644 (file)
@@ -109,7 +109,7 @@ class ActivityImporter extends QueueHandler
 
             // XXX: don't do this for untrusted input!
 
-            Subscription::start($otherProfile, $profile);
+            Subscription::ensureStart($otherProfile, $profile);
         } else if (empty($activity->actor)
                    || $activity->actor->id == $author->id) {
 
@@ -123,7 +123,7 @@ class ActivityImporter extends QueueHandler
                 throw new ClientException(_('Unknown profile.'));
             }
 
-            Subscription::start($profile, $otherProfile);
+            Subscription::ensureStart($profile, $otherProfile);
         } else {
             // TRANS: Client exception thrown when trying to import an event not related to the importing user.
             throw new Exception(_('This activity seems unrelated to our user.'));
@@ -213,7 +213,7 @@ class ActivityImporter extends QueueHandler
 
         // Get (safe!) HTML and text versions of the content
 
-        $rendered = $this->purify($sourceContent);
+        $rendered = common_purify($sourceContent);
         $content = common_strip_html($rendered);
 
         $shortened = $user->shortenLinks($content);
@@ -339,15 +339,4 @@ class ActivityImporter extends QueueHandler
 
         return array($groups, $replies);
     }
-
-
-    function purify($content)
-    {
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*');
-
-        return htmLawed($content, $config);
-    }
 }
index fe33e9081ec1236c3670a6226ffb8466a6c79183..ac828d94912f940a56fa1d9587a104d2bf02cf34 100644 (file)
@@ -146,7 +146,7 @@ class ActivityMover extends QueueHandler
                                "Changing sub to {$act->objects[0]->id}".
                                "by {$act->actor->id} to {$remote->nickname}.");
                     $otherProfile = $otherUser->getProfile();
-                    Subscription::start($otherProfile, $remote);
+                    Subscription::ensureStart($otherProfile, $remote);
                     Subscription::cancel($otherProfile, $user->getProfile());
                 } else {
                     $this->log(LOG_NOTICE,
index aa7636c713bc37ebdd7214505ef97439127dadf3..2fe52eefcc5a84f883757f9aba8818446d1a657b 100644 (file)
@@ -512,11 +512,11 @@ class ActivityObject
 
             switch (self::canonicalType($object->type)) {
             case 'image':
-                $object->largerImage = $file->url;
+                $object->largerImage = $file->getUrl();
                 break;
             case 'video':
             case 'audio':
-                $object->stream = $file->url;
+                $object->stream = $file->getUrl();
                 break;
             }
 
@@ -861,7 +861,7 @@ class ActivityObject
                 if (is_string($this->thumbnail)) {
                     $object['image'] = array('url' => $this->thumbnail);
                 } else {
-                    $object['image'] = array('url' => $this->thumbnail->url);
+                    $object['image'] = array('url' => $this->thumbnail->getUrl());
                     if ($this->thumbnail->width) {
                         $object['image']['width'] = $this->thumbnail->width;
                     }
index 93a4d36ebbe6c673953ed73e45b5676af54a7f9e..9044749181d3e8b94c31317eedde537e4a139aa5 100644 (file)
@@ -59,24 +59,8 @@ class AdminPanelNav extends Menu
         $nickname = $user->nickname;
         $name = $user->getProfile()->getBestName();
 
-        // Stub section w/ home link
-        $this->action->elementStart('ul');
-        $this->action->elementStart('li');
-        // TRANS: Header in administrator navigation panel.
-        $this->action->element('h3', null, _m('HEADER','Home'));
-        $this->action->elementStart('ul', 'nav');
-        $this->out->menuItem(common_local_url('all', array('nickname' =>
-                                                           $nickname)),
-                             // TRANS: Menu item in administrator navigation panel.
-                             _m('MENU','Home'),
-                             // TRANS: Menu item title in administrator navigation panel.
-                             // TRANS: %s is a username.
-                             sprintf(_('%s and friends'), $name),
-                             $this->action == 'all', 'nav_timeline_personal');
-
-        $this->action->elementEnd('ul');
-        $this->action->elementEnd('li');
-        $this->action->elementEnd('ul');
+        $stub = new HomeStubNav($this->action);
+        $this->submenu(_m('MENU','Home'), $stub);
 
         $this->action->elementStart('ul');
         $this->action->elementStart('li');
index e672f3a7e6044b1a717782bceb42cc9247578d73..062e6d07746fcf2cfa34b72cfac95f372b8d5575 100644 (file)
@@ -144,7 +144,7 @@ class ApiAction extends Action
      */
     protected function prepare(array $args=array())
     {
-        StatusNet::setApi(true); // reduce exception reports to aid in debugging
+        GNUsocial::setApi(true); // reduce exception reports to aid in debugging
         parent::prepare($args);
 
         $this->format   = $this->arg('format');
@@ -159,7 +159,7 @@ class ApiAction extends Action
         $this->limit    = $this->count + 1;
 
         if ($this->arg('since')) {
-            header('X-StatusNet-Warning: since parameter is disabled; use since_id');
+            header('X-GNUsocial-Warning: since parameter is disabled; use since_id');
         }
 
         $this->source = $this->trimmed('source');
@@ -264,22 +264,20 @@ class ApiAction extends Action
         $twitter_user['statuses_count'] = $profile->noticeCount();
 
         // Is the requesting user following this user?
+        // These values might actually also mean "unknown". Ambiguity issues?
         $twitter_user['following'] = false;
         $twitter_user['statusnet_blocking'] = false;
         $twitter_user['notifications'] = false;
 
-        if (isset($this->auth_user)) {
-
-            $twitter_user['following'] = $this->auth_user->isSubscribed($profile);
-            $twitter_user['statusnet_blocking']  = $this->auth_user->hasBlocked($profile);
-
-            // Notifications on?
-            $sub = Subscription::pkeyGet(array('subscriber' =>
-                                               $this->auth_user->id,
-                                               'subscribed' => $profile->id));
-
-            if ($sub) {
+        if ($this->scoped instanceof Profile) {
+            try {
+                $sub = Subscription::getSubscription($this->scoped, $profile);
+                // Notifications on?
+                $twitter_user['following'] = true;
+                $twitter_user['statusnet_blocking']  = $this->scoped->hasBlocked($profile);
                 $twitter_user['notifications'] = ($sub->jabber || $sub->sms);
+            } catch (NoResultException $e) {
+                // well, the values are already false...
             }
         }
 
@@ -430,11 +428,11 @@ class ApiAction extends Action
         $twitter_group['nickname'] = $group->nickname;
         $twitter_group['fullname'] = $group->fullname;
 
-        if (isset($this->auth_user)) {
-            $twitter_group['member'] = $this->auth_user->isMember($group);
+        if ($this->scoped instanceof Profile) {
+            $twitter_group['member'] = $this->scoped->isMember($group);
             $twitter_group['blocked'] = Group_block::isBlocked(
                 $group,
-                $this->auth_user->getProfile()
+                $this->scoped
             );
         }
 
@@ -485,8 +483,8 @@ class ApiAction extends Action
         $twitter_list['member_count'] = $list->taggedCount();
         $twitter_list['uri'] = $list->getUri();
 
-        if (isset($this->auth_user)) {
-            $twitter_list['following'] = $list->hasSubscriber($this->auth_user);
+        if ($this->scoped instanceof Profile) {
+            $twitter_list['following'] = $list->hasSubscriber($this->scoped);
         } else {
             $twitter_list['following'] = false;
         }
@@ -575,37 +573,30 @@ class ApiAction extends Action
         $relationship = array();
 
         $relationship['source'] =
-            $this->relationshipDetailsArray($source, $target);
+            $this->relationshipDetailsArray($source->getProfile(), $target->getProfile());
         $relationship['target'] =
-            $this->relationshipDetailsArray($target, $source);
+            $this->relationshipDetailsArray($target->getProfile(), $source->getProfile());
 
         return array('relationship' => $relationship);
     }
 
-    function relationshipDetailsArray($source, $target)
+    function relationshipDetailsArray(Profile $source, Profile $target)
     {
         $details = array();
 
-               $source_profile = $source->getProfile();
-               $target_profile = $target->getProfile();                
-
-        $details['screen_name'] = $source->nickname;
-        $details['followed_by'] = $target->isSubscribed($source_profile);
-        $details['following'] = $source->isSubscribed($target_profile);
-
-        $notifications = false;
+        $details['screen_name'] = $source->getNickname();
+        $details['followed_by'] = $target->isSubscribed($source);
 
-        if ($source->isSubscribed($target_profile)) {
-            $sub = Subscription::pkeyGet(array('subscriber' =>
-                $source->id, 'subscribed' => $target->id));
-
-            if (!empty($sub)) {
-                $notifications = ($sub->jabber || $sub->sms);
-            }
+        try {
+            $sub = Subscription::getSubscription($source, $target);
+            $details['following'] = true;
+            $details['notifications_enabled'] = ($sub->jabber || $sub->sms);
+        } catch (NoResultException $e) {
+            $details['following'] = false;
+            $details['notifications_enabled'] = false;
         }
 
-        $details['notifications_enabled'] = $notifications;
-        $details['blocking'] = $source->hasBlocked($target_profile);
+        $details['blocking'] = $source->hasBlocked($target);
         $details['id'] = intval($source->id);
 
         return $details;
@@ -788,7 +779,7 @@ class ApiAction extends Action
     function showSingleAtomStatus($notice)
     {
         header('Content-Type: application/atom+xml; charset=utf-8');
-        print $notice->asAtomEntry(true, true, true, $this->auth_user->getProfile());
+        print $notice->asAtomEntry(true, true, true, $this->scoped);
     }
 
     function show_single_json_status($notice)
@@ -1352,7 +1343,7 @@ class ApiAction extends Action
                 return User::getKV('nickname', $nickname);
             } else {
                 // Fall back to trying the currently authenticated user
-                return $this->auth_user;
+                return $this->scoped->getUser();
             }
 
         } else if (self::is_decimal($id)) {
@@ -1448,7 +1439,7 @@ class ApiAction extends Action
             }
 
             if (!empty($list) && $list->private) {
-                if ($this->auth_user->id == $list->tagger) {
+                if ($this->scoped->id == $list->tagger) {
                     return $list;
                 }
             } else {
@@ -1516,6 +1507,11 @@ class ApiAction extends Action
             $aargs['id'] = $id;
         }
 
+        $user = $this->arg('user');
+        if (!empty($user)) {
+            $aargs['user'] = $user;
+        }
+
         $tag = $this->arg('tag');
         if (!empty($tag)) {
             $aargs['tag'] = $tag;
index 2eca6b646762257a94d78b87e72fdc3f0df12d3b..2f2e50a4d747b852f1fcbfb18eed1e384cd9b69b 100644 (file)
@@ -39,7 +39,7 @@
 
 /*! @page authentication Authentication
 
-    StatusNet supports HTTP Basic Authentication and OAuth for API calls.
+    GNU social supports HTTP Basic Authentication and OAuth for API calls.
 
     @warning Currently, users who have created accounts without setting a
     password via OpenID, Facebook Connect, etc., cannot use the API until
index 77e05b8ca56f5d4ee4d461fb1bc15c0b46c265d5..2bba6d0a91474bf5ac7271c3cc35aa83b2574e2c 100644 (file)
@@ -167,10 +167,10 @@ class Atom10Feed extends XMLStringer
 
         $this->element(
             'generator', array(
-                'uri'     => 'http://status.net',
+                'uri'     => 'https://gnu.io/social',
                 'version' => GNUSOCIAL_VERSION
             ),
-            'StatusNet'
+            'GNU social'
         );
 
         $this->element('id', null, $this->id);
index 3dbce148f8644d4985fa59af17b377ded7fac84b..5127ced2ebf9b84416283a0963f3cf9841d0c740 100644 (file)
@@ -163,7 +163,7 @@ class AttachmentListItem extends Widget
 
                 case 'text/html':
                     if (!empty($this->attachment->filename)
-                            && (StatusNet::isAjax() || common_config('attachments', 'show_html'))) {
+                            && (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
                         // Locally-uploaded HTML. Scrub and display inline.
                         $this->showHtmlFile($this->attachment);
                         break;
index bf5f3aafe3a06f3d0c75eebac2f1e07a9880f517..66f11ca1a9507a5850bdb11418314b8407a39020 100644 (file)
@@ -27,9 +27,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Superclass for plugins that do authentication
@@ -139,7 +137,7 @@ abstract class AuthenticationPlugin extends Plugin
                 //not much else we can do
             }else{
                 $user = $this->autoRegister($nickname, $suggested_nickname);
-                if($user){
+                if ($user instanceof User) {
                     User_username::register($user,$nickname,$this->provider_name);
                     return false;
                 }
index e79d75c294b1a49175d05d3ac2dcefc40f3249c1..104314cb06b24aee08eb3688b12dd9e7af6c4bce 100644 (file)
@@ -127,7 +127,7 @@ class Cache
            
             $names   = array();
            
-            foreach (StatusNet::getActivePlugins() as $plugin=>$attrs) {
+            foreach (GNUsocial::getActivePlugins() as $plugin=>$attrs) {
                 $names[] = $plugin;
             }
            
index 4592fd15a59c266f704927b43402b90b7c217a05..c31c45f62612f8d218f6ef8cfe33a72ad3b94c17 100644 (file)
@@ -24,7 +24,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 require_once INSTALLDIR . '/lib/framework.php';
 
 try {
-    StatusNet::init(@$server, @$path, @$conffile);
+    GNUsocial::init(@$server, @$path, @$conffile);
 } catch (NoConfigException $e) {
     // XXX: Throw a conniption if database not installed
     // XXX: Find a way to use htmlwriter for this instead of handcoded markup
index 72b82e820fa3026a39feae26da52529d513f6e66..5b603ab566d045df6b4ae939cbc62a005106dd4e 100644 (file)
@@ -53,7 +53,7 @@ $default =
               'broughtbyurl' => null,
               'closed' => false,
               'inviteonly' => true,
-              'private' => true,
+              'private' => false,
               'ssl' => 'never',
               'sslserver' => null,
               'dupelimit' => 60, // default for same person saying the same thing
@@ -207,6 +207,9 @@ $default =
         'newuser' =>
         array('default' => null,
               'welcome' => null),
+        'linkify' => array(
+            'bare_domains' => false,  // convert domain.com to <a href="http://domain.com/" ...>domain.com</a> ?
+        ),
         'attachments' =>
         array('server' => null,
               'dir' => INSTALLDIR . '/file/',
@@ -251,6 +254,7 @@ $default =
               'user_quota' => 50000000,
               'monthly_quota' => 15000000,
               'uploads' => true,
+              'filename_base' => 'hash',   // for new files, choose one: 'upload', 'hash'
               'show_html' => false,  // show (filtered) text/html attachments (and oEmbed HTML etc.). Doesn't affect AJAX calls.
               'show_thumbs' => true, // show thumbnails in notice lists for uploaded images, and photos and videos linked remotely that provide oEmbed info
               'process_links' => true, // check linked resources for embeddable photos and videos; this will hit referenced external web sites when processing new messages.
index 1b7fde3cfe686741557ee817a9e70162550fd9e1..316aebb8726304430f411ff8489174d3f9eab660 100644 (file)
@@ -113,7 +113,7 @@ class DocFile
         $paths = array(INSTALLDIR.'/local/doc-src/',
                        INSTALLDIR.'/doc-src/');
 
-        $site = StatusNet::currentSite();
+        $site = GNUsocial::currentSite();
         
         if (!empty($site)) {
             array_unshift($paths, INSTALLDIR.'/local/doc-src/'.$site.'/');
@@ -127,7 +127,7 @@ class DocFile
         $paths = array(INSTALLDIR.'/local/mail-src/',
                        INSTALLDIR.'/mail-src/');
 
-        $site = StatusNet::currentSite();
+        $site = GNUsocial::currentSite();
         
         if (!empty($site)) {
             array_unshift($paths, INSTALLDIR.'/local/mail-src/'.$site.'/');
index e7bdd0570703efc048c2e4b7481e3e9514132ad4..03a1960c620bdc124836e16f276426b2f210185f 100644 (file)
@@ -56,7 +56,7 @@ class ErrorAction extends InfoAction
 
         $this->code = $code;
         $this->message = $message;
-        $this->minimal = StatusNet::isApi();
+        $this->minimal = GNUsocial::isApi();
 
         // XXX: hack alert: usually we aren't going to
         // call this page directly, but because it's
@@ -66,7 +66,7 @@ class ErrorAction extends InfoAction
 
     function showPage()
     {
-        if (StatusNet::isAjax()) {
+        if (GNUsocial::isAjax()) {
             $this->extraHeaders();
             $this->ajaxErrorMsg();
             exit();
index aa52fa361ca570f5605690fdbd0a3712387a719c..e6bb41091e1d6f9f104c0b5f50adfb94b1c0092c 100644 (file)
@@ -139,6 +139,11 @@ class Event {
         return false;
     }
 
+    public static function getHandlers($name)
+    {
+        return Event::$_handlers[$name];
+    }
+
     /**
      * Disables any and all handlers that have been set up so far;
      * use only if you know it's safe to reinitialize all plugins.
index 6e71fea62cbf5773852aa66725772e27192d4cf7..6fe6028f6e229699a1cfbf1152b51a1cf3ccf1ac 100644 (file)
@@ -22,12 +22,12 @@ if (!defined('GNUSOCIAL')) { exit(1); }
 define('GNUSOCIAL_ENGINE', 'GNU social');
 define('GNUSOCIAL_ENGINE_URL', 'https://www.gnu.org/software/social/');
 
-define('GNUSOCIAL_BASE_VERSION', '1.1.3');
-define('GNUSOCIAL_LIFECYCLE', 'release'); // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
+define('GNUSOCIAL_BASE_VERSION', '1.2.0');
+define('GNUSOCIAL_LIFECYCLE', 'dev'); // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
 
 define('GNUSOCIAL_VERSION', GNUSOCIAL_BASE_VERSION . '-' . GNUSOCIAL_LIFECYCLE);
 
-define('GNUSOCIAL_CODENAME', 'The Spanish Invasion');
+define('GNUSOCIAL_CODENAME', 'Not decided yet');
 
 define('AVATAR_PROFILE_SIZE', 96);
 define('AVATAR_STREAM_SIZE', 48);
@@ -97,12 +97,12 @@ require_once(INSTALLDIR.'/lib/plugin.php');
 
 function addPlugin($name, array $attrs=array())
 {
-    return StatusNet::addPlugin($name, $attrs);
+    return GNUsocial::addPlugin($name, $attrs);
 }
 
 function _have_config()
 {
-    return StatusNet::haveConfig();
+    return GNUsocial::haveConfig();
 }
 
 function common_get_temp_dir()
diff --git a/lib/gnusocial.php b/lib/gnusocial.php
new file mode 100644 (file)
index 0000000..08ca6f3
--- /dev/null
@@ -0,0 +1,459 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009-2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+global $config, $_server, $_path;
+
+/**
+ * Global configuration setup and management.
+ */
+class GNUsocial
+{
+    protected static $config_files = array();
+    protected static $have_config;
+    protected static $is_api;
+    protected static $is_ajax;
+    protected static $plugins = array();
+
+    /**
+     * Configure and instantiate a plugin into the current configuration.
+     * Class definitions will be loaded from standard paths if necessary.
+     * Note that initialization events won't be fired until later.
+     *
+     * @param string $name class name & plugin file/subdir name
+     * @param array $attrs key/value pairs of public attributes to set on plugin instance
+     *
+     * @throws ServerException if plugin can't be found
+     */
+    public static function addPlugin($name, array $attrs=array())
+    {
+        $name = ucfirst($name);
+
+        if (isset(self::$plugins[$name])) {
+            // We have already loaded this plugin. Don't try to
+            // do it again with (possibly) different values.
+            // Försten till kvarn får mala.
+            return true;
+        }
+
+        $pluginclass = "{$name}Plugin";
+
+        if (!class_exists($pluginclass)) {
+
+            $files = array("local/plugins/{$pluginclass}.php",
+                           "local/plugins/{$name}/{$pluginclass}.php",
+                           "local/{$pluginclass}.php",
+                           "local/{$name}/{$pluginclass}.php",
+                           "plugins/{$pluginclass}.php",
+                           "plugins/{$name}/{$pluginclass}.php");
+
+            foreach ($files as $file) {
+                $fullpath = INSTALLDIR.'/'.$file;
+                if (@file_exists($fullpath)) {
+                    include_once($fullpath);
+                    break;
+                }
+            }
+            if (!class_exists($pluginclass)) {
+                throw new ServerException("Plugin $name not found.", 500);
+            }
+        }
+
+        // Doesn't this $inst risk being garbage collected or something?
+        // TODO: put into a static array that makes sure $inst isn't lost.
+        $inst = new $pluginclass();
+        foreach ($attrs as $aname => $avalue) {
+            $inst->$aname = $avalue;
+        }
+
+        // Record activated plugins for later display/config dump
+        self::$plugins[$name] = $attrs;
+
+        return true;
+    }
+
+    public static function delPlugin($name)
+    {
+        // Remove our plugin if it was previously loaded
+        $name = ucfirst($name);
+        if (isset(self::$plugins[$name])) {
+            unset(self::$plugins[$name]);
+        }
+
+        // make sure initPlugins will avoid this
+        common_config_set('plugins', 'disable-'.$name, true);
+
+        return true;
+    }
+
+    /**
+     * Get a list of activated plugins in this process.
+     * @return array of (string $name, array $args) pairs
+     */
+    public static function getActivePlugins()
+    {
+        return self::$plugins;
+    }
+
+    /**
+     * Initialize, or re-initialize, GNU social global configuration
+     * and plugins.
+     *
+     * If switching site configurations during script execution, be
+     * careful when working with leftover objects -- global settings
+     * affect many things and they may not behave as you expected.
+     *
+     * @param $server optional web server hostname for picking config
+     * @param $path optional URL path for picking config
+     * @param $conffile optional configuration file path
+     *
+     * @throws NoConfigException if config file can't be found
+     */
+    public static function init($server=null, $path=null, $conffile=null)
+    {
+        Router::clear();
+
+        self::initDefaults($server, $path);
+        self::loadConfigFile($conffile);
+
+        $sprofile = common_config('site', 'profile');
+        if (!empty($sprofile)) {
+            self::loadSiteProfile($sprofile);
+        }
+        // Load settings from database; note we need autoload for this
+        Config::loadSettings();
+
+        self::initPlugins();
+    }
+
+    /**
+     * Get identifier of the currently active site configuration
+     * @return string
+     */
+    public static function currentSite()
+    {
+        return common_config('site', 'nickname');
+    }
+
+    /**
+     * Change site configuration to site specified by nickname,
+     * if set up via Status_network. If not, sites other than
+     * the current will fail horribly.
+     *
+     * May throw exception or trigger a fatal error if the given
+     * site is missing or configured incorrectly.
+     *
+     * @param string $nickname
+     */
+    public static function switchSite($nickname)
+    {
+        if ($nickname == self::currentSite()) {
+            return true;
+        }
+
+        $sn = Status_network::getKV('nickname', $nickname);
+        if (empty($sn)) {
+            return false;
+            throw new Exception("No such site nickname '$nickname'");
+        }
+
+        $server = $sn->getServerName();
+        self::init($server);
+    }
+
+    /**
+     * Pull all local sites from status_network table.
+     *
+     * Behavior undefined if site is not configured via Status_network.
+     *
+     * @return array of nicknames
+     */
+    public static function findAllSites()
+    {
+        $sites = array();
+        $sn = new Status_network();
+        $sn->find();
+        while ($sn->fetch()) {
+            $sites[] = $sn->nickname;
+        }
+        return $sites;
+    }
+
+    /**
+     * Fire initialization events for all instantiated plugins.
+     */
+    protected static function initPlugins()
+    {
+        // User config may have already added some of these plugins, with
+        // maybe configured parameters. The self::addPlugin function will
+        // ignore the new call if it has already been instantiated.
+
+        // Load core plugins
+        foreach (common_config('plugins', 'core') as $name => $params) {
+            call_user_func('self::addPlugin', $name, $params);
+        }
+
+        // Load default plugins
+        foreach (common_config('plugins', 'default') as $name => $params) {
+            $key = 'disable-' . $name;
+            if (common_config('plugins', $key)) {
+                continue;
+            }
+
+            // TODO: We should be able to avoid this is_null and assume $params
+            // is an array, since that's how it is typed in addPlugin
+            if (is_null($params)) {
+                self::addPlugin($name);
+            } else if (is_array($params)) {
+                if (count($params) == 0) {
+                    self::addPlugin($name);
+                } else {
+                    $keys = array_keys($params);
+                    if (is_string($keys[0])) {
+                        self::addPlugin($name, $params);
+                    } else {
+                        foreach ($params as $paramset) {
+                            self::addPlugin($name, $paramset);
+                        }
+                    }
+                }
+            }
+        }
+
+        // XXX: if plugins should check the schema at runtime, do that here.
+        if (common_config('db', 'schemacheck') == 'runtime') {
+            Event::handle('CheckSchema');
+        }
+
+        // Give plugins a chance to initialize in a fully-prepared environment
+        Event::handle('InitializePlugin');
+    }
+
+    /**
+     * Quick-check if configuration has been established.
+     * Useful for functions which may get used partway through
+     * initialization to back off from fancier things.
+     *
+     * @return bool
+     */
+    public static function haveConfig()
+    {
+        return self::$have_config;
+    }
+
+    /**
+     * Returns a list of configuration files that have
+     * been loaded for this instance of GNU social.
+     */
+    public static function configFiles()
+    {
+        return self::$config_files;
+    }
+
+    public static function isApi()
+    {
+        return self::$is_api;
+    }
+
+    public static function setApi($mode)
+    {
+        self::$is_api = $mode;
+    }
+
+    public static function isAjax()
+    {
+        return self::$is_ajax;
+    }
+
+    public static function setAjax($mode)
+    {
+        self::$is_ajax = $mode;
+    }
+
+    /**
+     * Build default configuration array
+     * @return array
+     */
+    protected static function defaultConfig()
+    {
+        global $_server, $_path;
+        require(INSTALLDIR.'/lib/default.php');
+        return $default;
+    }
+
+    /**
+     * Establish default configuration based on given or default server and path
+     * Sets global $_server, $_path, and $config
+     */
+    public static function initDefaults($server, $path)
+    {
+        global $_server, $_path, $config, $_PEAR;
+
+        Event::clearHandlers();
+        self::$plugins = array();
+
+        // try to figure out where we are. $server and $path
+        // can be set by including module, else we guess based
+        // on HTTP info.
+
+        if (isset($server)) {
+            $_server = $server;
+        } else {
+            $_server = array_key_exists('SERVER_NAME', $_SERVER) ?
+              strtolower($_SERVER['SERVER_NAME']) :
+            null;
+        }
+
+        if (isset($path)) {
+            $_path = $path;
+        } else {
+            $_path = (array_key_exists('SERVER_NAME', $_SERVER) && array_key_exists('SCRIPT_NAME', $_SERVER)) ?
+              self::_sn_to_path($_SERVER['SCRIPT_NAME']) :
+            null;
+        }
+
+        // Set config values initially to default values
+        $default = self::defaultConfig();
+        $config = $default;
+
+        // default configuration, overwritten in config.php
+        // Keep DB_DataObject's db config synced to ours...
+
+        $config['db'] = &$_PEAR->getStaticProperty('DB_DataObject','options');
+
+        $config['db'] = $default['db'];
+
+        if (function_exists('date_default_timezone_set')) {
+            /* Work internally in UTC */
+            date_default_timezone_set('UTC');
+        }
+    }
+
+    public static function loadSiteProfile($name)
+    {
+        global $config;
+        $settings = SiteProfile::getSettings($name);
+        $config = array_replace_recursive($config, $settings);
+    }
+
+    protected static function _sn_to_path($sn)
+    {
+        $past_root = substr($sn, 1);
+        $last_slash = strrpos($past_root, '/');
+        if ($last_slash > 0) {
+            $p = substr($past_root, 0, $last_slash);
+        } else {
+            $p = '';
+        }
+        return $p;
+    }
+
+    /**
+     * Load the default or specified configuration file.
+     * Modifies global $config and may establish plugins.
+     *
+     * @throws NoConfigException
+     */
+    protected static function loadConfigFile($conffile=null)
+    {
+        global $_server, $_path, $config;
+
+        // From most general to most specific:
+        // server-wide, then vhost-wide, then for a path,
+        // finally for a dir (usually only need one of the last two).
+
+        if (isset($conffile)) {
+            $config_files = array($conffile);
+        } else {
+            $config_files = array('/etc/statusnet/statusnet.php',
+                                  '/etc/statusnet/laconica.php',
+                                  '/etc/laconica/laconica.php',
+                                  '/etc/statusnet/'.$_server.'.php',
+                                  '/etc/laconica/'.$_server.'.php');
+
+            if (strlen($_path) > 0) {
+                $config_files[] = '/etc/statusnet/'.$_server.'_'.$_path.'.php';
+                $config_files[] = '/etc/laconica/'.$_server.'_'.$_path.'.php';
+            }
+
+            $config_files[] = INSTALLDIR.'/config.php';
+        }
+
+        self::$have_config = false;
+
+        foreach ($config_files as $_config_file) {
+            if (@file_exists($_config_file)) {
+                // Ignore 0-byte config files
+                if (filesize($_config_file) > 0) {
+                    include($_config_file);
+                    self::$config_files[] = $_config_file;
+                    self::$have_config = true;
+                }
+            }
+        }
+
+        if (!self::$have_config) {
+            throw new NoConfigException("No configuration file found.",
+                                        $config_files);
+        }
+
+        // Check for database server; must exist!
+
+        if (empty($config['db']['database'])) {
+            throw new ServerException("No database server for this site.");
+        }
+    }
+
+    /**
+     * Are we running from the web with HTTPS?
+     *
+     * @return boolean true if we're running with HTTPS; else false
+     */
+
+    static function isHTTPS()
+    {
+        // There are some exceptions to this; add them here!
+        if (empty($_SERVER['HTTPS'])) {
+            return false;
+        }
+
+        // If it is _not_ "off", it is on, so "true".
+        return strtolower($_SERVER['HTTPS']) !== 'off';
+    }
+
+    /**
+     * Can we use HTTPS? Then do! Only return false if it's not configured ("never").
+     */
+    static function useHTTPS()
+    {
+        return self::isHTTPS() || common_config('site', 'ssl') != 'never';
+    }
+}
+
+class NoConfigException extends Exception
+{
+    public $configFiles;
+
+    function __construct($msg, $configFiles) {
+        parent::__construct($msg);
+        $this->configFiles = $configFiles;
+    }
+}
index 7dd6ae19a1a1d703af160a6efc1e1032be90e5b0..64212f18aaf3c596d8cbe0dd63b21b719361cb3b 100644 (file)
@@ -49,13 +49,18 @@ class HomeStubNav extends Menu
 {
     function getItems()
     {
-        return array(array('top',
-                           array(),
-                           // TRANS: Menu item in personal group navigation menu.
-                           _m('MENU','Home'),
-                           // TRANS: Menu item title in personal group navigation menu.
-                           // TRANS: %s is a username.
-                           _('Back to top'),
-                           'nav_return_top'));
+        $items = array();
+        if (Event::handle('StartHomeStubNavItems', array($this->action, &$items))) {
+            $items[] = array('top',
+                            array(),
+                            // TRANS: Menu item in personal group navigation menu.
+                            _m('MENU','Home'),
+                            // TRANS: Menu item title in personal group navigation menu.
+                            // TRANS: %s is a username.
+                            _('Back to top'),
+                            'nav_return_top');
+            Event::handle('EndHomeStubNavItems', array($this->action, &$items));
+        }
+        return $items;
     }
 }
index b1aae16fad7a0819b634c4069b60d85837a92c52..9e9dc02e59c02755eb2abd95dbb92a85bc857519 100644 (file)
@@ -386,11 +386,11 @@ class HTMLOutputter extends XMLOutputter
 
                 if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
 
-                    $src = common_path($src, StatusNet::isHTTPS()) . '?version=' . GNUSOCIAL_VERSION;
+                    $src = common_path($src, GNUsocial::isHTTPS()) . '?version=' . GNUSOCIAL_VERSION;
 
                 } else {
 
-                    if (StatusNet::isHTTPS()) {
+                    if (GNUsocial::isHTTPS()) {
 
                         $sslserver = common_config('javascript', 'sslserver');
 
@@ -493,7 +493,7 @@ class HTMLOutputter extends XMLOutputter
                 if(file_exists(Theme::file($src,$theme))){
                    $src = Theme::path($src, $theme);
                 }else{
-                    $src = common_path($src, StatusNet::isHTTPS());
+                    $src = common_path($src, GNUsocial::isHTTPS());
                 }
                 $src.= '?version=' . GNUSOCIAL_VERSION;
             }
index 46402d89d7cc2560defbc476b5c03f6b8e459df5..674ba316eb70a53b2335ba315efaa740367f161e 100644 (file)
@@ -53,10 +53,19 @@ class ImageFile
     var $width;
     var $rotate=0;  // degrees to rotate for properly oriented image (extrapolated from EXIF etc.)
     var $animated = null;  // Animated image? (has more than 1 frame). null means untested
+    var $mimetype = null;   // The _ImageFile_ mimetype, _not_ the originating File object
 
-    function __construct($id=null, $filepath=null, $type=null, $width=null, $height=null)
+    protected $fileRecord = null;
+
+    function __construct($id, $filepath)
     {
         $this->id = $id;
+        if (!empty($this->id)) {
+            $this->fileRecord = File::getKV('id', $this->id);
+            if (!$this->fileRecord instanceof File) {
+                throw new ServerException('Expected File object did not exist.');
+            }
+        }
         $this->filepath = $filepath;
         $this->filename = basename($filepath);
 
@@ -73,9 +82,10 @@ class ImageFile
             throw new UnsupportedMediaException(_('Unsupported image format.'), $this->filepath);
         }
 
-        $this->type = ($info) ? $info[2]:$type;
-        $this->width = ($info) ? $info[0]:$width;
-        $this->height = ($info) ? $info[1]:$height;
+        $this->width    = $info[0];
+        $this->height   = $info[1];
+        $this->type     = $info[2];
+        $this->mimetype = $info['mime'];
 
         if ($this->type == IMAGETYPE_JPEG && function_exists('exif_read_data')) {
             // Orientation value to rotate thumbnails properly
@@ -140,7 +150,7 @@ class ImageFile
     public function getPath()
     {
         if (!file_exists($this->filepath)) {
-            throw new ServerException('No file in ImageFile filepath');
+            throw new FileNotFoundException($this->filepath);
         }
 
         return $this->filepath;
@@ -545,6 +555,73 @@ class ImageFile
         fclose($fh);
         return $count > 1;
     }
+
+    public function getFileThumbnail($width, $height, $crop)
+    {
+        if (!$this->fileRecord instanceof File) {
+            throw new ServerException('No File object attached to this ImageFile object.');
+        }
+
+        if ($width === null) {
+            $width = common_config('thumbnail', 'width');
+            $height = common_config('thumbnail', 'height');
+            $crop = common_config('thumbnail', 'crop');
+        }
+
+        if ($height === null) {
+            $height = $width;
+            $crop = true;
+        }
+
+        // Get proper aspect ratio width and height before lookup
+        // We have to do it through an ImageFile object because of orientation etc.
+        // Only other solution would've been to rotate + rewrite uploaded files
+        // which we don't want to do because we like original, untouched data!
+        list($width, $height, $x, $y, $w, $h) = $this->scaleToFit($width, $height, $crop);
+
+        $thumb = File_thumbnail::pkeyGet(array(
+                                            'file_id'=> $this->fileRecord->id,
+                                            'width'  => $width,
+                                            'height' => $height,
+                                        ));
+        if ($thumb instanceof File_thumbnail) {
+            return $thumb;
+        }
+
+        $filename = $this->fileRecord->filehash ?: $this->filename;    // Remote files don't have $this->filehash
+        $extension = File::guessMimeExtension($this->mimetype);
+        $outname = "thumb-{$this->fileRecord->id}-{$width}x{$height}-{$filename}." . $extension;
+        $outpath = File_thumbnail::path($outname);
+
+        // The boundary box for our resizing
+        $box = array('width'=>$width, 'height'=>$height,
+                     'x'=>$x,         'y'=>$y,
+                     'w'=>$w,         'h'=>$h);
+
+        // Doublecheck that parameters are sane and integers.
+        if ($box['width'] < 1 || $box['width'] > common_config('thumbnail', 'maxsize')
+                || $box['height'] < 1 || $box['height'] > common_config('thumbnail', 'maxsize')
+                || $box['w'] < 1 || $box['x'] >= $this->width
+                || $box['h'] < 1 || $box['y'] >= $this->height) {
+            // Fail on bad width parameter. If this occurs, it's due to algorithm in ImageFile->scaleToFit
+            common_debug("Boundary box parameters for resize of {$this->filepath} : ".var_export($box,true));
+            throw new ServerException('Bad thumbnail size parameters.');
+        }
+
+        common_debug(sprintf('Generating a thumbnail of File id==%u of size %ux%u', $this->fileRecord->id, $width, $height));
+
+        // Perform resize and store into file
+        $this->resizeTo($outpath, $box);
+
+        // Avoid deleting the original
+        if ($this->getPath() != File_thumbnail::path($this->filename)) {
+            $this->unlink();
+        }
+        return File_thumbnail::saveThumbnail($this->fileRecord->id,
+                                      File_thumbnail::url($outname),
+                                      $width, $height,
+                                      $outname);
+    }
 }
 
 //PHP doesn't (as of 2/24/2010) have an imagecreatefrombmp so conditionally define one
index 9a167618f7db42e8b4069ee759f32e39859833c2..bfb56021682c09e0466296f17eab2d469b60fd8b 100644 (file)
@@ -101,7 +101,7 @@ abstract class Installer
             $pass = false;
         }
 
-        $reqs = array('gd', 'curl', 'json',
+        $reqs = array('gd', 'curl', 'intl', 'json',
                       'xmlwriter', 'mbstring', 'xml', 'dom', 'simplexml');
 
         foreach ($reqs as $req) {
@@ -516,9 +516,9 @@ abstract class Installer
         if ($this->adminEmail) {
             $data['email'] = $this->adminEmail;
         }
-        $user = User::register($data);
-
-        if (empty($user)) {
+        try {
+            $user = User::register($data);
+        } catch (Exception $e) {
             return false;
         }
 
@@ -554,7 +554,7 @@ abstract class Installer
         }
 
         require_once INSTALLDIR . '/lib/framework.php';
-        StatusNet::initDefaults($this->server, $this->path);
+        GNUsocial::initDefaults($this->server, $this->path);
 
         if ($this->siteProfile == "singleuser") {
             // Until we use ['site']['profile']==='singleuser' everywhere
index 3bbbd162f0c18985d7cfc6238ab2b2d39854d8a5..bcc8662f56f6e632895806794b6fcdacc7f387cf 100644 (file)
@@ -42,12 +42,13 @@ class MediaFile
     var $short_fileurl = null;
     var $mimetype      = null;
 
-    function __construct(Profile $scoped, $filename = null, $mimetype = null)
+    function __construct(Profile $scoped, $filename = null, $mimetype = null, $filehash = null)
     {
         $this->scoped = $scoped;
 
         $this->filename   = $filename;
         $this->mimetype   = $mimetype;
+        $this->filehash   = $filehash;
         $this->fileRecord = $this->storeFile();
 
         $this->fileurl = common_local_url('attachment',
@@ -90,16 +91,40 @@ class MediaFile
 
     protected function storeFile()
     {
+        $filepath       = File::path($this->filename);
+        if (!empty($this->filename) && $this->filehash === null) {
+            // Calculate if we have an older upload method somewhere (Qvitter) that
+            // doesn't do this before calling new MediaFile on its local files...
+            $this->filehash = hash_file(File::FILEHASH_ALG, $filepath);
+            if ($this->filehash === false) {
+                throw new ServerException('Could not read file for hashing');
+            }
+        }
+
+        try {
+            $file = File::getByHash($this->filehash);
+            // We're done here. Yes. Already. We assume sha256 won't collide on us anytime soon.
+            return $file;
+        } catch (NoResultException $e) {
+            // Well, let's just continue below.
+        }
+
+        $fileurl = File::url($this->filename);
 
         $file = new File;
 
         $file->filename = $this->filename;
-        $file->url      = File::url($this->filename);
-        $filepath       = File::path($this->filename);
+        $file->urlhash  = File::hashurl($fileurl);
+        $file->url      = $fileurl;
+        $file->filehash = $this->filehash;
         $file->size     = filesize($filepath);
+        if ($file->size === false) {
+            throw new ServerException('Could not read file to get its size');
+        }
         $file->date     = time();
         $file->mimetype = $this->mimetype;
 
+
         $file_id = $file->insert();
 
         if ($file_id===false) {
@@ -139,10 +164,11 @@ class MediaFile
 
     function maybeAddRedir($file_id, $url)
     {
-        $file_redir = File_redirection::getKV('url', $url);
-
-        if (!$file_redir instanceof File_redirection) {
+        try {
+            $file_redir = File_redirection::getByUrl($url);
+        } catch (NoResultException $e) {
             $file_redir = new File_redirection;
+            $file_redir->urlhash = File::hashurl($url);
             $file_redir->url = $url;
             $file_redir->file_id = $file_id;
 
@@ -203,49 +229,86 @@ class MediaFile
                 throw new ClientException(_('System error uploading file.'));
         }
 
-        // Throws exception if additional size does not respect quota
-        File::respectsQuota($scoped, $_FILES[$param]['size']);
+        // TODO: Make documentation clearer that this won't work for files >2GiB because
+        //       PHP is stupid in its 32bit head. But noone accepts 2GiB files with PHP
+        //       anyway... I hope.
+        $filehash = hash_file(File::FILEHASH_ALG, $_FILES[$param]['tmp_name']);
 
-        $mimetype = self::getUploadedMimeType($_FILES[$param]['tmp_name'],
-                $_FILES[$param]['name']);
+        try {
+            $file = File::getByHash($filehash);
+            // If no exception is thrown the file exists locally, so we'll use that and just add redirections.
+            $filename = $file->filename;
+            $mimetype = $file->mimetype;
+
+        } catch (NoResultException $e) {
+            // We have to save the upload as a new local file. This is the normal course of action.
 
-        $basename = basename($_FILES[$param]['name']);
-        $filename = File::filename($scoped, $basename, $mimetype);
-        $filepath = File::path($filename);
+            // Throws exception if additional size does not respect quota
+            // This test is only needed, of course, if we're uploading something new.
+            File::respectsQuota($scoped, $_FILES[$param]['size']);
 
-        $result = move_uploaded_file($_FILES[$param]['tmp_name'], $filepath);
+            $mimetype = self::getUploadedMimeType($_FILES[$param]['tmp_name'], $_FILES[$param]['name']);
 
-        if (!$result) {
-            // TRANS: Client exception thrown when a file upload operation fails because the file could
-            // TRANS: not be moved from the temporary folder to the permanent file location.
-            throw new ClientException(_('File could not be moved to destination directory.'));
+            switch (common_config('attachments', 'filename_base')) {
+            case 'upload':
+                $basename = basename($_FILES[$param]['name']);
+                $filename = File::filename($scoped, $basename, $mimetype);
+                break;
+            case 'hash':
+            default:
+                $filename = strtolower($filehash) . '.' . File::guessMimeExtension($mimetype); 
+            }
+            $filepath = File::path($filename);
+
+            $result = move_uploaded_file($_FILES[$param]['tmp_name'], $filepath);
+
+            if (!$result) {
+                // TRANS: Client exception thrown when a file upload operation fails because the file could
+                // TRANS: not be moved from the temporary folder to the permanent file location.
+                throw new ClientException(_('File could not be moved to destination directory.'));
+            }
         }
 
-        return new MediaFile($scoped, $filename, $mimetype);
+        return new MediaFile($scoped, $filename, $mimetype, $filehash);
     }
 
     static function fromFilehandle($fh, Profile $scoped) {
-
         $stream = stream_get_meta_data($fh);
+        // So far we're only handling filehandles originating from tmpfile(),
+        // so we can always do hash_file on $stream['uri'] as far as I can tell!
+        $filehash = hash_file(File::FILEHASH_ALG, $stream['uri']);
 
-        File::respectsQuota($scoped, filesize($stream['uri']));
-
-        $mimetype = self::getUploadedMimeType($stream['uri']);
-
-        $filename = File::filename($scoped, "email", $mimetype);
-
-        $filepath = File::path($filename);
+        try {
+            $file = File::getByHash($filehash);
+            // Already have it, so let's reuse the locally stored File
+            $filename = $file->filename;
+            $mimetype = $file->mimetype;
+        } catch (NoResultException $e) {
+            File::respectsQuota($scoped, filesize($stream['uri']));
+
+            $mimetype = self::getUploadedMimeType($stream['uri']);
+
+            switch (common_config('attachments', 'filename_base')) {
+            case 'upload':
+                $filename = File::filename($scoped, "email", $mimetype);
+                break;
+            case 'hash':
+            default:
+                $filename = strtolower($filehash) . '.' . File::guessMimeExtension($mimetype);
+            }
+            $filepath = File::path($filename);
 
-        $result = copy($stream['uri'], $filepath) && chmod($filepath, 0664);
+            $result = copy($stream['uri'], $filepath) && chmod($filepath, 0664);
 
-        if (!$result) {
-            // TRANS: Client exception thrown when a file upload operation fails because the file could
-            // TRANS: not be moved from the temporary folder to the permanent file location.
-            throw new ClientException(_('File could not be moved to destination directory.' .
-                $stream['uri'] . ' ' . $filepath));
+            if (!$result) {
+                // TRANS: Client exception thrown when a file upload operation fails because the file could
+                // TRANS: not be moved from the temporary folder to the permanent file location.
+                throw new ClientException(_('File could not be moved to destination directory.' .
+                    $stream['uri'] . ' ' . $filepath));
+            }
         }
 
-        return new MediaFile($scoped, $filename, $mimetype);
+        return new MediaFile($scoped, $filename, $mimetype, $filehash);
     }
 
     /**
index b9dfb88c7327570bfb8dac300aaa84cb686cf5c3..f0f797fe3257b609fa771d630667624b5b2e5989 100644 (file)
@@ -160,9 +160,12 @@ class Menu extends Widget
 
     function submenu($label, $menu)
     {
-        $this->action->elementStart('li');
-        $this->action->element('h3', null, $label);
-        $menu->show();
-        $this->action->elementEnd('li');
+        if (Event::handle('StartSubMenu', array($this->action, $menu, $label))) {
+            $this->action->elementStart('li');
+            $this->action->element('h3', null, $label);
+            $menu->show();
+            $this->action->elementEnd('li');
+            Event::handle('EndSubMenu', array($this->action, $menu, $label));
+        }
     }
 }
index 435ba4e3a95f57f3ca0ba314db4fb483d0ca0b83..f1fc0f46ecd5c600fa12c4d4e128387288718ac1 100644 (file)
@@ -271,7 +271,7 @@ class MysqlSchema extends Schema
     function endCreateTable($name, array $def)
     {
         $engine = $this->preferredEngine($def);
-        return ") ENGINE=$engine CHARACTER SET utf8 COLLATE utf8_bin";
+        return ") ENGINE=$engine CHARACTER SET utf8mb4 COLLATE utf8mb4_bin";
     }
     
     function preferredEngine($def)
@@ -335,9 +335,10 @@ class MysqlSchema extends Schema
         if (strtolower($oldProps['ENGINE']) != strtolower($engine)) {
             $phrase[] = "ENGINE=$engine";
         }
-        if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8_bin') {
-            $phrase[] = 'DEFAULT CHARSET=utf8';
-            $phrase[] = 'COLLATE=utf8_bin';
+        if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8mb4_bin') {
+            $phrase[] = 'CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin';
+            $phrase[] = 'DEFAULT CHARACTER SET = utf8mb4';
+            $phrase[] = 'DEFAULT COLLATE = utf8mb4_bin';
         }
     }
 
index c8bf2c312d51d87ed891ee28d80cdd80da94a550..4063699b6d52746d389a6b3a97d0a5de06881080 100644 (file)
@@ -157,8 +157,8 @@ class NoticeListItem extends Widget
     {
         $this->elementStart('footer');
         $this->showNoticeInfo();
-        if ($this->attachments) { $this->showNoticeAttachments(); }
         if ($this->options) { $this->showNoticeOptions(); }
+        if ($this->attachments) { $this->showNoticeAttachments(); }
         $this->elementEnd('footer');
     }
 
index c43faef5575fa5904456b83813afda42ec9c0f7c..9427827eda04c3b6c4d06aba3038d05a9f637e4e 100644 (file)
@@ -196,7 +196,7 @@ class Plugin
 
     static function staticPath($plugin, $relative)
     {
-        $isHTTPS = StatusNet::isHTTPS();
+        $isHTTPS = GNUsocial::isHTTPS();
 
         if ($isHTTPS) {
             $server = common_config('plugins', 'sslserver');
index dfaad06358f3021f2e063389b85ea22ccc1a7d9c..3c75dfa6e49f5e244a8d9bbe4c92628ccec6b0eb 100644 (file)
@@ -89,7 +89,7 @@ class Rss10Action extends Action
             if (!isset($_SERVER['PHP_AUTH_USER'])) {
 
                 // This header makes basic auth go
-                header('WWW-Authenticate: Basic realm="StatusNet RSS"');
+                header('WWW-Authenticate: Basic realm="GNU social RSS"');
 
                 // If the user hits cancel -- bam!
                 $this->show_basic_auth_error();
index d336135464a54c6ff083411f5ee12056334f416a..03892970c5d3794b68a793d3c3c21141daf3d5cf 100644 (file)
@@ -28,9 +28,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 class SchemaUpdater
 {
@@ -46,6 +44,11 @@ class SchemaUpdater
      */
     public function register($tableName, array $tableDef)
     {
+        // Check if the table we're registering is related to a Managed_DataObject
+        if (is_a(ucfirst($tableName), 'Managed_DataObject', true)) {
+            call_user_func("{$tableName}::beforeSchemaUpdate");
+        }
+
         $this->tables[$tableName] = $tableDef;
     }
 
index 844a15c339d10cc8ab363ef296c366ccba1c5963..0ab869ab182a37d3d64ec353172a7e1dcbc81a7f 100644 (file)
 <?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009-2010 StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
 
-global $config, $_server, $_path;
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
- * Global configuration setup and management.
+ * Backwards compatible class for plugins for GNU social <1.2
+ * and thus only have the class StatusNet defined.
  */
 class StatusNet
 {
-    protected static $have_config;
-    protected static $is_api;
-    protected static $is_ajax;
-    protected static $plugins = array();
-
-    /**
-     * Configure and instantiate a plugin into the current configuration.
-     * Class definitions will be loaded from standard paths if necessary.
-     * Note that initialization events won't be fired until later.
-     *
-     * @param string $name class name & plugin file/subdir name
-     * @param array $attrs key/value pairs of public attributes to set on plugin instance
-     *
-     * @throws ServerException if plugin can't be found
-     */
-    public static function addPlugin($name, array $attrs=array())
-    {
-        $name = ucfirst($name);
-
-        if (isset(self::$plugins[$name])) {
-            // We have already loaded this plugin. Don't try to
-            // do it again with (possibly) different values.
-            // Försten till kvarn får mala.
-            return true;
-        }
-
-        $pluginclass = "{$name}Plugin";
-
-        if (!class_exists($pluginclass)) {
-
-            $files = array("local/plugins/{$pluginclass}.php",
-                           "local/plugins/{$name}/{$pluginclass}.php",
-                           "local/{$pluginclass}.php",
-                           "local/{$name}/{$pluginclass}.php",
-                           "plugins/{$pluginclass}.php",
-                           "plugins/{$name}/{$pluginclass}.php");
-
-            foreach ($files as $file) {
-                $fullpath = INSTALLDIR.'/'.$file;
-                if (@file_exists($fullpath)) {
-                    include_once($fullpath);
-                    break;
-                }
-            }
-            if (!class_exists($pluginclass)) {
-                throw new ServerException("Plugin $name not found.", 500);
-            }
-        }
-
-        // Doesn't this $inst risk being garbage collected or something?
-        // TODO: put into a static array that makes sure $inst isn't lost.
-        $inst = new $pluginclass();
-        foreach ($attrs as $aname => $avalue) {
-            $inst->$aname = $avalue;
-        }
-
-        // Record activated plugins for later display/config dump
-        self::$plugins[$name] = $attrs;
-
-        return true;
-    }
-
-    public static function delPlugin($name)
-    {
-        // Remove our plugin if it was previously loaded
-        $name = ucfirst($name);
-        if (isset(self::$plugins[$name])) {
-            unset(self::$plugins[$name]);
-        }
-
-        // make sure initPlugins will avoid this
-        common_config_set('plugins', 'disable-'.$name, true);
-
-        return true;
-    }
-
-    /**
-     * Get a list of activated plugins in this process.
-     * @return array of (string $name, array $args) pairs
-     */
     public static function getActivePlugins()
     {
-        return self::$plugins;
-    }
-
-    /**
-     * Initialize, or re-initialize, StatusNet global configuration
-     * and plugins.
-     *
-     * If switching site configurations during script execution, be
-     * careful when working with leftover objects -- global settings
-     * affect many things and they may not behave as you expected.
-     *
-     * @param $server optional web server hostname for picking config
-     * @param $path optional URL path for picking config
-     * @param $conffile optional configuration file path
-     *
-     * @throws NoConfigException if config file can't be found
-     */
-    public static function init($server=null, $path=null, $conffile=null)
-    {
-        Router::clear();
-
-        self::initDefaults($server, $path);
-        self::loadConfigFile($conffile);
-
-        $sprofile = common_config('site', 'profile');
-        if (!empty($sprofile)) {
-            self::loadSiteProfile($sprofile);
-        }
-        // Load settings from database; note we need autoload for this
-        Config::loadSettings();
-
-        self::initPlugins();
-    }
-
-    /**
-     * Get identifier of the currently active site configuration
-     * @return string
-     */
-    public static function currentSite()
-    {
-        return common_config('site', 'nickname');
-    }
-
-    /**
-     * Change site configuration to site specified by nickname,
-     * if set up via Status_network. If not, sites other than
-     * the current will fail horribly.
-     *
-     * May throw exception or trigger a fatal error if the given
-     * site is missing or configured incorrectly.
-     *
-     * @param string $nickname
-     */
-    public static function switchSite($nickname)
-    {
-        if ($nickname == StatusNet::currentSite()) {
-            return true;
-        }
-
-        $sn = Status_network::getKV('nickname', $nickname);
-        if (empty($sn)) {
-            return false;
-            throw new Exception("No such site nickname '$nickname'");
-        }
-
-        $server = $sn->getServerName();
-        StatusNet::init($server);
-    }
-
-    /**
-     * Pull all local sites from status_network table.
-     *
-     * Behavior undefined if site is not configured via Status_network.
-     *
-     * @return array of nicknames
-     */
-    public static function findAllSites()
-    {
-        $sites = array();
-        $sn = new Status_network();
-        $sn->find();
-        while ($sn->fetch()) {
-            $sites[] = $sn->nickname;
-        }
-        return $sites;
-    }
-
-    /**
-     * Fire initialization events for all instantiated plugins.
-     */
-    protected static function initPlugins()
-    {
-        // User config may have already added some of these plugins, with
-        // maybe configured parameters. The self::addPlugin function will
-        // ignore the new call if it has already been instantiated.
-
-        // Load core plugins
-        foreach (common_config('plugins', 'core') as $name => $params) {
-            call_user_func('self::addPlugin', $name, $params);
-        }
-
-        // Load default plugins
-        foreach (common_config('plugins', 'default') as $name => $params) {
-            $key = 'disable-' . $name;
-            if (common_config('plugins', $key)) {
-                continue;
-            }
-
-            // TODO: We should be able to avoid this is_null and assume $params
-            // is an array, since that's how it is typed in addPlugin
-            if (is_null($params)) {
-                self::addPlugin($name);
-            } else if (is_array($params)) {
-                if (count($params) == 0) {
-                    self::addPlugin($name);
-                } else {
-                    $keys = array_keys($params);
-                    if (is_string($keys[0])) {
-                        self::addPlugin($name, $params);
-                    } else {
-                        foreach ($params as $paramset) {
-                            self::addPlugin($name, $paramset);
-                        }
-                    }
-                }
-            }
-        }
-
-        // XXX: if plugins should check the schema at runtime, do that here.
-        if (common_config('db', 'schemacheck') == 'runtime') {
-            Event::handle('CheckSchema');
-        }
-
-        // Give plugins a chance to initialize in a fully-prepared environment
-        Event::handle('InitializePlugin');
-    }
-
-    /**
-     * Quick-check if configuration has been established.
-     * Useful for functions which may get used partway through
-     * initialization to back off from fancier things.
-     *
-     * @return bool
-     */
-    public static function haveConfig()
-    {
-        return self::$have_config;
-    }
-
-    public static function isApi()
-    {
-        return self::$is_api;
+        return GNUsocial::getActivePlugins();
     }
 
-    public static function setApi($mode)
+    public static function isHTTPS()
     {
-        self::$is_api = $mode;
-    }
-
-    public static function isAjax()
-    {
-        return self::$is_ajax;
-    }
-
-    public static function setAjax($mode)
-    {
-        self::$is_ajax = $mode;
-    }
-
-    /**
-     * Build default configuration array
-     * @return array
-     */
-    protected static function defaultConfig()
-    {
-        global $_server, $_path;
-        require(INSTALLDIR.'/lib/default.php');
-        return $default;
-    }
-
-    /**
-     * Establish default configuration based on given or default server and path
-     * Sets global $_server, $_path, and $config
-     */
-    public static function initDefaults($server, $path)
-    {
-        global $_server, $_path, $config, $_PEAR;
-
-        Event::clearHandlers();
-        self::$plugins = array();
-
-        // try to figure out where we are. $server and $path
-        // can be set by including module, else we guess based
-        // on HTTP info.
-
-        if (isset($server)) {
-            $_server = $server;
-        } else {
-            $_server = array_key_exists('SERVER_NAME', $_SERVER) ?
-              strtolower($_SERVER['SERVER_NAME']) :
-            null;
-        }
-
-        if (isset($path)) {
-            $_path = $path;
-        } else {
-            $_path = (array_key_exists('SERVER_NAME', $_SERVER) && array_key_exists('SCRIPT_NAME', $_SERVER)) ?
-              self::_sn_to_path($_SERVER['SCRIPT_NAME']) :
-            null;
-        }
-
-        // Set config values initially to default values
-        $default = self::defaultConfig();
-        $config = $default;
-
-        // default configuration, overwritten in config.php
-        // Keep DB_DataObject's db config synced to ours...
-
-        $config['db'] = &$_PEAR->getStaticProperty('DB_DataObject','options');
-
-        $config['db'] = $default['db'];
-
-        if (function_exists('date_default_timezone_set')) {
-            /* Work internally in UTC */
-            date_default_timezone_set('UTC');
-        }
-    }
-
-    public static function loadSiteProfile($name)
-    {
-        global $config;
-        $settings = SiteProfile::getSettings($name);
-        $config = array_replace_recursive($config, $settings);
-    }
-
-    protected static function _sn_to_path($sn)
-    {
-        $past_root = substr($sn, 1);
-        $last_slash = strrpos($past_root, '/');
-        if ($last_slash > 0) {
-            $p = substr($past_root, 0, $last_slash);
-        } else {
-            $p = '';
-        }
-        return $p;
-    }
-
-    /**
-     * Load the default or specified configuration file.
-     * Modifies global $config and may establish plugins.
-     *
-     * @throws NoConfigException
-     */
-    protected static function loadConfigFile($conffile=null)
-    {
-        global $_server, $_path, $config;
-
-        // From most general to most specific:
-        // server-wide, then vhost-wide, then for a path,
-        // finally for a dir (usually only need one of the last two).
-
-        if (isset($conffile)) {
-            $config_files = array($conffile);
-        } else {
-            $config_files = array('/etc/statusnet/statusnet.php',
-                                  '/etc/statusnet/laconica.php',
-                                  '/etc/laconica/laconica.php',
-                                  '/etc/statusnet/'.$_server.'.php',
-                                  '/etc/laconica/'.$_server.'.php');
-
-            if (strlen($_path) > 0) {
-                $config_files[] = '/etc/statusnet/'.$_server.'_'.$_path.'.php';
-                $config_files[] = '/etc/laconica/'.$_server.'_'.$_path.'.php';
-            }
-
-            $config_files[] = INSTALLDIR.'/config.php';
-        }
-
-        self::$have_config = false;
-
-        foreach ($config_files as $_config_file) {
-            if (@file_exists($_config_file)) {
-                // Ignore 0-byte config files
-                if (filesize($_config_file) > 0) {
-                    common_log(LOG_INFO, "Including config file: " . $_config_file);
-                    include($_config_file);
-                    self::$have_config = true;
-                }
-            }
-        }
-
-        if (!self::$have_config) {
-            throw new NoConfigException("No configuration file found.",
-                                        $config_files);
-        }
-
-        // Check for database server; must exist!
-
-        if (empty($config['db']['database'])) {
-            throw new ServerException("No database server for this site.");
-        }
-    }
-
-    /**
-     * Are we running from the web with HTTPS?
-     *
-     * @return boolean true if we're running with HTTPS; else false
-     */
-
-    static function isHTTPS()
-    {
-        // There are some exceptions to this; add them here!
-        if (empty($_SERVER['HTTPS'])) {
-            return false;
-        }
-
-        // If it is _not_ "off", it is on, so "true".
-        return strtolower($_SERVER['HTTPS']) !== 'off';
-    }
-
-    /**
-     * Can we use HTTPS? Then do! Only return false if it's not configured ("never").
-     */
-    static function useHTTPS()
-    {
-        return self::isHTTPS() || common_config('site', 'ssl') != 'never';
-    }
-}
-
-class NoConfigException extends Exception
-{
-    public $configFiles;
-
-    function __construct($msg, $configFiles) {
-        parent::__construct($msg);
-        $this->configFiles = $configFiles;
+        return GNUsocial::isHTTPS();
     }
 }
index 25a8e2a27ebaef546bfa6ea7017c83dd7583a709..4084470e211f9cc0c656c18512f637bf6cd48e19 100644 (file)
@@ -638,9 +638,9 @@ class StompQueueManager extends QueueManager
      */
     function switchSite($site)
     {
-        if ($site != StatusNet::currentSite()) {
+        if ($site != GNUsocial::currentSite()) {
             $this->stats('switch');
-            StatusNet::switchSite($site);
+            GNUsocial::switchSite($site);
             $this->initialize();
         }
     }
@@ -683,7 +683,7 @@ class StompQueueManager extends QueueManager
     protected function queueName($queue)
     {
         $group = $this->queueGroup($queue);
-        $site = StatusNet::currentSite();
+        $site = GNUsocial::currentSite();
 
         $specs = array("$group/$queue/$site",
                        "$group/$queue");
index fbcbbe052a3934eaad47fdd94d28ed15f1506dfd..ef7290de2398ea2cdb973f3dea636f3831424a34 100644 (file)
@@ -130,7 +130,7 @@ class Theme
      */
     protected function relativeThemePath($group, $fallbackSubdir, $name)
     {
-        if (StatusNet::isHTTPS()) {
+        if (GNUsocial::isHTTPS()) {
             $sslserver = common_config($group, 'sslserver');
 
             if (empty($sslserver)) {
index 22962325778f3f09ab28575007f637f995d91b01..35848c167bfd1ae36c56d6df7ae897e5cd9b3e77 100644 (file)
@@ -576,6 +576,25 @@ function common_canonical_email($email)
     return $email;
 }
 
+function common_purify($html)
+{
+    require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+
+    $config = array('safe' => 1,
+                    'deny_attribute' => 'id,style,on*');
+
+    $html = common_remove_unicode_formatting($html);
+
+    return htmLawed($html, $config);
+}
+
+function common_remove_unicode_formatting($text)
+{
+    // Strip Unicode text formatting/direction codes
+    // this is pretty dangerous for visualisation of text and can be used for mischief
+    return preg_replace('/[\\x{200b}-\\x{200f}\\x{202a}-\\x{202e}]/u', '', $text);
+}
+
 /**
  * Partial notice markup rendering step: build links to !group references.
  *
@@ -585,9 +604,9 @@ function common_canonical_email($email)
  */
 function common_render_content($text, Notice $notice)
 {
-    $r = common_render_text($text);
-    $r = common_linkify_mentions($r, $notice);
-    return $r;
+    $text = common_render_text($text);
+    $text = common_linkify_mentions($text, $notice);
+    return $text;
 }
 
 /**
@@ -829,14 +848,15 @@ function common_find_mentions_raw($text)
 
 function common_render_text($text)
 {
-    $r = nl2br(htmlspecialchars($text));
+    $text = common_remove_unicode_formatting($text);
+    $text = nl2br(htmlspecialchars($text));
 
-    $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
-    $r = common_replace_urls_callback($r, 'common_linkify');
-    $r = preg_replace_callback('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/u',
-                function ($m) { return "{$m[1]}#".common_tag_link($m[2]); }, $r);
+    $text = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $text);
+    $text = common_replace_urls_callback($text, 'common_linkify');
+    $text = preg_replace_callback('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/u',
+                function ($m) { return "{$m[1]}#".common_tag_link($m[2]); }, $text);
     // XXX: machine tags
-    return $r;
+    return $text;
 }
 
 /**
@@ -870,12 +890,15 @@ function common_replace_urls_callback($text, $callback, $arg = null) {
             '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4
             '|(?:'. //IPv6
                 '\[?(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}(?:(?:[0-9A-Fa-f]{1,4})|:))|(?:(?:[0-9A-Fa-f]{1,4}:){6}(?::|(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(?::[0-9A-Fa-f]{1,4})))|(?:(?:[0-9A-Fa-f]{1,4}:){5}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){4}(?::[0-9A-Fa-f]{1,4}){0,1}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){3}(?::[0-9A-Fa-f]{1,4}){0,2}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){2}(?::[0-9A-Fa-f]{1,4}){0,3}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:)(?::[0-9A-Fa-f]{1,4}){0,4}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?::(?::[0-9A-Fa-f]{1,4}){0,5}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))\]?(?<!:)'.
-            ')|(?:'. //DNS
-                '(?:[\pN\pL\-\_\+\%\~]+(?:\:[\pN\pL\-\_\+\%\~]+)?\@)?'. //user:pass@
-                '[\pN\pL\-\_]+(?:\.[\pN\pL\-\_]+)*\.'.
-                //tld list from http://data.iana.org/TLD/tlds-alpha-by-domain.txt, also added local, loc, and onion
-                '(?:AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN--0ZWM56D|测试|XN--11B5BS3A9AJ6G|परीक्षा|XN--80AKHBYKNJ4F|испытание|XN--9T4B11YI5A|테스트|XN--DEBA0AD|טעסט|XN--G6W251D|測試|XN--HGBK6AJ7F53BBA|آزمایشی|XN--HLCJ6AYA9ESC7A|பரிட்சை|XN--JXALPDLP|δοκιμή|XN--KGBECHTV|إختبار|XN--ZCKZAH|テスト|YE|YT|YU|ZA|ZM|ZONE|ZW|local|loc|onion)'.
-            ')(?![\pN\pL\-\_])'.
+            ')'.
+            (common_config('linkify', 'bare_domains')
+                ? '|(?:'. //DNS
+                    '(?:[\pN\pL\-\_\+\%\~]+(?:\:[\pN\pL\-\_\+\%\~]+)?\@)?'. //user:pass@
+                    '[\pN\pL\-\_]+(?:\.[\pN\pL\-\_]+)*\.'.
+                    //tld list from http://data.iana.org/TLD/tlds-alpha-by-domain.txt, also added local, loc, and onion
+                    '(?:AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN--0ZWM56D|测试|XN--11B5BS3A9AJ6G|परीक्षा|XN--80AKHBYKNJ4F|испытание|XN--9T4B11YI5A|테스트|XN--DEBA0AD|טעסט|XN--G6W251D|測試|XN--HGBK6AJ7F53BBA|آزمایشی|XN--HLCJ6AYA9ESC7A|பரிட்சை|XN--JXALPDLP|δοκιμή|XN--KGBECHTV|إختبار|XN--ZCKZAH|テスト|YE|YT|YU|ZA|ZM|ZONE|ZW|local|loc|onion)'.
+            ')(?![\pN\pL\-\_])'
+                : '') . // if common_config('linkify', 'bare_domains') is false, don't add anything here
         ')'.
         '(?:'.
             '(?:\:\d+)?'. //:port
@@ -1116,6 +1139,27 @@ function common_xml_safe_str($str)
     return preg_replace('/[\p{Cc}\p{Cs}]/u', '*', $str);
 }
 
+function common_slugify($str)
+{
+    // php5-intl is highly recommended...
+    if (!function_exists('transliterator_transliterate')) {
+        $str = preg_replace('/[^\pL\pN]/u', '', $str);
+        $str = mb_convert_case($str, MB_CASE_LOWER, 'UTF-8');
+        $str = substr($str, 0, 64);
+        return $str;
+    }
+    $str = transliterator_transliterate(
+                        'Any-Latin;' .      // any charset to latin compatible
+                            'NFD;' .        // decompose
+                            '[:Nonspacing Mark:] Remove;' . // remove nonspacing marks (accents etc.)
+                            'NFC;' .        // composite again
+                            '[:Punctuation:] Remove;' . // remove punctuation (.,¿? etc.)
+                            'Lower();' .    // turn into lowercase
+                            'Latin-ASCII;',  // get ASCII equivalents (ð to d for example)
+                        $str);
+    return preg_replace('/[^\pL\pN]/', '', $str);
+}
+
 function common_tag_link($tag)
 {
     $canonical = common_canonical_tag($tag);
@@ -1139,11 +1183,9 @@ function common_tag_link($tag)
 
 function common_canonical_tag($tag)
 {
-  // only alphanum
-  $tag = preg_replace('/[^\pL\pN]/u', '', $tag);
-  $tag = mb_convert_case($tag, MB_CASE_LOWER, "UTF-8");
-  $tag = substr($tag, 0, 64);
-  return $tag;
+    $tag = common_slugify($tag);
+    $tag = substr($tag, 0, 64);
+    return $tag;
 }
 
 function common_valid_profile_tag($str)
@@ -1218,7 +1260,7 @@ function common_local_url($action, $args=null, $params=null, $fragment=null, $ad
         $path = $r->build($action, $args, $params, $fragment);
 
         $ssl = common_config('site', 'ssl') === 'always'
-                || StatusNet::isHTTPS()
+                || GNUsocial::isHTTPS()
                 || common_is_sensitive($action);
 
         if (common_config('site','fancy')) {
@@ -1262,7 +1304,7 @@ function common_path($relative, $ssl=false, $addSession=true)
     $pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
 
     if (($ssl && (common_config('site', 'ssl') === 'sometimes'))
-        || StatusNet::isHTTPS()
+        || GNUsocial::isHTTPS()
         || common_config('site', 'ssl') === 'always') {
         $proto = 'https';
         if (is_string(common_config('site', 'sslserver')) &&
index 481b2dedcabc8b80c3185ea12a61d976d38c1b61..71d57e2d56647afad12e413dda029a912c6e19bc 100644 (file)
@@ -212,7 +212,7 @@ class XMLOutputter
     {
         static $empty_tag = array('base', 'meta', 'link', 'hr',
                                   'br', 'param', 'img', 'area',
-                                  'input', 'col');
+                                  'input', 'col', 'source');
         // XXX: check namespace
         if (in_array($tag, $empty_tag)) {
             $this->xw->endElement();
diff --git a/plugins/APC/locale/APC.pot b/plugins/APC/locale/APC.pot
deleted file mode 100644 (file)
index f1bfc29..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Plugin description.
-#: APCPlugin.php:113
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
diff --git a/plugins/APC/locale/ast/LC_MESSAGES/APC.po b/plugins/APC/locale/ast/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 7782c92..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Asturian (asturianu)
-# Exported from translatewiki.net
-#
-# Author: Xuacu
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Language-Team: Asturian <https://translatewiki.net/wiki/Portal:ast>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ast\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Usar la caché variable <a href=\"http://pecl.php.net/package/apc\">APC</a> "
-"pa cachear los resultaos de la consulta."
diff --git a/plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po b/plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 008562f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Belarusian (Taraškievica orthography) (‪беларуская (тарашкевіца)‬)
-# Exported from translatewiki.net
-#
-# Author: EugeneZelenko
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Language-Team: Belarusian (Taraškievica orthography) <https://translatewiki."
-"net/wiki/Portal:be-tarask>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: be-tarask\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Выкарыстоўваць кэш зьменных <a href=\"http://pecl.php.net/package/apc\">APC</"
-"a> для захаваньня вынікаў запытаў."
diff --git a/plugins/APC/locale/br/LC_MESSAGES/APC.po b/plugins/APC/locale/br/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index f34f343..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Breton (brezhoneg)
-# Exported from translatewiki.net
-#
-# Author: Fulup
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Language-Team: Breton <https://translatewiki.net/wiki/Portal:br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Ober gant an <a href=\"http://pecl.php.net/package/apc\">APC</a> grubuilh "
-"kemm-digemm evit krubuilhañ disoc'hoù ar rekedoù."
diff --git a/plugins/APC/locale/de/LC_MESSAGES/APC.po b/plugins/APC/locale/de/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index f04f6fd..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Fujnky
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Benutze den <a href=\"http://pecl.php.net/package/apc\">APC-</a>Variablen-"
-"Cache um Anfragenergebnisse zwischenzuspeichern."
diff --git a/plugins/APC/locale/es/LC_MESSAGES/APC.po b/plugins/APC/locale/es/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 0629217..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Translationista
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Usa el caché de variable <a href=\"http://pecl.php.net/package/apc\">APC</a> "
-"para copiar en caché los resultados de consulta."
diff --git a/plugins/APC/locale/eu/LC_MESSAGES/APC.po b/plugins/APC/locale/eu/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 10ef3d5..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - APC to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:37+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Erabili <a href=\"http://pecl.php.net/package/apc\">APC</a> aldagairen "
-"katxea kontsultako emaitzak katxean kopiatzeko."
diff --git a/plugins/APC/locale/fr/LC_MESSAGES/APC.po b/plugins/APC/locale/fr/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index ae38195..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to French (français)
-# Exported from translatewiki.net
-#
-# Author: Verdy p
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Utilisez le cache variable <a href=\"http://pecl.php.net/package/apc\">APC</"
-"a> pour mettre en cache les résultats de requêtes."
diff --git a/plugins/APC/locale/gl/LC_MESSAGES/APC.po b/plugins/APC/locale/gl/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index d818134..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Use a caché variable <a href=\"http://pecl.php.net/package/apc\">APC</a> "
-"para memorizar os resultados da pescuda."
diff --git a/plugins/APC/locale/he/LC_MESSAGES/APC.po b/plugins/APC/locale/he/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index ed0603c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Hebrew (עברית)
-# Exported from translatewiki.net
-#
-# Author: YaronSh
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Hebrew <https://translatewiki.net/wiki/Portal:he>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"שימוש במטמון המשתנים <a href=\"http://pecl.php.net/package/apc\">APC</a> כדי "
-"לשמור תוצאות לשאילתות במטמון."
diff --git a/plugins/APC/locale/ia/LC_MESSAGES/APC.po b/plugins/APC/locale/ia/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 0e54c48..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Usar le cache de variabiles <a href=\"http://pecl.php.net/package/apc\">APC</"
-"a> pro immagazinar le resultatos de consultas."
diff --git a/plugins/APC/locale/id/LC_MESSAGES/APC.po b/plugins/APC/locale/id/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 3a03574..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Indonesian (Bahasa Indonesia)
-# Exported from translatewiki.net
-#
-# Author: Farras
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Indonesian <https://translatewiki.net/wiki/Portal:id>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: id\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Gunakan singgahan variabel <a href=\"http://pecl.php.net/package/apc\">APC</"
-"a> untuk menyinggah hasil pencarian."
diff --git a/plugins/APC/locale/it/LC_MESSAGES/APC.po b/plugins/APC/locale/it/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index da7bfc1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - APC to Italian (italiano)
-# Exported from translatewiki.net
-#
-# Author: Ximo17
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Utilizzare la cache variabile <a href=\"http://pecl.php.net/package/apc"
-"\">APC</a> per i risultati della query cache."
diff --git a/plugins/APC/locale/mk/LC_MESSAGES/APC.po b/plugins/APC/locale/mk/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index a146ba7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Користи променлив кеш <a href=\"http://pecl.php.net/package/apc\">APC</a> за "
-"кеширање на резултати од барања."
diff --git a/plugins/APC/locale/ms/LC_MESSAGES/APC.po b/plugins/APC/locale/ms/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index c020f23..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Malay <https://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Gunakan cache pembolehubah <a href=\"http://pecl.php.net/package/apc\">APC</"
-"a> untuk meng-cache-kan hasil pertanyaan."
diff --git a/plugins/APC/locale/nb/LC_MESSAGES/APC.po b/plugins/APC/locale/nb/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 8196b42..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Norwegian Bokmål (‪norsk (bokmål)‬)
-# Exported from translatewiki.net
-#
-# Author: Nghtwlkr
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Norwegian Bokmål <https://translatewiki.net/wiki/Portal:nb>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nb\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Bruk <a href=\"http://pecl.php.net/package/apc\">APC</a>-"
-"variabelhurtiglagring til å hurtiglagre søkeresultat."
diff --git a/plugins/APC/locale/nl/LC_MESSAGES/APC.po b/plugins/APC/locale/nl/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 6676ef1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:38+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"De variabelencache <a href=\"http://pecl.php.net/package/apc\">APC</a> "
-"gebruiken om resultaten van zoekopdrachten te cachen."
diff --git a/plugins/APC/locale/pl/LC_MESSAGES/APC.po b/plugins/APC/locale/pl/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 4d04370..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Polish (polski)
-# Exported from translatewiki.net
-#
-# Author: Sp5uhe
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Polish <https://translatewiki.net/wiki/Portal:pl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pl\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
-"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Korzystaj z <a href=\"http://pecl.php.net/package/apc\">APC</a> pamięci "
-"podręcznej zmiennych do przechowywania wyników zapytań."
diff --git a/plugins/APC/locale/pt/LC_MESSAGES/APC.po b/plugins/APC/locale/pt/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 2a639cf..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Portuguese (português)
-# Exported from translatewiki.net
-#
-# Author: Waldir
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Usar o <a href=\"http://pecl.php.net/package/apc\">APC</a> para armazenar "
-"resultados de consultas em cache."
diff --git a/plugins/APC/locale/pt_BR/LC_MESSAGES/APC.po b/plugins/APC/locale/pt_BR/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index b029a0a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Brazilian Portuguese (português do Brasil)
-# Exported from translatewiki.net
-#
-# Author: Giro720
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Brazilian Portuguese <https://translatewiki.net/wiki/Portal:"
-"pt-br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt-br\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Usar o <a href=\"http://pecl.php.net/package/apc\">APC</a> para armazenar "
-"resultados de consultas em cache."
diff --git a/plugins/APC/locale/ru/LC_MESSAGES/APC.po b/plugins/APC/locale/ru/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 3a67e1b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Russian (русский)
-# Exported from translatewiki.net
-#
-# Author: Александр Сигачёв
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Использование кеша переменных <a href=\"http://pecl.php.net/package/apc"
-"\">APC</a> для хранения результатов запросов."
diff --git a/plugins/APC/locale/tl/LC_MESSAGES/APC.po b/plugins/APC/locale/tl/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 2ade223..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - APC to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Gamitin ang pabagubagong taguan ng <a href=\"http://pecl.php.net/package/apc"
-"\">APC</a> upang ikubli ang resulta ng pagtatanong."
diff --git a/plugins/APC/locale/uk/LC_MESSAGES/APC.po b/plugins/APC/locale/uk/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 18b70e4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"Використання <a href=\"http://pecl.php.net/package/apc\">APC</a> для "
-"різноманітних запитів до кешу."
diff --git a/plugins/APC/locale/zh_CN/LC_MESSAGES/APC.po b/plugins/APC/locale/zh_CN/LC_MESSAGES/APC.po
deleted file mode 100644 (file)
index 34b06cd..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - APC to Simplified Chinese (‪中文(简体)‬)
-# Exported from translatewiki.net
-#
-# Author: Chenxiaoqino
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - APC\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:39+0000\n"
-"Language-Team: Simplified Chinese <https://translatewiki.net/wiki/Portal:zh-"
-"hans>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:40+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: zh-hans\n"
-"X-Message-Group: #out-statusnet-plugin-apc\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
-"to cache query results."
-msgstr ""
-"使用 <a href=\"http://pecl.php.net/package/apc\">APC</a> 变量缓存来缓存查询结"
-"果。"
diff --git a/plugins/Adsense/actions/adsenseadminpanel.php b/plugins/Adsense/actions/adsenseadminpanel.php
deleted file mode 100644 (file)
index 8a5c0cf..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Adsense administration panel
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Adsense
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Administer adsense settings
- *
- * @category Adsense
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class AdsenseadminpanelAction extends AdminPanelAction
-{
-    /**
-     * Returns the page title
-     *
-     * @return string page title
-     */
-    function title()
-    {
-        // TRANS: Title of AdSense administrator panel.
-        return _m('TITLE', 'AdSense');
-    }
-
-    /**
-     * Instructions for using this form.
-     *
-     * @return string instructions
-     */
-    function getInstructions()
-    {
-        // TRANS: Instructions for AdSense administrator panel.
-        return _m('AdSense settings for this StatusNet site');
-    }
-
-    /**
-     * Show the site admin panel form
-     *
-     * @return void
-     */
-    function showForm()
-    {
-        $form = new AdsenseAdminPanelForm($this);
-        $form->show();
-        return;
-    }
-
-    /**
-     * Save settings from the form
-     *
-     * @return void
-     */
-    function saveSettings()
-    {
-        static $settings = array('adsense' => array('adScript', 'client', 'mediumRectangle', 'rectangle', 'leaderboard', 'wideSkyscraper'));
-
-        $values = array();
-
-        foreach ($settings as $section => $parts) {
-            foreach ($parts as $setting) {
-                $values[$section][$setting] = $this->trimmed($setting);
-            }
-        }
-
-        // This throws an exception on validation errors
-        $this->validate($values);
-
-        // assert(all values are valid);
-        $config = new Config();
-
-        $config->query('BEGIN');
-
-        foreach ($settings as $section => $parts) {
-            foreach ($parts as $setting) {
-                Config::save($section, $setting, $values[$section][$setting]);
-            }
-        }
-
-        $config->query('COMMIT');
-
-        return;
-    }
-
-    function validate(&$values)
-    {
-    }
-}
-
-/**
- * Form for the adsense admin panel
- */
-class AdsenseAdminPanelForm extends AdminForm
-{
-    /**
-     * ID of the form
-     *
-     * @return int ID of the form
-     */
-    function id()
-    {
-        return 'form_adsense_admin_panel';
-    }
-
-    /**
-     * class of the form
-     *
-     * @return string class of the form
-     */
-    function formClass()
-    {
-        return 'form_adsense';
-    }
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-    function action()
-    {
-        return common_local_url('adsenseadminpanel');
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-    function formData()
-    {
-        $this->out->elementStart('fieldset', array('id' => 'adsense_admin'));
-        $this->out->elementStart('ul', 'form_data');
-        $this->li();
-        $this->input('client',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Client ID'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Google client ID.'),
-                     'adsense');
-        $this->unli();
-        $this->li();
-        $this->input('adScript',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Ad script URL'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Script URL (advanced).'),
-                     'adsense');
-        $this->unli();
-        $this->li();
-        $this->input('mediumRectangle',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Medium rectangle'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Medium rectangle slot code.'),
-                     'adsense');
-        $this->unli();
-        $this->li();
-        $this->input('rectangle',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Rectangle'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Rectangle slot code.'),
-                     'adsense');
-        $this->unli();
-        $this->li();
-        $this->input('leaderboard',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Leaderboard'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Leaderboard slot code.'),
-                     'adsense');
-        $this->unli();
-        $this->li();
-        $this->input('wideSkyscraper',
-                     // TRANS: Field label in AdSense administration panel.
-                     _m('Skyscraper'),
-                     // TRANS: Field title in AdSense administration panel.
-                     _m('Wide skyscraper slot code.'),
-                     'adsense');
-        $this->unli();
-        $this->out->elementEnd('ul');
-    }
-
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-    function formActions()
-    {
-        // TRANS: Button text to save settings in AdSense administration panel.
-        $this->out->submit('submit', _m('BUTTON','Save'),
-        // TRANS: Button title to save settings in AdSense administration panel.
-        'submit', null, _m('Save AdSense settings.'));
-    }
-}
diff --git a/plugins/Adsense/locale/Adsense.pot b/plugins/Adsense/locale/Adsense.pot
deleted file mode 100644 (file)
index 059633a..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Menu item title/tooltip
-#: AdsensePlugin.php:194
-msgid "AdSense configuration"
-msgstr ""
-
-#. TRANS: Menu item for site administration
-#: AdsensePlugin.php:196
-msgctxt "MENU"
-msgid "AdSense"
-msgstr ""
-
-#. TRANS: Plugin description.
-#: AdsensePlugin.php:210
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#. TRANS: Title of AdSense administrator panel.
-#: adsenseadminpanel.php:53
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr ""
-
-#. TRANS: Instructions for AdSense administrator panel.
-#: adsenseadminpanel.php:64
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:167
-msgid "Client ID"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:169
-msgid "Google client ID."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:175
-msgid "Ad script URL"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:177
-msgid "Script URL (advanced)."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:183
-msgid "Medium rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:185
-msgid "Medium rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:191
-msgid "Rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:193
-msgid "Rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:199
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:201
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-#: adsenseadminpanel.php:207
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#: adsenseadminpanel.php:209
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#: adsenseadminpanel.php:223
-msgctxt "BUTTON"
-msgid "Save"
-msgstr ""
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#: adsenseadminpanel.php:225
-msgid "Save AdSense settings."
-msgstr ""
diff --git a/plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 7e25c7e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# Translation of StatusNet - Adsense to Belarusian (Taraškievica orthography) (‪беларуская (тарашкевіца)‬)
-# Exported from translatewiki.net
-#
-# Author: EugeneZelenko
-# Author: Jim-by
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Belarusian (Taraškievica orthography) <https://translatewiki."
-"net/wiki/Portal:be-tarask>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: be-tarask\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Устаноўкі AdSense"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Дапаўненьне для даданьня Google AdSense на сайты StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Устаноўкі AdSense для гэтага сайта StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Ідэнтыфікатар кліента"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "Ідэнтыфікатар кліента Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL-адрас скрыпта рэклямы"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "URL-адрас скрыпта (палепшаная ўстаноўка)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Сярэдні прамавугольнік"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "Слот-код сярэдняга прамавугольніка"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Прамавугольнік"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "Слот-код прамавугольніка"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Дошка гонару"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Leaderboard slot code."
-msgstr "Слот-код дошкі гонару"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Хмарачос"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Wide skyscraper slot code."
-msgstr "Слот-код хмарачосу"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Захаваць"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#, fuzzy
-msgid "Save AdSense settings."
-msgstr "Захаваць устаноўкі AdSense"
diff --git a/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index f26af60..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-# Translation of StatusNet - Adsense to Breton (brezhoneg)
-# Exported from translatewiki.net
-#
-# Author: Y-M D
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Breton <https://translatewiki.net/wiki/Portal:br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Kefluniadur AdSense"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plugin evit ouzhpennañ Google AdSense da lec'hiennoù StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Arventennoù Adsense evit al lec'hienn StatusNet-mañ."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID an arval"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "ID an arval Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL ar skript kemenn"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "URL ar skript (araokaet)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Skouergornek etre"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "Kod lakaet en ur skouergornek etre"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Skouergornek"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "Kod lakaet er skouergornek"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Panell an urzhiadoù"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Leaderboard slot code."
-msgstr "Kod lakaet e panell an urzhiadoù"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Giton a-serzh"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Wide skyscraper slot code."
-msgstr "Kod lakaet en ur giton ledan a-serzh"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Enrollañ"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#, fuzzy
-msgid "Save AdSense settings."
-msgstr "Enrollañ arventennoù AdSense"
diff --git a/plugins/Adsense/locale/ca/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ca/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 602471f..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Catalan (català)
-# Exported from translatewiki.net
-#
-# Author: Toniher
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuració de l'AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-"Connector per afegir el Google AdSense a llocs web basats en StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Paràmetres de l'AdSense per a aquest lloc basat en StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID del client"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID del client de Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL de l'script de l'anunci"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL de l'script (avançat)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rectangle mitjà"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Codi de ranura del rectangle mitjà"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectangle"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Codi de ranura del rectangle"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Desa"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Desa els paràmetres de l'AdSense."
diff --git a/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 446abce..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# Translation of StatusNet - Adsense to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Fujnky
-# Author: Giftpflanze
-# Author: MF-Warburg
-# Author: Marcel083
-# Author: Michael
-# Author: The Evil IP address
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense-Konfiguration"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plugin, das Google AdSense auf StatusNet-Websites hinzufügt."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense-Einstellungen dieser StatusNet-Website"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Client-ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google-Client-ID"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Skript-URL"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "Skript-URL (erweitert)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Mittleres Rechteck"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Slotcode des mittleren Rechtecks."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rechteck"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Rectangle-Slot-Code."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Rangliste"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Slotcode der Rangliste."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Hochhaus"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Slotcode des weiten Hochhauses."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Speichern"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "AdSense-Einstellungen speichern"
diff --git a/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 20f3e6e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# Translation of StatusNet - Adsense to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Armando-Martin
-# Author: Erchache2000
-# Author: Translationista
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuración de \"AdSense\""
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Extensión para añadir Google AdSense a sitios StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "configuración de AdSense para este sitio StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID de cliente"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID de cliente de Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL del script del anuncio"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL del script (avanzado)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rectángulo mediano"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Código de espacio de rectángulo mediano"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectángulo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Código de espacio de rectángulo"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Clasificación"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Código colocado en el panel de comandos"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Banderola rascacielos"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Código colocado en rectángulo (''banner'') vertical ancho"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Guardar"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Guardar configuración de AdSense."
diff --git a/plugins/Adsense/locale/eu/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/eu/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 883700a..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# Author: Unai Fdz. de Betoño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Basque <https://translatewiki.net/wiki/Portal:eu>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: eu\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense konfigurazioa"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Google Adsense Statusnet guneetara gehitzeko plugina."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense aukerak StatusNet gune hontarako"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID bezeroa"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google bezero IDa."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Gehitu scriptaren URLa"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "Scriptaren URLa (aurreratua)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Laukizuzen ertaina"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Lauki ertaineko kodea."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Laukizuzena"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Laukiko kodea."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Sailkapena"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Sailkapeneko kodea."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Lauki bertikala"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Lauki bertikaleko kodea."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gorde"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Gorde AdSense aukerak."
diff --git a/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 5b7e4c5..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# Translation of StatusNet - Adsense to French (français)
-# Exported from translatewiki.net
-#
-# Author: Brunoperel
-# Author: Iketsi
-# Author: Od1n
-# Author: Peter17
-# Author: Verdy p
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuration d’AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Greffon pour ajouter Google AdSense aux sites StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Paramètres AdSense pour ce site StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Identifiant du client"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID client Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Adresse URL du script d’annonce"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL du script (avancé)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rectangle moyen"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Code placé dans un rectangle moyen"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectangle"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Codé placé dans le rectangle"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Panneau de commande"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Code placé dans le panneau de commande"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Bannière verticale"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Code placé dans une bannière verticale large"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Sauvegarder"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Sauvegarder les paramètres AdSense."
diff --git a/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index a054ca8..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuración de AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Complemento para engadir Google AdSense aos sitios de StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Configuración de AdSense para este sitio StatusNet."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Identificación do cliente"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Identificación do cliente de Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Enderezo URL da escritura do anuncio"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "Enderezo URL da escritura (avanzado)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rectángulo mediano"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Código disposto no rectángulo mediano."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectángulo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Código disposto no rectángulo."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Taboleiro de logros"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Código disposto no taboleiro de logros."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Rañaceos"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Código disposto no rañaceos."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gardar"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Gardar a configuración de AdSense."
diff --git a/plugins/Adsense/locale/he/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/he/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index e636877..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Hebrew (עברית)
-# Expored from translatewiki.net
-#
-# Author: YaronSh
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-15 00:20+0000\n"
-"PO-Revision-Date: 2011-01-15 00:23:05+0000\n"
-"Language-Team: Hebrew <http://translatewiki.net/wiki/Portal:he>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-01-14 13:18:25+0000\n"
-"X-Generator: MediaWiki 1.18alpha (r80364); Translate extension (2010-09-17)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-#: AdsensePlugin.php:194
-msgid "AdSense configuration"
-msgstr "תצורת AdSense"
-
-#. TRANS: Menu item for site administration
-#: AdsensePlugin.php:196
-msgid "AdSense"
-msgstr ""
-
-#: AdsensePlugin.php:209
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#: adsenseadminpanel.php:52
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr ""
-
-#: adsenseadminpanel.php:62
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#: adsenseadminpanel.php:164
-msgid "Client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:165
-msgid "Google client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:170
-msgid "Ad script URL"
-msgstr ""
-
-#: adsenseadminpanel.php:171
-msgid "Script URL (advanced)"
-msgstr ""
-
-#: adsenseadminpanel.php:176
-msgid "Medium rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:177
-msgid "Medium rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:182
-msgid "Rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:183
-msgid "Rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:188
-msgid "Leaderboard"
-msgstr ""
-
-#: adsenseadminpanel.php:189
-msgid "Leaderboard slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:194
-msgid "Skyscraper"
-msgstr "גורד שחקים"
-
-#: adsenseadminpanel.php:195
-msgid "Wide skyscraper slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:208
-msgid "Save"
-msgstr "שמירה"
-
-#: adsenseadminpanel.php:208
-msgid "Save AdSense settings"
-msgstr ""
diff --git a/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index a0f7d9e..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:31+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuration de AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plug-in pro adder Google AdSense a sitos StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Configuration de AdSense pro iste sito StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID de cliente"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID de cliente Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL del script de publicitate"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL del script (avantiate)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rectangulo medie"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Codice pro interstitio a rectangulo medie."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectangulo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Codice pro interstitio a rectangulo."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Bandiera large"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Codice pro interstitio a bandiera large."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Grattacelo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Codice pro interstitio a grattacelo large."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salveguardar"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Salveguardar configurationes de AdSense."
diff --git a/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 97187bd..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# Translation of StatusNet - Adsense to Italian (italiano)
-# Exported from translatewiki.net
-#
-# Author: Milocasagrande
-# Author: Od1n
-# Author: Rippitippi
-# Author: Ximo17
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Italian <https://translatewiki.net/wiki/Portal:it>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: it\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configurazione AdSene"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plugin per aggiungere Google AdSense ai siti StatusNet"
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Impostazioni AdSense per questo sito StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID client"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Codice utente Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL script Ad"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL script (avanzato)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Rettangolo medio"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Rettangolo medio"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rettangolo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Codice di apertura del rettangolo."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Classifica"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Codice di apertura della bacheca principale."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Banner"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Codice di apertura del banner esteso."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salva"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Salva le impostazioni di AdSense."
diff --git a/plugins/Adsense/locale/ja/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ja/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index f8e243f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# Translation of StatusNet - Adsense to Japanese (日本語)
-# Exported from translatewiki.net
-#
-# Author: Miwa ka
-# Author: Shirayuki
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense の設定"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "クライアント ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google のクライアント ID です。"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "保存"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "AdSense 設定を保存する"
diff --git a/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 38fa7a5..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# Translation of StatusNet - Adsense to Georgian (ქართული)
-# Exported from translatewiki.net
-#
-# Author: Zaal
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Georgian <https://translatewiki.net/wiki/Portal:ka>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ka\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense კონფიგურაცია"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense პარამეტრები ამ საიტისათვის."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "კლიენტის ID"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "Google კლიენტის ID"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "სარეკლამო სკრიპტის URL"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "სკრიპტის URL (გაფართოებული)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "საშუალო მართკუთხედი"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "საშუალო მართკუთხედი"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "მართკუთხედი"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "მართკუთხედი"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr ""
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr ""
diff --git a/plugins/Adsense/locale/lb/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/lb/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 8126640..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Luxembourgish (Lëtzebuergesch)
-# Expored from translatewiki.net
-#
-# Author: Robby
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-14 10:29+0000\n"
-"PO-Revision-Date: 2011-01-14 10:32:40+0000\n"
-"Language-Team: Luxembourgish <http://translatewiki.net/wiki/Portal:lb>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-01-10 18:25:56+0000\n"
-"X-Generator: MediaWiki 1.18alpha (r80246); Translate extension (2010-09-17)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: lb\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-#: AdsensePlugin.php:194
-msgid "AdSense configuration"
-msgstr "AdSense Astellungen"
-
-#. TRANS: Menu item for site administration
-#: AdsensePlugin.php:196
-msgid "AdSense"
-msgstr ""
-
-#: AdsensePlugin.php:209
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#: adsenseadminpanel.php:52
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr ""
-
-#: adsenseadminpanel.php:62
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#: adsenseadminpanel.php:164
-msgid "Client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:165
-msgid "Google client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:170
-msgid "Ad script URL"
-msgstr ""
-
-#: adsenseadminpanel.php:171
-msgid "Script URL (advanced)"
-msgstr ""
-
-#: adsenseadminpanel.php:176
-msgid "Medium rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:177
-msgid "Medium rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:182
-msgid "Rectangle"
-msgstr "Rechteck"
-
-#: adsenseadminpanel.php:183
-msgid "Rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:188
-msgid "Leaderboard"
-msgstr ""
-
-#: adsenseadminpanel.php:189
-msgid "Leaderboard slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:194
-msgid "Skyscraper"
-msgstr "Vertikale Banner"
-
-#: adsenseadminpanel.php:195
-msgid "Wide skyscraper slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:208
-msgid "Save"
-msgstr "Späicheren"
-
-#: adsenseadminpanel.php:208
-msgid "Save AdSense settings"
-msgstr "AdSense-Astellunge späicheren"
diff --git a/plugins/Adsense/locale/lt/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/lt/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index eb6c6b1..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Lithuanian (lietuvių)
-# Exported from translatewiki.net
-#
-# Author: Eitvys200
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Lithuanian <https://translatewiki.net/wiki/Portal:lt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: lt\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense konfigūracija"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Įskiepiai Google AdSense pridėjimui į StatusNet svetaines."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense nustatymui šiai StatusNet svetainei"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Kliento ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google kliento ID."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Išsaugoti"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Išsaugoti AdSense nustatymus."
diff --git a/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 4fd523f..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Нагодувања на AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Приклучок за додавање на Google AdSense во мреж. места со StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Поставки на AdSense за ова мрежно место со StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID на клиент"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Назнака на Google-клиент."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL на рекламната скрипта"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL на скриптата (напредно)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Среден правоаголник"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Код на жлебот на средниот правоаголник."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Правоаголник"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Код на жлебот на правоаголникот."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Табла на предводници"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Код на жлебот на таблата на предводници."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Облакодер"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Код на жлебот на широкиот облакодер."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Зачувај"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Зачувај нагодувања на AdSense."
diff --git a/plugins/Adsense/locale/ms/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ms/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index bf7e0ce..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Malay <https://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Konfigurasi AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Pemalam untuk menambahkan Google AdSense pada tapak StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Tetapan pengguna untuk tapak StatusNet ini"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID Klien"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID klien Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL skrip iklan"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL Skrip (termaju)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Medium rectangle"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Kod slot segi Medium rectangle."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rectangle"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Kod slot Rectangle."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Leaderboard"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Kod slot Leaderboard."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Skyscraper"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Kod slot Wide skyscraper."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Simpan"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Simpan tetapan AdSense."
diff --git a/plugins/Adsense/locale/nb/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/nb/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 3a6b923..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Norwegian Bokmål (‪norsk (bokmål)‬)
-# Exported from translatewiki.net
-#
-# Author: Nghtwlkr
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Norwegian Bokmål <https://translatewiki.net/wiki/Portal:nb>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nb\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense-konfigurasjon"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Utvidelse for å legge til Google AdSense til StatusNet-nettsteder."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense-innstillinger for dette StatusNet-nettstedet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Klient-ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google klient-ID."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Lagre"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Lagre AdSense-innstillinger."
diff --git a/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index f08fe05..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense-instellingen"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plug-in om Google AdSense toe te voegen aan Statusnetsites."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense-instellingen voor deze StatusNet-website"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Client-ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr ".Google client-ID."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL voor advertentiescript"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL voor script (gevorderd)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Middelgrote rechthoek"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Slotcode voor gemiddelde rechthoek."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rechthoek"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Slotcode voor rechthoek."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Breedbeeldbanner"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Slotcode voor breedbeeldbanner."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Skyscraper"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Slotcode voor brede skyscraper."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Opslaan"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "AdSense-instellingen opslaan."
diff --git a/plugins/Adsense/locale/pl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/pl/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 9dcd7a9..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Polish (Polski)
-# Expored from translatewiki.net
-#
-# Author: Raven
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-15 00:20+0000\n"
-"PO-Revision-Date: 2011-01-15 00:23:05+0000\n"
-"Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-01-14 13:18:25+0000\n"
-"X-Generator: MediaWiki 1.18alpha (r80364); Translate extension (2010-09-17)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: pl\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
-"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Menu item title/tooltip
-#: AdsensePlugin.php:194
-msgid "AdSense configuration"
-msgstr ""
-
-#. TRANS: Menu item for site administration
-#: AdsensePlugin.php:196
-msgid "AdSense"
-msgstr "AdSense"
-
-#: AdsensePlugin.php:209
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#: adsenseadminpanel.php:52
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#: adsenseadminpanel.php:62
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#: adsenseadminpanel.php:164
-msgid "Client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:165
-msgid "Google client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:170
-msgid "Ad script URL"
-msgstr ""
-
-#: adsenseadminpanel.php:171
-msgid "Script URL (advanced)"
-msgstr ""
-
-#: adsenseadminpanel.php:176
-msgid "Medium rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:177
-msgid "Medium rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:182
-msgid "Rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:183
-msgid "Rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:188
-msgid "Leaderboard"
-msgstr ""
-
-#: adsenseadminpanel.php:189
-msgid "Leaderboard slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:194
-msgid "Skyscraper"
-msgstr "Skyscraper"
-
-#: adsenseadminpanel.php:195
-msgid "Wide skyscraper slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:208
-msgid "Save"
-msgstr ""
-
-#: adsenseadminpanel.php:208
-msgid "Save AdSense settings"
-msgstr ""
diff --git a/plugins/Adsense/locale/pt/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/pt/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 0d8b9cd..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# Translation of StatusNet - Adsense to Portuguese (português)
-# Exported from translatewiki.net
-#
-# Author: Waldir
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:32+0000\n"
-"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuração do AdSense"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plugin para adicionar Google AdSense aos sites StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Configurações do AdSense para este site StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Identificação do cliente"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "ID de cliente Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL do script do anúncio"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "URL do script (avançado)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Retângulo médio"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "Retângulo médio"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Retângulo"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "Retângulo"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr ""
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr ""
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gravar"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#, fuzzy
-msgid "Save AdSense settings."
-msgstr "Gravar as configurações do AdSense"
diff --git a/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 658e7f0..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# Translation of StatusNet - Adsense to Brazilian Portuguese (português do Brasil)
-# Exported from translatewiki.net
-#
-# Author: Giro720
-# Author: Luckas Blade
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Brazilian Portuguese <https://translatewiki.net/wiki/Portal:"
-"pt-br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt-br\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Configuração do AdSense"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Plugin para adicionar Google AdSense aos sites StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Configurações do AdSense para este site StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Identificação do cliente"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "ID de cliente Google"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL do script do anúncio"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "URL do script (avançado)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Retângulo médio"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "Código colocado dentro de um retângulo médio."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Retângulo"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "Código colocado dentro de um retângulo."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Classificação"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Leaderboard slot code."
-msgstr "Classificação"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr ""
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Wide skyscraper slot code."
-msgstr "Código colocado dentro de um retângulo."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salvar"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#, fuzzy
-msgid "Save AdSense settings."
-msgstr "Salvar as configurações do AdSense"
diff --git a/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index f25d752..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# Translation of StatusNet - Adsense to Russian (русский)
-# Exported from translatewiki.net
-#
-# Author: Eleferen
-# Author: Lockal
-# Author: Сrower
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Конфигурация AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Плагин для добавления Google AdSense на сайты StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Настройки AdSense для этого сайта StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID клиента"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Идентификатор клиента Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL-адрес скрипта рекламы"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL-адрес скрипта (расширенная настройка)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Средний прямоугольник"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "Слот-код среднего прямоугольника"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Прямоугольник"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "Слот-код прямоугольника"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Доска лидеров"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Leaderboard slot code."
-msgstr "Слот-код доски лидеров"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Небоскреб"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Wide skyscraper slot code."
-msgstr "Слот-код широкого небоскреба"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Сохранить"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Сохранить настройки AdSense."
diff --git a/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index e670f59..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Swedish (svenska)
-# Exported from translatewiki.net
-#
-# Author: Jamminjohn
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Swedish <https://translatewiki.net/wiki/Portal:sv>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: sv\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Konfiguration av AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-"Insticksmodul för att lägga till Google AdSense på StatusNet-webbplatser."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "AdSense-inställningar för denna StatusNet-webbplats"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "Klient-ID"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Google klient-ID."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Skript-URL för annons"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "Skript-URL (avancerat)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Medium rektangel"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Platskod för mellanstor rektangel."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Rektangel"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Platskod för rektangel."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Leaderboard"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Platskod för leaderboard."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Skyskrapa"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Platskod för bred skyskrapa."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Spara"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Spara inställningar för AdSense."
diff --git a/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index e153c2b..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Pagkakaayos ng AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-"Pampasak upang maidagdag ang AdSense ng Google sa mga sityo ng StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Mga katakdaan ng Adsense para sa sityong ito ng StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ID ng kliyente"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "ID ng kliyente ng Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "URL ng panitik ng anunsyo"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL ng panitik (mas masulong)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Hindi kalakihang parihaba"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Kodigo ng puwang na hindi kalakihang parihaba."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Parihaba"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Kodigo ng puwang na parihaba."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Pangunahing-pisara"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Kodigo ng puwang ng pangunahing-pisara."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Tukud-langit"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Kodigo ng puwang ng maluwang na tukud-langit."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Sagipin"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Sagipin ang mga katakdaan ng AdSense."
diff --git a/plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 277dcf2..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# Translation of StatusNet - Adsense to Turkish (Türkçe)
-# Expored from translatewiki.net
-#
-# Author: Maidis
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-16 15:08+0000\n"
-"PO-Revision-Date: 2010-12-16 15:11:27+0000\n"
-"Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-11-30 20:40:24+0000\n"
-"X-Generator: MediaWiki 1.18alpha (r78478); Translate extension (2010-09-17)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Menu item title/tooltip
-#: AdsensePlugin.php:194
-msgid "AdSense configuration"
-msgstr ""
-
-#. TRANS: Menu item for site administration
-#: AdsensePlugin.php:196
-msgid "AdSense"
-msgstr "AdSense"
-
-#: AdsensePlugin.php:209
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr ""
-
-#: adsenseadminpanel.php:52
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#: adsenseadminpanel.php:62
-msgid "AdSense settings for this StatusNet site"
-msgstr ""
-
-#: adsenseadminpanel.php:164
-msgid "Client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:165
-msgid "Google client ID"
-msgstr ""
-
-#: adsenseadminpanel.php:170
-msgid "Ad script URL"
-msgstr ""
-
-#: adsenseadminpanel.php:171
-msgid "Script URL (advanced)"
-msgstr ""
-
-#: adsenseadminpanel.php:176
-msgid "Medium rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:177
-msgid "Medium rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:182
-msgid "Rectangle"
-msgstr ""
-
-#: adsenseadminpanel.php:183
-msgid "Rectangle slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:188
-msgid "Leaderboard"
-msgstr ""
-
-#: adsenseadminpanel.php:189
-msgid "Leaderboard slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:194
-msgid "Skyscraper"
-msgstr ""
-
-#: adsenseadminpanel.php:195
-msgid "Wide skyscraper slot code"
-msgstr ""
-
-#: adsenseadminpanel.php:208
-msgid "Save"
-msgstr "Kaydet"
-
-#: adsenseadminpanel.php:208
-msgid "Save AdSense settings"
-msgstr "AdSense ayarlarını kaydet"
diff --git a/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index f2b4f9d..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Translation of StatusNet - Adsense to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "Конфігурація AdSense"
-
-#. TRANS: Menu item for site administration
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "Додаток для відображення Google AdSense на сторінці сайту StatusNet."
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "Налаштування AdSense на даному сайті StatusNet"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "ІД клієнта"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Google client ID."
-msgstr "Ідентифікатор клієнта Google."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "Адреса скрипту AdSense"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Script URL (advanced)."
-msgstr "URL-адреса сценарію (розширена опція)."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "Середній прямокутник"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Medium rectangle slot code."
-msgstr "Слот-код середнього прямокутника."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "Прямокутник"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Rectangle slot code."
-msgstr "Слот-код прямокутника."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "Банер"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Leaderboard slot code."
-msgstr "Слот-код банеру."
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "Хмарочос"
-
-#. TRANS: Field title in AdSense administration panel.
-msgid "Wide skyscraper slot code."
-msgstr "Слот-код хмарочосу."
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Зберегти"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-msgid "Save AdSense settings."
-msgstr "Зберегти налаштування AdSense."
diff --git a/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po
deleted file mode 100644 (file)
index 7fae863..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# Translation of StatusNet - Adsense to Simplified Chinese (‪中文(简体)‬)
-# Exported from translatewiki.net
-#
-# Author: Chenxiaoqino
-# Author: ZhengYiFeng
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Adsense\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Simplified Chinese <https://translatewiki.net/wiki/Portal:zh-"
-"hans>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 10:22:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: zh-hans\n"
-"X-Message-Group: #out-statusnet-plugin-adsense\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Menu item title/tooltip
-msgid "AdSense configuration"
-msgstr "AdSense配置"
-
-#. TRANS: Menu item for site administration
-#, fuzzy
-msgctxt "MENU"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Plugin description.
-msgid "Plugin to add Google AdSense to StatusNet sites."
-msgstr "添加 Google AdSense 到 StatusNet 网站的插件。"
-
-#. TRANS: Title of AdSense administrator panel.
-msgctxt "TITLE"
-msgid "AdSense"
-msgstr "AdSense"
-
-#. TRANS: Instructions for AdSense administrator panel.
-msgid "AdSense settings for this StatusNet site"
-msgstr "这个 StatusNet 网站的 AdSense 设置"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Client ID"
-msgstr "客户ID"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Google client ID."
-msgstr "Google 发布商 ID(例如:pub-1234567890123456)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Ad script URL"
-msgstr "广告脚本地址"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Script URL (advanced)."
-msgstr "高级脚本地址"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Medium rectangle"
-msgstr "中等矩形"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Medium rectangle slot code."
-msgstr "中等矩形广告代码(#ID)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Rectangle"
-msgstr "小矩形"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Rectangle slot code."
-msgstr "小矩形广告代码(#ID)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Leaderboard"
-msgstr "首页横幅"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Leaderboard slot code."
-msgstr "首页横幅广告代码(#ID)"
-
-#. TRANS: Field label in AdSense administration panel.
-msgid "Skyscraper"
-msgstr "宽幅摩天大楼"
-
-#. TRANS: Field title in AdSense administration panel.
-#, fuzzy
-msgid "Wide skyscraper slot code."
-msgstr "宽幅摩天大楼广告代码(#ID)"
-
-#. TRANS: Button text to save settings in AdSense administration panel.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "保存"
-
-#. TRANS: Button title to save settings in AdSense administration panel.
-#, fuzzy
-msgid "Save AdSense settings."
-msgstr "保存AdSense设置"
diff --git a/plugins/Aim/README b/plugins/Aim/README
deleted file mode 100644 (file)
index 7d486a0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-The AIM plugin allows users to send and receive notices over the AIM network.
-
-Installation
-============
-add "addPlugin('aim',
-    array('setting'=>'value', 'setting2'=>'value2', ...);"
-to the bottom of your config.php
-
-scripts/imdaemon.php included with StatusNet must be running. It will be started by
-the plugin along with their other daemons when you run scripts/startdaemons.sh.
-See the StatusNet README for more about queuing and daemons.
-
-Settings
-========
-user*: username (screenname) to use when logging into AIM
-password*: password for that user
-
-* required
-default values are in (parenthesis)
-
-Example
-=======
-addPlugin('aim', array(
-    'user=>'...',
-    'password'=>'...'
-));
-
diff --git a/plugins/Aim/classes/Fake_Aim.php b/plugins/Aim/classes/Fake_Aim.php
deleted file mode 100644 (file)
index e24c0f2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Instead of sending AIM messages, retrieve the raw data that would be sent
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Network
- * @package   StatusNet
- * @author    Craig Andrews <candrews@integralblue.com>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-class Fake_Aim extends Aim
-{
-    public $would_be_sent = null;
-
-    function sflapSend($sflap_type, $sflap_data, $no_null, $formatted)
-    {
-        $this->would_be_sent = array($sflap_type, $sflap_data, $no_null, $formatted);
-    }
-}
diff --git a/plugins/Aim/extlib/phptoclib/README.txt b/plugins/Aim/extlib/phptoclib/README.txt
deleted file mode 100755 (executable)
index 0eec13a..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-phpTOCLib version 1.0 RC1\r
-\r
-This is released under the LGPL. AIM,TOC,OSCAR, and all other related protocols/terms are \r
-copyright AOL/Time Warner. This project is in no way affiliated with them, nor is this\r
-project supported by them.\r
-\r
-Some of the code is loosely based off of a script by Jeffrey Grafton. Mainly the decoding of packets, and the\r
-function for roasting passwords is entirly his.\r
-\r
-TOC documentation used is available at http://simpleaim.sourceforge.net/docs/TOC.txt\r
-\r
-\r
-About:\r
-phpTOCLib aims to be a PHP equivalent to the PERL module NET::AIM. Due to some limitations, \r
-this is difficult. Many features have been excluded in the name of simplicity, and leaves\r
-you alot of room to code with externally, providing function access to the variables that\r
-need them.\r
-\r
-I have aimed to make this extensible, and easy to use, therefore taking away some built in\r
-functionality that I had originally out in. This project comes after several months of\r
-researching the TOC protocol.\r
-\r
-example.php is included with the class. It needs to be executed from the command line\r
-(ie:php -q testscript.php) and you need to call php.exe with the -q\r
-example is provided as a demonstaration only. Though it creats a very simple, functional bot, it lacks any sort of commands, it merely resends the message it recieves in reverse.\r
-\r
-\r
-Revisions:\r
-\r
------------------------------------\r
-by Rajiv Makhijani\r
-(02/24/04)\r
-        - Fixed Bug in Setting Permit/Deny Mode\r
-        - Fixes so Uninitialized string offset notice doesn't appear\r
-        - Replaced New Lines Outputed for Each Flap Read with " . " so\r
-          that you can still tell it is active but it does not take so much space\r
-        - Removed "eh?" message\r
-        - Added MySQL Database Connection Message\r
-        - New Functions:\r
-               update_profile(profile data string, powered by boolean)\r
-                       * The profile data string is the text that goes in the profile.\r
-                       * The powered by boolean if set to true displays a link to the\r
-                         sourceforge page of the script.\r
-(02/28/04)\r
-       - Silent option added to set object not to output any information\r
-               - To follow silent rule use sEcho function instead of Echo\r
------------------------------------\r
-by Jeremy (pickleman78)\r
-(05/26/04) beta 1 release\r
-       -Complete overhaul of class design and message handling\r
-       -Fixed bug involving sign off after long periods of idling\r
-       -Added new function $Aim->registerHandler\r
-       -Added the capability to handle all AIM messages\r
-               -Processing the messages is still the users responsibility\r
-       -Did a little bit of code cleanup\r
-       -Added a few internal functions to make the classes internal life easier\r
-       -Improved AIM server error message processing\r
-       -Updated this document (hopefully Rajiv will clean it up some, since I'm a terrible documenter)\r
--------------------------------------------------------------------------------------------------------------\r
-\r
-\r
-\r
-Functions:\r
-\r
-Several methods are provided in the class that allow for simple access to some of the \r
-common features of AIM. Below are details.\r
-\r
-$Aim->Aim($sn,$password,$pdmode, $silent=false)\r
-The constructor, it takes 4 arguments. \r
-$sn is your screen name\r
-$password is you password, in plain text\r
-$pdmode is the permit deny mode. This can be as follows:\r
-1 - Allow All\r
-2 - Deny All\r
-3 - Permit only those on your permit list\r
-4 - Permit all those not on your deny list\r
-$silent if set to true prints out nothing\r
-\r
-So, if your screen-name is JohnDoe746 and your password is fertu, and you want to allow\r
-all users of the AIM server to contact you, you would code as follows\r
-$myaim=new Aim("JohnDoe746","fertu",1);\r
-\r
-\r
-$Aim->add_permit($buddy)\r
-This adds the buddy passed to the function to your permit list.\r
-ie: $myaim->add_permit("My friend22");\r
-\r
-$Aim->block_buddy($buddy)\r
-Blocks a user. This will switch your pd mode to 4. After using this, for the user to remain\r
-out of contact with you, it is required to provide the constructor with a pd mode of 4\r
-ie:$myaim->block_buddy("Annoying guy 4");\r
-\r
-$Aim->send_im($to,$message,$auto=false)\r
-Sends $message to $user. If you set the 3rd argument to true, then the recipient will receive it in\r
-the same format as an away message. (Auto Response from me:)\r
-A message longer than 65535 will be truncated\r
-ie:$myaim->send_im("myfriend","This is a happy message");\r
-\r
-$Aim->set_my_info()\r
-Sends an update buddy command to the server and allows some internal values about yourself\r
-to be set.\r
-ie:$myaim->set_my_info();\r
-\r
-$Aim->signon()\r
-Call this to connect to the server. This must be called before any other methods will work\r
-properly\r
-ie:$mybot->signon();\r
-\r
-$Aim->getLastReceived()\r
-Returns $this->myLastReceived['decoded']. This should be the only peice of the gotten data\r
-you need to concern yourself with. This is a preferred method of accessing this variable to prevent\r
-accidental modification of $this->myLastReceived. Accidently modifying this variable can\r
-cause some internal failures.\r
-\r
-$Aim->read_from_aim()\r
-This is a wrapper for $Aim->sflap_read(), and only returns the $this->myLastReceived['data']\r
-portion of the message. It is preferred that you do not call $Aim->sflap_read() and use this\r
-function instead. This function has a return value. Calling this prevents the need to call\r
-$Aim->getLastReceived()\r
-\r
-$Aim->setWarning($wl)\r
-This allows you to update the bots warning level when warned.\r
-\r
-$Aim->getBuddies()\r
-Returns the $this->myBuddyList array. Use this instead of modifying the internal variable\r
-\r
-$Aim->getPermit()\r
-Returns the $this->myPermitList array. Use this instead of modifying the internal variable\r
-\r
-$Aim->getBlocked()\r
-Returns the $this->myBlockedList array. Use this instead of modifying the internal variable\r
-\r
-$Aim->warn_user($user,$anon=false)\r
-Warn $user. If anon is set to true, then it warns the user anonomously\r
-\r
-$Aim->update_profile($information, $poweredby=false)\r
-Updates Profile to $information.  If $poweredby is true a link to\r
-sourceforge page for this script is appended to profile\r
-\r
-$Aim->registerHandler($function_name,$command)\r
-This is by far the best thing about the new release. \r
-For more information please reas supplement.txt. It is not included here because of the sheer size of the document.\r
-supplement.txt contains full details on using registerHandler and what to expect for each input.\r
-\r
-\r
-For convenience, I have provided some functions to simplify message processing. \r
-\r
-They can be read about in the file "supplement.txt". I chose not to include the text here because it\r
-is a huge document\r
-\r
-\r
-\r
-There are a few things you should note about AIM\r
-1)An incoming message has HTML tags in it. You are responsible for stripping those tags\r
-2)Outgoing messages can have HTML tags, but will work fine if they don't. To include things\r
-  in the time feild next to the users name, send it as a comment\r
-\r
-Conclusion:\r
-The class is released under the LGPL. If you have any bug reports, comments, questions\r
-feature requests, or want to help/show me what you've created with this(I am very interested in this), \r
-please drop me an email: pickleman78@users.sourceforge.net. This code was written by \r
-Jeremy(a.k.a pickleman78) and Rajiv M (a.k.a compwiz562).\r
-\r
-\r
-Special thanks:\r
-I'd like to thank all of the people who have contributed ideas, testing, bug reports, and code additions to\r
-this project. I'd like to especially thank Rajiv, who has done do much for the project, and has kept this documnet\r
-looking nice. He also has done alot of testing of this script too. I'd also like to thank SpazLink for his help in\r
-testing. And finally I'd like to thank Jeffery Grafton, whose script inspired me to start this project.\r
diff --git a/plugins/Aim/extlib/phptoclib/aimclassw.php b/plugins/Aim/extlib/phptoclib/aimclassw.php
deleted file mode 100644 (file)
index 0657910..0000000
+++ /dev/null
@@ -1,2370 +0,0 @@
-<?php
-/*
-*      PHPTOCLIB: A library for AIM connectivity through PHP using the TOC protocal.
-*
-*      This library is free software; you can redistribute it and/or
-*      modify it under the terms of the GNU Lesser General Public
-*      License as published by the Free Software Foundation; either
-*      version 2.1 of the License, or (at your option) any later version.
-*
-*      This library is distributed in the hope that it will be useful,
-*      but WITHOUT ANY WARRANTY; without even the implied warranty of
-*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-*      Lesser General Public License for more details.
-*
-*      You should have received a copy of the GNU Lesser General Public
-*      License along with this library; if not, write to the Free Software
-*      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*
-*/
-/**
-* The version of PHPTOCLIB we are running right now
-*
-* @access private
-* @var int
-*/
-define("PHPTOCLIB_VERSION","1.0.0 RC1");
-
-// Prevents Script from Timing Out
-//set_time_limit(0);
-
-// Constant Declarations
-
-/**
-* Maximum size for a direct connection IM in bytes
-*
-* @access private
-* @var int
-*/
-
-define("MAX_DIM_SIZE",3072); //Default to 3kb
-
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_WARN",74);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_MSG",75);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_UPDATEBUDDY",76);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_SIGNON",77);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_NICK",78);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_ERROR",79);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_CHATJ",80);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_CHATI",81);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_CHATUPDBUD",82);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_CHATINV",83);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_CHATLE",84);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_URL",85);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_NICKSTAT",86);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_PASSSTAT",87);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_RVOUSP",88);
-/**
-* Internally used for message type
-*
-* @access private
-* @var int
-*/
-define("AIM_TYPE_NOT_IMPLEMENTED",666);
-
-
-
-/**
-* Internally used for connection type
-*
-* Internal type for a normal connection
-*
-* @access private
-* @var int
-*/
-define("CONN_TYPE_NORMAL",1);
-/**
-* Internally used for connection type
-*
-* Internal type of a Dirct Connection
-*
-* @access private
-* @var int
-*/
-define("CONN_TYPE_DC",2);
-/**
-* Internally used for connection type
-*
-*Internal type for a file transfer connection
-*
-* @access private
-* @var int
-*/
-define("CONN_TYPE_FT",3);
-/**
-* Internally used for connection type
-*
-*Internal type for a file get connection
-*
-* @access private
-* @var int
-*/
-define("CONN_TYPE_FTG",4);
-
-/**
-* Maximum size for a TOC packet
-*
-* @access private
-* @var int
-*/
-define("MAX_PACKLENGTH",2048);
-
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TYPE_SIGNON",1);
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TYPE_DATA",2);
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TYPE_ERROR",3);
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TYPE_SIGNOFF",4);
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TYPE_KEEPALIVE",5);
-/**
-* TOC packet type
-*
-* @access private
-* @var int
-*/
-define("SFLAP_MAX_LENGTH",1024);
-
-
-
-/**
-* Service UID for a voice connection
-*
-* @access private
-* @var int
-*/
-define('VOICE_UID', '09461341-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for file sending 
-*
-* @access private
-* @var int
-*/
-define('FILE_SEND_UID', '09461343-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for file getting
-*
-* @access private
-* @var int
-*/
-define('FILE_GET_UID', '09461348-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for Direct connections 
-*
-* @access private
-* @var int
-*/
-define('IMAGE_UID', '09461345-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for Buddy Icons
-*
-* @access private
-* @var int
-*/
-define('BUDDY_ICON_UID', '09461346-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for stocks
-*
-* @access private
-* @var int
-*/
-define('STOCKS_UID', '09461347-4C7F-11D1-8222-444553540000');
-/**
-* Service UID for games
-*
-* @access private
-* @var int
-*/
-define('GAMES_UID', '0946134a-4C7F-11D1-8222-444553540000');
-
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_SUCCESS",0);
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_ERR_UNKNOWN",1);
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_ERR_ARGS",2);
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_ERR_LENGTH",3);
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_ERR_READ",4);
-/**
-* FLAP return code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_ERR_SEND",5);
-
-/**
-* FLAP version number
-*
-* @access private
-* @var int
-*/
-define("SFLAP_FLAP_VERSION",1);
-/**
-* FLAP TLV code
-*
-* @access private
-* @var int
-*/
-define("SFLAP_TLV_TAG",1);
-/**
-* Bytes in a FLAP header
-*
-* @access private
-* @var int
-*/
-define("SFLAP_HEADER_LEN",6);
-
-/** 
- * PHPTocLib AIM Class
- *
- * @author Jeremy Bryant <pickleman78@users.sourceforge.net>
- * @author Rajiv Makhijani <rajiv@blue-tech.org>
- * @package phptoclib
- * @version 1.0RC1
- * @copyright 2005
- * @access public
- *
- */
-class Aim
-{
-       /** 
-        * AIM ScreenName
-        *
-        * @var String
-        * @access private
-        */
-       var $myScreenName;
-       
-       /** 
-        * AIM Password (Plain Text)
-        *
-        * @var String
-        * @access private
-        */
-       var $myPassword;
-       
-
-       /** 
-        * AIM TOC Server
-        *
-        * @var String
-        * @access public
-        */
-       var $myServer="toc.oscar.aol.com";
-       
-       /** 
-        * AIM Formatted ScreenName
-        *
-        * @var String
-        * @access private
-        */
-       var $myFormatSN;
-       
-       /** 
-        * AIM TOC Server Port
-        *
-        * @var String
-        * @access public
-        */
-       var $myPort="5190";
-       
-       /** 
-        * Profile Data
-        * Use setProfile() to update
-        *
-        * @var String
-        * @access private
-        */
-       var $myProfile="Powered by phpTOCLib. Please visit http://sourceforge.net/projects/phptoclib for more information";     //The profile of the bot
-
-       /** 
-        * Socket Connection Resource ID
-        *
-        * @var Resource
-        * @access private
-        */
-       var $myConnection;  //Connection resource ID
-       
-       /** 
-        * Roasted AIM Password
-        *
-        * @var String
-        * @access private
-        */
-       var $myRoastedPass;
-       
-       /** 
-        * Last Message Recieved From Server
-        *
-        * @var String
-        * @access private
-        */
-       var $myLastReceived;
-       
-       /** 
-        * Current Seq Number Used to Communicate with Server
-        *
-        * @var Integer
-        * @access private
-        */
-       var $mySeqNum;
-        
-        /** 
-        * Current Warning Level
-        * Getter: getWarning()
-        * Setter: setWarning()
-        *
-        * @var Integer
-        * @access private
-        */
-       var $myWarnLevel;   //Warning Level of the bot
-       
-        /** 
-        * Auth Code
-        *
-        * @var Integer
-        * @access private
-        */
-       var $myAuthCode;
-       
-       /** 
-        * Buddies
-        * Getter: getBuddies()
-        *
-        * @var Array
-        * @access private
-        */
-       var $myBuddyList;
-       
-       /** 
-        * Blocked Buddies
-        * Getter: getBlocked()
-        *
-        * @var Array
-        * @access private
-        */
-       var $myBlockedList;
-       
-       /** 
-        * Permited Buddies
-        * Getter: getBlocked()
-        *
-        * @var Array
-        * @access private
-        */
-       var $myPermitList;
-       
-       /** 
-        * Permit/Deny Mode
-        * 1 - Allow All
-        * 2 - Deny All
-        * 3 - Permit only those on your permit list
-        * 4 - Permit all those not on your deny list
-        *
-        * @var Integer
-        * @access private
-        */
-       var $myPdMode;
-       
-       //Below variables added 4-29 by Jeremy: Implementing chat
-
-       /** 
-        * Contains Chat Room Info
-        * $myChatRooms['roomid'] = people in room
-        *
-        * @var Array
-        * @access private
-        */
-       var $myChatRooms;
-               
-       //End of chat implementation
-       
-
-       /** 
-        * Event Handler Functions
-        *
-        * @var Array
-        * @access private
-        */
-       var $myEventHandlers = array();
-       
-       /** 
-        * Array of direct connection objects(including file transfers)
-        *
-        * @var Array
-        * @access private
-        */
-       var $myDirectConnections = array();
-       
-       /** 
-        * Array of the actual connections
-        *
-        * @var Array
-        * @access private
-        */
-       var $myConnections = array();
-       
-       /**
-        * The current state of logging
-        * 
-        * @var Boolean
-        * @access private
-        */
-       
-       var $myLogging = false;
-       
-    /** 
-        * Constructor
-        *
-        * Permit/Deny Mode Options
-        * 1 - Allow All
-        * 2 - Deny All
-        * 3 - Permit only those on your permit list
-        * 4 - Permit all those not on your deny list
-        *
-        * @param String $sn AIM Screenname
-        * @param String $password AIM Password
-        * @param Integer $pdmode Permit/Deny Mode
-        * @access public
-        */
-       function Aim($sn, $password, $pdmode)
-    {
-        //Constructor assignment
-               $this->myScreenName = $this->normalize($sn);
-               $this->myPassword = $password;
-               $this->myRoastedPass = $this->roastPass($password);
-               $this->mySeqNum = 1;
-               $this->myConnection = 0;
-               $this->myWarnLevel = 0;
-               $this->myAuthCode = $this->makeCode();
-               $this->myPdMode = $pdmode;
-               $this->myFormatSN = $this->myScreenName;
-               
-               $this->log("PHPTOCLIB v" . PHPTOCLIB_VERSION . " Object Created");
-               
-       }
-
-       /** 
-        * Enables debug logging (Logging is disabled by default)
-        *
-        * 
-        * @access public
-        * @return void
-        */
-
-       function setLogging($enable)
-       {
-               $this->myLogging=$enable;
-       }
-
-       function log($data)
-       {
-           if($this->myLogging){
-            error_log($data);
-        }
-       }
-       
-        /** 
-        * Logs a packet
-        *
-        * 
-        * @access private
-        * @param Array $packary Packet
-        * @param String $in Prepend
-        * @return void
-        */
-       function logPacket($packary,$in)
-       {
-               if(!$this->myLogging || sizeof($packary)<=0 || (@strlen($packary['decoded'])<=0 && @isset($packary['decoded'])))
-                  return;
-               $towrite=$in . ":  ";
-               foreach($packary as $k=>$d)
-               {
-                       $towrite.=$k . ":" . $d . "\r\n";
-               }
-               $towrite.="\r\n\r\n";
-               $this->log($towrite);
-       }
-       /** 
-        * Roasts/Hashes Password
-        *
-        * @param String $password Password
-        * @access private
-        * @return String Roasted Password
-        */
-       function roastPass($password)
-       {
-               $roaststring = 'Tic/Toc';
-               $roasted_password = '0x';
-               for ($i = 0; $i < strlen($password); $i++)
-                       $roasted_password .= bin2hex($password[$i] ^ $roaststring[($i % 7)]);
-               return $roasted_password;
-       }
-       
-       /** 
-        * Access Method for myScreenName
-        *
-        * @access public
-        * @param $formated Returns formatted Screenname if true as returned by server
-        * @return String Screenname
-        */
-       function getMyScreenName($formated = false)
-       {
-               if ($formated)
-               {
-                       return $this->myFormatSN;
-               }
-               else
-               {
-                       return $this->normalize($this->myScreenName);
-               }
-       }
-       
-       /** 
-        * Generated Authorization Code
-        *
-        * @access private
-        * @return Integer Auth Code
-        */
-       function makeCode()
-       {
-               $sn = ord($this->myScreenName[0]) - 96;
-               $pw = ord($this->myPassword[0]) - 96;
-               $a = $sn * 7696 + 738816;
-               $b = $sn * 746512;
-               $c = $pw * $a;
-
-               return $c - $a + $b + 71665152;
-       }
-
-
-       /** 
-        * Reads from Socket
-        *
-        * @access private
-        * @return String Data
-        */
-       function sflapRead()
-       {
-               if ($this->socketcheck($this->myConnection))
-               {
-                       $this->log("Disconnected.... Reconnecting in 60 seconds");
-                       sleep(60);
-                       $this->signon();
-               }
-               
-               $header = fread($this->myConnection,SFLAP_HEADER_LEN);
-               
-               if (strlen($header) == 0)
-               {
-                       $this->myLastReceived = "";
-                       return "";
-               }
-               $header_data = unpack("aast/Ctype/nseq/ndlen", $header);
-               $this->log(" . ", false);
-               $packet = fread($this->myConnection, $header_data['dlen']);
-               if (strlen($packet) <= 0 && $sockinfo['blocked'])
-                       $this->derror("Could not read data");
-               
-               if ($header_data['type'] == SFLAP_TYPE_SIGNON)
-               {
-                       $packet_data=unpack("Ndecoded", $packet);
-               }
-               
-               if ($header_data['type'] == SFLAP_TYPE_KEEPALIVE)
-               {
-                       $this->myLastReceived = '';
-                       return 0;
-               } 
-               else if (strlen($packet)>0)
-               {
-                       $packet_data = unpack("a*decoded", $packet);
-               }
-               $this->log("socketcheck check now");
-               if ($this->socketcheck($this->myConnection))
-               {
-                       $this->derror("Connection ended unexpectedly");
-               }
-               
-               $data = array_merge($header_data, $packet_data);
-               $this->myLastReceived = $data;
-               $this->logPacket($data,"in");
-               return $data;
-    }
-
-       /** 
-        * Sends Data on Socket
-        *
-        * @param String $sflap_type Type
-        * @param String $sflap_data Data
-        * @param boolean $no_null No Null
-        * @param boolean $formatted Format
-        * @access private
-        * @return String Roasted Password
-        */
-       function sflapSend($sflap_type, $sflap_data, $no_null, $formatted)
-       {
-               $packet = "";
-               if (strlen($sflap_data) >= MAX_PACKLENGTH)
-                       $sflap_data = substr($sflap_data,0,MAX_PACKLENGTH);
-                       
-               if ($formatted)
-               {
-                       $len = strlen($sflap_len);
-                       $sflap_header = pack("aCnn",'*', $sflap_type, $this->mySeqNum, $len);
-                       $packet = $sflap_header . $sflap_data;
-               } else {
-                       if (!$no_null)
-                       {
-                               $sflap_data = str_replace("\0","", trim($sflap_data));
-                               $sflap_data .= "\0";
-                       }
-                       $data = pack("a*", $sflap_data);
-                       $len = strlen($sflap_data);
-                       $header = pack("aCnn","*", $sflap_type, $this->mySeqNum, $len);
-                       $packet = $header . $data;
-               }
-               
-               //Make sure we are still connected
-               if ($this->socketcheck($this->myConnection))
-               {
-                       $this->log("Disconnected.... reconnecting in 60 seconds");
-                       sleep(60);
-                       $this->signon();
-               }
-               $sent = fputs($this->myConnection, $packet) or $this->derror("Error sending packet to AIM");
-               $this->mySeqNum++;
-               sleep(ceil($this->myWarnLevel/10));
-               $this->logPacket(array($sflap_type,$sflap_data),"out");
-       }
-
-       /** 
-        * Escape the thing that TOC doesn't like,that would be
-        * ",', $,{,},[,]
-        *
-        * @param String $data Data to Escape
-        * @see decodeData
-        * @access private
-        * @return String $data Escaped Data
-        */
-       function encodeData($data)
-       {
-               $data = str_replace('"','\"', $data);
-               $data = str_replace('$','\$', $data);
-               $data = str_replace("'","\'", $data);
-               $data = str_replace('{','\{', $data);
-               $data = str_replace('}','\}', $data);
-               $data = str_replace('[','\[', $data);
-               $data = str_replace(']','\]', $data);
-               return $data;
-       }
-       
-       /** 
-        * Unescape data TOC has escaped
-        * ",', $,{,},[,]
-        *
-        * @param String $data Data to Unescape
-        * @see encodeData
-        * @access private
-        * @return String $data Unescape Data
-        */
-       function decodeData($data)
-       {
-               $data = str_replace('\"','"', $data);
-               $data = str_replace('\$','$', $data);
-               $data = str_replace("\'","'", $data);
-               $data = str_replace('\{','{', $data);
-               $data = str_replace('\}','}', $data);
-               $data = str_replace('\[','[', $data);
-               $data = str_replace('\]',']', $data);
-               $data = str_replace('&quot;','"', $data);
-               $data = str_replace('&amp;','&', $data);
-               return $data;
-       }
-
-       /** 
-        * Normalize ScreenName
-        * no spaces and all lowercase
-        *
-        * @param String $nick ScreenName
-        * @access public
-        * @return String $nick Normalized ScreenName
-        */
-       function normalize($nick)
-       {
-               $nick = str_replace(" ","", $nick);
-               $nick = strtolower($nick);
-               return $nick;
-       }
-
-       /** 
-        * Sets internal info with update buddy
-        * Currently only sets warning level
-        * 
-        * @access public
-        * @return void
-        */
-       function setMyInfo()
-       {
-               //Sets internal values bvase on the update buddy command
-               $this->log("Setting my warning level ...");
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_get_status " . $this->normalize($this->myScreenName),0,0);
-               //The rest of this will now be handled by the other functions. It is assumed
-               //that we may have other data queued in the socket, do we should just add this
-               //message to the queue instead of trying to set it in here
-       }
-
-       /** 
-        * Connects to AIM and Signs On Using Info Provided in Constructor
-        * 
-        * @access public
-        * @return void
-        */
-       function signon()
-       {
-               $this->log("Ready to sign on to the server");
-               $this->myConnection = fsockopen($this->myServer, $this->myPort, $errno, $errstr,10) or die("$errorno:$errstr");
-               $this->log("Connected to server");
-               $this->mySeqNum = (time() % 65536); //Select an arbitrary starting point for
-                                                                                 //sequence numbers
-               if (!$this->myConnection)
-                       $this->derror("Error connecting to toc.oscar.aol.com");
-               $this->log("Connected to AOL");
-               //Send the flapon packet
-               fputs($this->myConnection,"FLAPON\r\n\n\0"); //send the initial handshake
-               $this->log("Sent flapon");
-               $this->sflapRead();  //Make sure the server responds with what we expect
-               if (!$this->myLastReceived)
-                       $this->derror("Error sending the initialization string");
-
-               //send the FLAP SIGNON packet back with what it needs
-               //There are 2 parts to the signon packet. They are sent in succession, there
-               //is no indication if either packet was correctly sent
-               $signon_packet = pack("Nnna".strlen($this->myScreenName),1,1,strlen($this->myScreenName), $this->myScreenName);
-               $this->sflapSend(SFLAP_TYPE_SIGNON, $signon_packet,1,0);
-               $this->log("sent signon packet part one");
-               
-               $signon_packet_part2 = 'toc2_signon login.oscar.aol.com 29999 ' . $this->myScreenName . ' ' . $this->myRoastedPass . ' english-US "TIC:TOC2:REVISION" 160 ' . $this->myAuthCode;
-               $this->log($signon_packet_part2 . "");
-               $this->sflapSend(SFLAP_TYPE_DATA, $signon_packet_part2,0,0);
-               $this->log("Sent signon packet part 2... Awaiting response...");
-
-               $this->sflapRead();
-               $this->log("Received Sign on packet, beginning initilization...");
-               $message = $this->getLastReceived();
-               $this->log($message . "\n");
-               if (strstr($message,"ERROR:"))
-               {
-                       $this->onError($message);
-                       die("Fatal signon error");
-               }
-               stream_set_timeout($this->myConnection,2);
-               //The information sent before the config2 command is utterly useless to us
-               //So we will just skim through them until we reach it
-               
-               //Add the first entry to the connection array
-               $this->myConnections[] = $this->myConnection;
-               
-               
-               //UPDATED 4/12/03: Now this will use the receive function and send the
-               //received messaged to the assigned handlers. This is where the signon 
-               //method has no more use
-               
-               $this->log("Done with signon proccess");
-               //socket_set_blocking($this->myConnection,false);
-       }
-       
-       /** 
-        * Sends Instant Message
-        *
-        * @param String $to Message Recipient SN
-        * @param String $message Message to Send
-        * @param boolean $auto Sent as Auto Response / Away Message Style
-        * @access public
-        * @return void
-        */
-       function sendIM($to, $message, $auto = false)
-       {
-               if ($auto) $auto = "auto";
-               else $auto = "";
-               $to = $this->normalize($to);
-               $message = $this->encodeData($message);
-               $command = 'toc2_send_im "' . $to . '" "' . $message . '" ' .  $auto;
-               $this->sflapSend(SFLAP_TYPE_DATA, trim($command),0,0);
-               $cleanedmessage = str_replace("<br>", "   ", $this->decodeData($message));
-               $cleanedmessage = strip_tags($cleanedmessage);
-               $this->log("TO - " . $to . " : " . $cleanedmessage);
-       }
-       
-       /** 
-        * Set Away Message
-        *
-        * @param String $message Away message (some HTML supported).
-        *   Use null to remove the away message
-        * @access public
-        * @return void
-        */
-       function setAway($message)
-       {
-               $message = $this->encodeData($message);
-               $command = 'toc_set_away "' . $message . '"';
-               $this->sflapSend(SFLAP_TYPE_DATA, trim($command),0,0);
-               $this->log("SET AWAY MESSAGE - " . $this->decodeData($message));
-       }
-
-       /** 
-        * Fills Buddy List
-        * Not implemented fully yet
-        *
-        * @access public
-        * @return void
-        */
-       function setBuddyList()
-       {
-               //This better be the right message
-               $message = $this->myLastReceived['decoded'];
-               if (strpos($message,"CONFIG2:") === false)
-               {
-                       $this->log("setBuddyList cannot be called at this time because I got $message");
-                       return false;
-               }
-               $people = explode("\n",trim($message,"\n"));
-               //The first 3 elements of the array are who knows what, element 3 should be
-               //a letter followed by a person
-               for($i = 1; $i<sizeof($people); $i++)
-               {
-                       @list($mode, $name) = explode(":", $people[$i]);
-                       switch($mode)
-                       {
-                               case 'p':
-                                       $this->myPermitList[] = $name;
-                                       break;
-                               case 'd':
-                                       $this->myBlockedList[] = $name;
-                                       break;
-                               case 'b':
-                                       $this->myBuddyList[] = $name;
-                                       break;
-                               case 'done':
-                                       break;
-                               default:
-                                       //
-                       }
-               }
-       }
-       
-       /** 
-        * Adds buddy to Permit list
-        *
-        * @param String $buddy Buddy's Screenname
-        * @access public
-        * @return void
-        */
-       function addPermit($buddy)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc2_add_permit " . $this->normalize($buddy),0,0);
-               $this->myPermitList[] = $this->normalize($buddy);
-               return 1;
-       }
-       
-       /** 
-        * Blocks buddy
-        *
-        * @param String $buddy Buddy's Screenname
-        * @access public
-        * @return void
-        */
-       function blockBuddy($buddy)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc2_add_deny " . $this->normalize($buddy),0,0);
-               $this->myBlockedList[] = $this->normalize($buddy);
-               return 1;
-       }
-       
-       /** 
-        * Returns last message received from server
-        *
-        * @access private
-        * @return String Last Message from Server
-        */
-       function getLastReceived()
-       {
-               if (@$instuff = $this->myLastReceived['decoded']){
-                       return $this->myLastReceived['decoded'];
-               }else{
-                       return;
-               }
-       }
-       
-       /** 
-        * Returns Buddy List
-        *
-        * @access public
-        * @return array Buddy List
-        */
-       function getBuddies()
-       {
-               return $this->myBuddyList;
-       }
-       
-       /** 
-        * Returns Permit List
-        *
-        * @access public
-        * @return array Permit List
-        */
-       function getPermit()
-       {
-               return $this->myPermitList;
-       }
-       
-       /** 
-        * Returns Blocked Buddies
-        *
-        * @access public
-        * @return array Blocked List
-        */
-       function getBlocked()
-       {
-               return $this->myBlockedList;
-       }
-       
-       
-
-
-       /** 
-        * Reads and returns data from server
-        *
-        * This is a wrapper for $Aim->sflap_read(), and only returns the $this->myLastReceived['data']
-        * portion of the message. It is preferred that you do not call $Aim->sflap_read() and use this
-        * function instead. This function has a return value. Calling this prevents the need to call
-        * $Aim->getLastReceived()
-        *
-        * @access public
-        * @return String Data recieved from server
-        */
-       function read_from_aim()
-       {
-               $this->sflapRead();
-               $returnme = $this->getLastReceived();
-               return $returnme;
-       }
-       
-       /** 
-        * Sets current internal warning level
-        * 
-        * This allows you to update the bots warning level when warned.
-        *
-        * @param int Warning Level %
-        * @access private
-        * @return void
-        */
-       function setWarningLevel($warnlevel)
-       {
-               $this->myWarnLevel = $warnlevel;
-       }
-       
-       /** 
-        * Warns / "Evils" a User
-        *
-        * To successfully warn another user they must have sent you a message.
-        * There is a limit on how much and how often you can warn another user.
-        * Normally when you warn another user they are aware who warned them,
-        * however there is the option to warn anonymously.  When warning anon.
-        * note that the warning is less severe.
-        *
-        * @param String $to Screenname to warn
-        * @param boolean $anon Warn's anonymously if true. (default = false)
-        * @access public
-        * @return void
-        */
-       function warnUser($to, $anon = false)
-       {
-               if (!$anon)
-                       $anon = '"norm"';
-
-               else
-                       $anon = '"anon"';
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_evil " . $this->normalize($to) . " $anon",0,0);
-       }
-       
-       /** 
-        * Returns warning level of bot
-        *
-        * @access public
-        * @return void
-        */
-       function getWarningLevel()
-       {
-               return $this->myWarningLevel;
-       }
-       
-       /** 
-        * Sets bot's profile/info
-        *
-        * Limited to 1024 bytes.
-        *
-        * @param String $profiledata Profile Data (Can contain limited html: br,hr,font,b,i,u etc)
-        * @param boolean $poweredby If true, appends link to phpTOCLib project to profile
-        * @access public
-        * @return void
-        */
-       function setProfile($profiledata, $poweredby = false)
-       {
-               if ($poweredby == false){
-                       $this->myProfile = $profiledata;
-               }else{
-                       $this->myProfile = $profiledata . "<font size=1 face=tahoma><br><br>Powered by phpTOCLib<br>http://sourceforge.net/projects/phptoclib</font>";
-               }
-               
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_set_info \"" . $this->encodeData($this->myProfile) . "\"",0,0);
-               $this->setMyInfo();
-               $this->log("Profile has been updated...");
-       }
-       
-       //6/29/04 by Jeremy:
-       //Added mthod to accept a rvous,decline it, and
-       //read from the rvous socket
-       
-       //Decline
-       
-       /** 
-        * Declines a direct connection request (rvous)
-        *
-        * @param String $nick ScreenName request was from
-        * @param String $cookie Request cookie (from server)
-        * @param String $uuid UUID
-        * 
-        * @access public
-        * @return void
-        */
-       function declineRvous($nick, $cookie, $uuid)
-       {
-               $nick = $this->normalize($nick);
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_rvous_cancel $nick $cookie $uuid",0,0);
-       }
-       
-       /** 
-        * Accepts a direct connection request (rvous)
-        *
-        * @param String $nick ScreenName request was from
-        * @param String $cookie Request cookie (from server)
-        * @param String $uuid UUID
-        * @param String $vip IP of User DC with
-        * @param int $port Port number to connect to
-        * 
-        * @access public
-        * @return void
-        */
-       function acceptRvous($nick, $cookie, $uuid, $vip, $port)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_rvous_accept $nick $cookie $uuid",0,0);
-               
-               //Now open the connection to that user
-               if ($uuid == IMAGE_UID)
-               {       
-                       $dcon = new Dconnect($vip, $port);
-               }
-               else if ($uuid == FILE_SEND_UID)
-               {
-                       $dcon = new FileSendConnect($vip, $port);
-               }
-               if (!$dcon->connected)
-               {
-                       $this->log("The connection failed");                            
-                       return false;
-               }
-               
-               //Place this dcon object inside the array
-               $this->myDirectConnections[] = $dcon;
-               //Place the socket in an array to
-               $this->myConnections[] = $dcon->sock;
-
-               
-               //Get rid of the first packet because its worthless
-               //and confusing
-               $dcon->readDIM();
-               //Assign the cookie
-               $dcon->cookie = $dcon->lastReceived['cookie'];
-               $dcon->connectedTo = $this->normalize($nick);
-               return $dcon;
-       }       
-       
-       /** 
-        * Sends a Message over a Direct Connection
-        *
-        * Only works if a direct connection is already established with user
-        *
-        * @param String $to Message Recipient SN
-        * @param String $message Message to Send
-        * 
-        * @access public
-        * @return void
-        */
-       function sendDim($to, $message)
-       {
-               //Find the connection
-               for($i = 0;$i<sizeof($this->myDirectConnections);$i++)
-               {
-                       if ($this->normalize($to) == $this->myDirectConnections[$i]->connectedTo && $this->myDirectConnections[$i]->type == CONN_TYPE_DC)
-                       {
-                               $dcon = $this->myDirectConnections[$i];
-                               break;
-                       }
-               }
-               if (!$dcon)
-               {
-                       $this->log("Could not find a direct connection to $to");
-                       return false;
-               }
-               $dcon->sendMessage($message, $this->normalize($this->myScreenName));
-               return true;
-       }
-       
-       /** 
-        * Closes an established Direct Connection
-        *
-        * @param DConnect $dcon Direct Connection Object to Close
-        * 
-        * @access public
-        * @return void
-        */
-       function closeDcon($dcon)
-       {
-               
-               $nary = array();
-               for($i = 0;$i<sizeof($this->myConnections);$i++)
-               {
-                       if ($dcon->sock == $this->myConnections[$i])
-                               unset($this->myConnections[$i]);
-               }
-               
-               $this->myConnections = array_values($this->myConnections);
-               unset($nary);
-               $nary2 = array();
-               
-               for($i = 0;$i<sizeof($this->myDirectConnections);$i++)
-               {
-                       if ($dcon == $this->myDirectConnections[$i])
-                               unset($this->myDirectConnections[$i]);
-               }
-               $this->myDirectConnections = array_values($this->myDirectConnections);
-               $dcon->close();
-               unset($dcon);
-       }
-       
-       //Added 4/29/04 by Jeremy:
-       //Various chat related methods
-       
-       /** 
-        * Accepts a Chat Room Invitation (Joins room)
-        *
-        * @param String $chatid ID of Chat Room
-        * 
-        * @access public
-        * @return void
-        */
-       function joinChat($chatid)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_chat_accept " . $chatid,0,0);
-       }
-       
-       /** 
-        * Leaves a chat room
-        *
-        * @param String $chatid ID of Chat Room
-        * 
-        * @access public
-        * @return void
-        */
-       function leaveChat($chatid)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_chat_leave " . $chatid,0,0);
-       }
-       
-       /** 
-        * Sends a message in a chat room
-        *
-        * @param String $chatid ID of Chat Room
-        * @param String $message Message to send
-        * 
-        * @access public
-        * @return void
-        */
-       function chatSay($chatid, $message)
-       {
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_chat_send " . $chatid . " \"" . $this->encodeData($message) . "\"",0,0);
-       }
-       
-       /** 
-        * Invites a user to a chat room
-        *
-        * @param String $chatid ID of Chat Room
-        * @param String $who Screenname of user
-        * @param String $message Note to include with invitiation
-        * 
-        * @access public
-        * @return void
-        */
-       function chatInvite($chatid, $who, $message)
-       {
-               $who = $this->normalize($who);
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_chat_invite " . $chatid . " \"" . $this->encodeData($message) . "\" " . $who,0,0);
-       }
-       
-       /** 
-        * Joins/Creates a new chat room
-        *
-        * @param String $name Name of the new chat room
-        * @param String $exchange Exchange of new chat room
-        * 
-        * @access public
-        * @return void
-        */
-       function joinNewChat($name, $exchange)
-       {
-               //Creates a new chat
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_chat_join " . $exchange . " \"" . $name . "\"",0,0);
-       }
-       
-       /** 
-        * Disconnect error handler, attempts to reconnect in 60 seconds
-        *
-        * @param String $message Error message (desc of where error encountered etc)
-        * 
-        * @access private
-        * @return void
-        */
-       function derror($message)
-       {
-               $this->log($message);
-               $this->log("Error");
-               fclose($this->myConnection);
-               if ((time() - $GLOBALS['errortime']) <  600){
-                       $this->log("Reconnecting in 60 Seconds");
-                       sleep(60);
-               }
-               $this->signon();
-               $GLOBALS['errortime'] = time();
-       }
-       
-       /** 
-        * Returns connection type of socket (main or rvous etc)
-        *
-        * Helper method for recieve()
-        *
-        * @param Resource $sock Socket to determine type for
-        * 
-        * @access private
-        * @return void
-        * @see receive
-        */
-       function connectionType($sock)
-       {
-               //Is it the main connection?
-               if ($sock == $this->myConnection)
-                  return CONN_TYPE_NORMAL;
-               else
-               {
-                       for($i = 0;$i<sizeof($this->myDirectConnections);$i++)
-                       {
-                               if ($sock == $this->myDirectConnections[$i]->sock)
-                                   return $this->myDirectConnections[$i]->type;
-                       }
-               }
-               return false;
-       }
-       
-       /** 
-        * Checks for new data and calls appropriate methods
-        *
-        * This method is usually called in an infinite loop to keep checking for new data
-        * 
-        * @access public
-        * @return void
-        * @see connectionType
-        */ 
-       function receive()
-       {
-               //This function will be used to get the incoming data
-               //and it will be used to call the event handlers
-               
-               //First, get an array of sockets that have data that is ready to be read
-               $ready = array();
-               $ready = $this->myConnections;
-               $numrdy = stream_select($ready, $w = NULL, $x = NULL,NULL);
-               
-               //Now that we've waited for something, go through the $ready
-               //array and read appropriately
-               
-               for($i = 0;$i<sizeof($ready);$i++)
-               {
-                       //Get the type
-                       $type = $this->connectionType($ready[$i]);
-                       if ($type == CONN_TYPE_NORMAL)
-                       {
-                               //Next step:Get the data sitting in the socket
-                               $message = $this->read_from_aim();
-                               if (strlen($message) <= 0)
-                               {
-                                       return;
-                               }
-                               
-                               //Third step: Get the command from the server
-                               @list($cmd, $rest) = explode(":", $message);
-                               
-                               //Fourth step, take the command, test the type, and pass it off
-                               //to the correct internal handler. The internal handler will
-                               //do what needs to be done on the class internals to allow
-                               //it to work, then proceed to pass it off to the user created handle
-                               //if there is one
-                               $this->log($cmd);
-                               switch($cmd)
-                               {
-                                       case 'SIGN_ON':
-                                               $this->onSignOn($message);
-                                               break;
-                                       case 'CONFIG2':
-                                               $this->onConfig($message);
-                                               break;
-                                       case 'ERROR':
-                                               $this->onError($message);
-                                               break;
-                                       case 'NICK':
-                                               $this->onNick($message);
-                                               break;
-                                       case 'IM_IN2':
-                                               $this->onImIn($message);
-                                               break;
-                                       case 'UPDATE_BUDDY2':
-                                               $this->onUpdateBuddy($message);
-                                               break;
-                                       case 'EVILED':
-                                               $this->onWarn($message);
-                                               break;
-                                       case 'CHAT_JOIN':
-                                               $this->onChatJoin($message);
-                                               break;
-                                       case 'CHAT_IN':
-                                               $this->onChatIn($message);
-                                               break;
-                                       case 'CHAT_UPDATE_BUDDY':
-                                               $this->onChatUpdate($message);
-                                               break;
-                                       case 'CHAT_INVITE':
-                                               $this->onChatInvite($message);
-                                               break;
-                                       case 'CHAT_LEFT':
-                                               $this->onChatLeft($message);
-                                               break;
-                                       case 'GOTO_URL':
-                                               $this->onGotoURL($message);
-                                               break;
-                                       case 'DIR_STATUS':
-                                               $this->onDirStatus($message);
-                                               break;
-                                       case 'ADMIN_NICK_STATUS':
-                                               $this->onAdminNick($message);
-                                               break;
-                                       case 'ADMIN_PASSWD_STATUS':
-                                               $this->onAdminPasswd($message);
-                                               break;
-                                       case 'PAUSE':
-                                               $this->onPause($message);
-                                               break;
-                                       case 'RVOUS_PROPOSE':
-                                               $this->onRvous($message);
-                                               break;
-                                       default:
-                                               $this->log("Fell through: $message");
-                                               $this->CatchAll($message);
-                                               break;
-                               }
-                       }
-                       else
-                       {
-                               for($j = 0;$j<sizeof($this->myDirectConnections);$j++)
-                               {
-                                       if ($this->myDirectConnections[$j]->sock == $ready[$i])
-                                       {
-                                               $dcon = $this->myDirectConnections[$j];
-                                               break;
-                                       }
-                               }
-                               //Now read from the dcon
-                               if ($dcon->type == CONN_TYPE_DC)
-                               {
-                                       if ($dcon->readDIM() == false)
-                                       {
-                                               $this->closeDcon($dcon);
-                                               continue;
-                                       }
-                                       
-                                       $message['message'] = $dcon->lastMessage;
-                                       if ($message['message'] == "too big")
-                                       {
-                                               $this->sendDim("Connection dropped because you sent a message larger that " . MAX_DCON_SIZE . " bytes.", $dcon->connectedTo);
-                                               $this->closeDcon($dcon);
-                                               continue;
-                                       }
-                                       $message['from'] = $dcon->connectedTo;
-                                       $this->onDimIn($message);
-                               }
-                       }
-               }
-        $this->conn->myLastReceived="";
-               //Now get out of this function because the handlers should take care
-               //of everything
-       }
-       
-       //The next block of code is all the event handlers needed by the class
-       //Some are left blank and only call the users handler because the class
-       //either does not support the command, or cannot do anything with it
-       // ---------------------------------------------------------------------
-
-       /** 
-        * Direct IM In Event Handler
-        *
-        * Called when Direct IM is received.
-        * Call's user handler (if available) for DimIn.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onDimIn($data)
-       {
-               $this->callHandler("DimIn", $data);
-       }
-       
-       /** 
-        * Sign On Event Handler
-        *
-        * Called when Sign On event occurs.
-        * Call's user handler (if available) for SIGN_ON.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onSignOn($data)
-       {
-               $this->callHandler("SignOn", $data);
-       }
-       
-       /** 
-        * Config Event Handler
-        *
-        * Called when Config data received.
-        * Call's user handler (if available) for Config.
-        * 
-        * Loads buddy list and other info
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onConfig($data)
-       {
-               $this->log("onConfig Message: " . $data);
-               
-               if (strpos($data,"CONFIG2:") === false)
-               {
-                       $this->log("get_buddy_list cannot be called at this time because I got $data");
-                       //return false;
-               }
-               $people = explode("\n",trim($data,"\n"));
-               //The first 3 elements of the array are who knows what, element 3 should be
-               //a letter followed by a person
-               
-               //AIM decided to add this wonderful new feature, the recent buddy thing, this kind of
-               //messes this funtion up, so we need to adapt it... unfortuneately, its not really
-               //clear how this works, so we are just going to add their name to the permit list.
-               
-               //Recent buddies I believe are in the format
-               //number:name:number.... I think the first number counts down from 25 how long its
-               //been... but I don't know the second number,,,,
-               
-               //TODO: Figure out the new recent buddies system
-               
-               //Note: adding that at the bottom is a quick hack and may have adverse consequences...
-               for($i = 1;$i<sizeof($people);$i++)
-               {
-                       @list($mode, $name) = explode(":", $people[$i]);
-                       switch($mode)
-                       {
-                               case 'p':
-                                       $this->myPermitList[] = $name;
-                                       break;
-                               case 'd':
-                                       $this->myBlockedList[] = $name;
-                                       break;
-                               case 'b':
-                                       $this->myBuddyList[] = $name;
-                                       break;
-                               case 'done':
-                                       break;
-                               default:
-                                       //This is assumed to be recent buddies...
-                                       $this->myPermitList[]=$name;
-                       }
-               }
-               
-               //We only get the config message once, so now we should send our pd mode
-               
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc2_set_pdmode " . $this->myPdMode,0,0);
-               //Adds yourself to the permit list
-               //This is to fix an odd behavior if you have nobody on your list
-               //the server won't send the config command... so this takes care of it
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc2_add_permit " . $this->normalize($this->myScreenName),0,0); 
-               
-               //Now we allow the user to send a list, update anything they want, etc
-               $this->callHandler("Config", $data);
-               //Now that we have taken care of what the user wants, send the init_done message
-               $this->sflapSend(SFLAP_TYPE_DATA,"toc_init_done",0,0);
-               //'VOICE_UID' 
-               //'FILE_GET_UID'
-               //'IMAGE_UID'
-               //'BUDDY_ICON_UID'
-               //'STOCKS_UID'
-               //'GAMES_UID'
-               $this->sflapSend(SFLAP_TYPE_DATA, "toc_set_caps " . IMAGE_UID . " " .  FILE_SEND_UID ." " . FILE_GET_UID . " " . BUDDY_ICON_UID . "",0,0);
-       }
-       
-
-       /** 
-        * Error Event Handler
-        *
-        * Called when an Error occurs.
-        * Call's user handler (if available) for Error.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onError($data)
-       {
-           static $errarg = '';
-               static $ERRORS = array(\r
-            0=>'Success',\r
-            901 =>'$errarg not currently available',\r
-            902 =>'Warning of $errarg not currently available',\r
-            903 =>'A message has been dropped, you are exceeding\r
-                  the server speed limit',\r
-            911 =>'Error validating input',\r
-            912 =>'Invalid account',\r
-            913 =>'Error encountered while processing request',\r
-            914 =>'Service unavailable',\r
-            950 =>'Chat in $errarg is unavailable.',\r
-            960 =>'You are sending message too fast to $errarg',\r
-            961 =>'You missed an im from $errarg because it was too big.',\r
-            962 =>'You missed an im from $errarg because it was sent too fast.',\r
-            970 =>'Failure',\r
-            971 =>'Too many matches',\r
-            972 =>'Need more qualifiers',\r
-            973 =>'Dir service temporarily unavailable',\r
-            974 =>'Email lookup restricted',\r
-            975 =>'Keyword Ignored',\r
-            976 =>'No Keywords',\r
-            977 =>'Language not supported',\r
-            978 =>'Country not supported',\r
-            979 =>'Failure unknown $errarg',\r
-            980 =>'Incorrect nickname or password.',\r
-            981 =>'The service is temporarily unavailable.',\r
-            982 =>'Your warning level is currently too high to sign on.',\r
-            983 =>'You have been connecting and\r
-                          disconnecting too frequently.  Wait 10 minutes and try again.\r
-                      If you continue to try, you will need to wait even longer.',\r
-            989 =>'An unknown signon error has occurred $errarg'\r
-            );
-               $data_array = explode(":", $data);
-               for($i=0; $i<count($data_array); $i++)
-               {
-            switch($i)
-            {
-                case 0:
-                    $cmd = $data_array[$i];
-                    break;
-                case 1:
-                    $errornum = $data_array[$i];
-                    break;
-                case 2:
-                    $errargs = $data_array[$i];
-                    break;
-            }
-               }
-               eval("\$errorstring=\"\$ERRORS[" . $errornum . "]\";");
-               $string = "\$errorstring=\"\$ERRORS[$errornum]\";";
-               //This is important information! We need 
-               // a A different outputter for errors
-               // b Just to echo it
-               //I'm just going to do a straight echo here, becuse we assume that
-               //the user will NEED to see this error. An option to supress it will
-               //come later I think. Perhaps if we did an error reporting level, similar
-               //to PHP's, and we could probably even use PHP's error outputting system
-               //I think that may be an idea.... 
-               
-               $this->log($errorstring . "\n");
-               
-               $this->callHandler("Error", $data);
-       }
-       
-       /** 
-        * Nick Event Handler
-        *
-        * Called when formatted own ScreenName is receieved
-        * Call's user handler (if available) for Nick.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onNick($data)
-       {
-               //This is our nick, so set a field called "myFormatSN" which will represent
-               //the actual name given by the server to us, NOT the normalized screen name
-               @list($cmd, $nick) = explode(":", $data);
-               $this->myFormatSN = $nick;
-               
-               $this->callHandler("Nick", $data);
-       }
-       
-       /** 
-        * IM In Event Handler
-        *
-        * Called when an Instant Message is received.
-        * Call's user handler (if available) for IMIn.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onImIn($data)
-       {
-               //Perhaps we should add an internal log for debugging purposes??
-               //But now, this should probably be handled by the user purely
-               
-               $this->callHandler("IMIn", $data);
-       }
-       
-       /** 
-        * UpdateBuddy Event Handler
-        *
-        * Called when a Buddy Update is receieved.
-        * Call's user handler (if available) for UpdateBuddy.
-        * If info is about self, updates self info (Currently ownly warning).
-        *
-        * ToDo: Keep track of idle, warning etc on Buddy List
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onUpdateBuddy($data)
-       {
-               //Again, since our class currently does not deal with other people without
-               //outside help, then this is also probably best left to the user. Though
-               //we should probably allow this to replace the setMyInfo function above
-               //by handling the input if and only if it is us
-               //Check and see that this is the command expected
-               if (strpos($data,"UPDATE_BUDDY2:") == -1)
-               {
-                       $this->log("A different message than expected was received");
-                       return false;
-               }
-               
-               //@list($cmd, $info['sn'], $info['online'], $info['warnlevel'], $info['signon'], $info['idle'], $info['uc']) = explode(":", $command['incoming']);
-
-               //@list($cmd, $sn, $online, $warning, $starttime, $idletime, $uc) = explode(":", $data);
-               $info = $this->getMessageInfo($data);
-               if ($this->normalize($info['sn']) == $this->normalize($this->myScreenName))
-               {
-                       $warning = rtrim($info['warnlevel'],"%");
-                       $this->myWarnLevel = $warning;
-                       $this->log("My warning level is $this->myWarnLevel %");
-               }
-               
-               $this->callHandler("UpdateBuddy", $data);
-       }
-       
-       /** 
-        * Warning Event Handler
-        *
-        * Called when bot is warned.
-        * Call's user handler (if available) for Warn.
-        * Updates internal warning level
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onWarn($data)
-       {
-               /*
-               For reference:
-                       $command['incoming'] .= ":0";
-                       $it = explode(":", $command['incoming']);
-                       $info['warnlevel'] = $it[1];
-                       $info['from'] = $it[2];         
-               */
-               //SImply update our warning level
-               //@list($cmd, $newwarn, $user) = explode(":", $data);
-               
-               $info = $this->getMessageInfo($data);
-               
-               $this->setWarningLevel(trim($info['warnlevel'],"%"));
-               $this->log("My warning level is $this->myWarnLevel %");
-               
-               $this->callHandler("Warned", $data);
-       }
-       
-       /** 
-        * Chat Join Handler
-        *
-        * Called when bot joins a chat room.
-        * Call's user handler (if available) for ChatJoin.
-        * Adds chat room to internal chat room list.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onChatJoin($data)
-       {
-               @list($cmd, $rmid, $rmname) = explode(":", $data);
-               $this->myChatRooms[$rmid] = 0;
-               
-               $this->callHandler("ChatJoin", $data);
-       }
-       
-       /** 
-        * Returns number of chat rooms bot is in
-        * 
-        * @access public
-        * @param String $data Raw message from server
-        * @return int
-        */
-       function getNumChats()
-       {
-               return count($this->myChatRooms);
-       }
-       
-       /** 
-        * Chat Update Handler
-        *
-        * Called when bot received chat room data (user update).
-        * Call's user handler (if available) for ChatUpdate.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onChatUpdate($data)
-       {
-               $stuff = explode(":", $data);
-               $people = sizeof($stuff);
-               $people -= 2;
-               
-               $this->callHandler("ChatUpdate", $data);
-       }
-       
-       /** 
-        * Chat Message In Handler
-        *
-        * Called when chat room message is received.
-        * Call's user handler (if available) for ChatIn.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onChatIn($data)
-       {
-               $this->callHandler("ChatIn", $data);
-       }
-       
-       
-       /** 
-        * Chat Invite Handler
-        *
-        * Called when bot is invited to a chat room.
-        * Call's user handler (if available) for ChatInvite.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onChatInvite($data)
-       {
-               //@list($cmd, $name, $id, $from, $data) = explode(":", $data,6);
-               //$data = explode(":",$data,6);
-               //$nm = array();
-               //@list($nm['cmd'],$nm['name'],$nm['id'],$nm['from'],$nm['message']) = $data;
-               
-               
-               $this->callHandler("ChatInvite", $data);
-       }
-       
-       /** 
-        * Chat Left Handler
-        *
-        * Called when bot leaves a chat room
-        * Call's user handler (if available) for ChatLeft.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onChatLeft($data)
-       {
-               $info = $this->getMessageInfo($data);
-               unset($this->myChatRooms[$info['chatid']]);
-               $this->callHandler("ChatLeft", $data);
-       }
-       
-       /** 
-        * Goto URL Handler
-        *
-        * Called on GotoURL.
-        * Call's user handler (if available) for GotoURL.
-        * No detailed info available for this / Unsupported.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onGotoURL($data)
-       {
-               //This is of no use to the internal class
-               
-               $this->callHandler("GotoURL", $data);
-       }
-       
-       /** 
-        * Dir Status Handler
-        *
-        * Called on DirStatus.
-        * Call's user handler (if available) for DirStatus.
-        * No detailed info available for this / Unsupported.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onDirStatus($data)
-       {
-               //This is not currently suported
-               
-               $this->callHandler("DirStatus", $data);
-       }
-       
-       /** 
-        * AdminNick Handler
-        *
-        * Called on AdminNick.
-        * Call's user handler (if available) for AdminNick.
-        * No detailed info available for this / Unsupported.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onAdminNick($data)
-       {
-               //NOt particularly useful to us         
-               $this->callHandler("AdminNick", $data);
-       }
-       
-       /** 
-        * AdminPasswd Handler
-        *
-        * Called on AdminPasswd.
-        * Call's user handler (if available) for AdminPasswd.
-        * No detailed info available for this / Unsupported.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onAdminPasswd($data)
-       {
-               //Also not particlualry useful to the internals
-               $this->callHandler("AdminPasswd", $data);
-       }
-       
-       /** 
-        * Pause Handler
-        *
-        * Called on Pause.
-        * Call's user handler (if available) for Pause.
-        * No detailed info available for this / Unsupported.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onPause($data)
-       {
-               //This is pretty useless to us too...
-               
-               $this->callHandler("Pause", $data);
-       }
-       
-       /** 
-        * Direct Connection Handler
-        *
-        * Called on Direct Connection Request(Rvous).
-        * Call's user handler (if available) for Rvous.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function onRvous($data)
-       {
-               $this->callHandler("Rvous", $data);
-       }
-       
-       /** 
-        * CatchAll Handler
-        *
-        * Called for unrecognized commands.
-        * Logs unsupported messages to array.
-        * Call's user handler (if available) for CatchAll.
-        * 
-        * @access private
-        * @param String $data Raw message from server
-        * @return void
-        */
-       function CatchAll($data)
-       {
-               //Add to a log of unsupported messages.
-               
-               $this->unsupported[] = $data;
-               //$this->log($data);
-               //print_r($data);
-               
-               $this->callHandler("CatchAll", $data);
-       }
-       
-       /** 
-        * Calls User Handler
-        *
-        * Calls registered handler for a specific event.
-        * 
-        * @access private
-        * @param String $event Command (event) name (Rvous etc)
-        * @param String $data Raw message from server
-        * @see registerHandler
-        * @return void
-        */
-       function callHandler($event, $data)
-       {
-               
-               if (isset($this->myEventHandlers[$event]))
-               {
-                       //$function = $this->myEventHandlers[$event] . "(\$data);";
-                       //eval($function);
-                       call_user_func($this->myEventHandlers[$event], $data);
-               }
-               else
-               {
-                       $this->noHandler($data);
-               }
-       }
-       
-       /** 
-        * Registers a user handler
-        * 
-        * Handler List
-        * SignOn, Config, ERROR, NICK, IMIn, UpdateBuddy, Eviled, Warned, ChatJoin
-        * ChatIn, ChatUpdate, ChatInvite, ChatLeft, GotoURL, DirStatus, AdminNick
-        * AdminPasswd, Pause, Rvous, DimIn, CatchAll
-        *
-        * @access private
-        * @param String $event Event name
-        * @param String $handler User function to call
-        * @see callHandler
-        * @return boolean Returns true if successful
-        */
-       function registerHandler($event, $handler)
-       {
-               if (is_callable($handler))
-               {
-                       $this->myEventHandlers[$event] = $handler;
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-    /** 
-     * No user handler method fall back.
-     *
-     * Does nothing with message.
-     *
-     * @access public
-     * @param String $message Raw server message
-     * @return void
-     */
-    function noHandler($message)
-    {
-           //This function intentionally left blank
-           //This is where the handlers will fall to for now. I plan on including a more
-           //efficent check to avoid the apparent stack jumps that this code will produce
-           //But for now, just fall into here, and be happy
-           return;
-    }
-
-    //GLOBAL FUNCTIONS
-
-    /** 
-     * Finds type, and returns as part of array ['type']
-     * Puts message in ['incoming']
-     *
-     * Helper method for getMessageInfo.
-     *
-     * @access public
-     * @param String $message Raw server message
-     * @see msg_parse
-     * @see getMessageInfo
-     * @return array
-     */
-    static function msg_type($message)
-    {
-           $command = array();
-           @list($cmd, $rest) = explode(":", $message);
-           switch($cmd)
-           {
-                   case 'IM_IN2':
-                           $type = AIM_TYPE_MSG;
-                   break;
-               
-                   case 'UPDATE_BUDDY2':
-                           $type = AIM_TYPE_UPDATEBUDDY;
-                   break;
-               
-                   case 'EVILED':
-                           $type = AIM_TYPE_WARN;
-                   break;
-               
-                   case 'SIGN_ON':
-                           $type = AIM_TYPE_SIGNON;
-                   break;
-               
-                   case 'NICK':
-                           $type = AIM_TYPE_NICK;
-                   break;
-               
-                   case 'ERROR':
-                           $type = AIM_TYPE_ERROR;
-                   break;
-               
-                   case 'CHAT_JOIN':
-                           $type = AIM_TYPE_CHATJ;
-                   break;
-               
-                   case 'CHAT_IN':
-                           $type = AIM_TYPE_CHATI;
-                   break;
-               
-                   case 'CHAT_UPDATE_BUDDY':
-                           $type = AIM_TYPE_CHATUPDBUD;
-                   break;
-               
-                   case 'CHAT_INVITE':
-                           $type = AIM_TYPE_CHATINV;
-                   break;
-               
-                   case 'CHAT_LEFT':
-                           $type = AIM_TYPE_CHATLE;
-                   break;
-               
-                   case 'GOTO_URL':
-                           $type = AIM_TYPE_URL;
-                   break;
-               
-                   case 'ADMIN_NICK_STATUS':
-                           $type = AIM_TYPE_NICKSTAT;
-                   break;
-               
-                   case 'ADMIN_PASSWD_STATUS':
-                           $type = AIM_TYPE_PASSSTAT;
-                   break;
-               
-                   case 'RVOUS_PROPOSE':
-                           $type = AIM_TYPE_RVOUSP;
-                   break;
-               
-                   default:
-                           $type = AIM_TYPE_NOT_IMPLEMENTED;
-                   break;
-           }
-           $command['type'] = $type;
-           $command['incoming'] = $message;
-           return $command;
-    }
-
-    /** 
-     * Parses message and splits into info array
-     *
-     * Helper method for getMessageInfo.
-     *
-     * @access public
-     * @param String $command Message and type (after msg_type)
-     * @see msg_type
-     * @see getMessageInfo
-     * @return array
-     */
-    static function msg_parse($command)
-    {
-           $info = array();
-           switch($command['type'])
-           {
-                   case AIM_TYPE_WARN:
-                           $command['incoming'] .= ":0";
-                           $it = explode(":", $command['incoming']);
-                           $info['warnlevel'] = $it[1];
-                           $info['from'] = $it[2];
-
-                   break;
-               
-                   case AIM_TYPE_MSG:
-                           $it = explode(":", $command['incoming'],5);
-                           $info['auto'] = $it[2];
-                           $info['from'] = $it[1];
-                           $info['message'] = $it[4];
-                   break;
-               
-                   case AIM_TYPE_UPDATEBUDDY:
-                           @list($cmd, $info['sn'], $info['online'], $info['warnlevel'], $info['signon'], $info['idle'], $info['uc']) = explode(":", $command['incoming']);
-                   break;
-               
-                   case AIM_TYPE_SIGNON:
-                           @list($cmd, $info['version']) = explode(":", $command['incoming']);         
-                   break;
-               
-                   case AIM_TYPE_NICK:
-                           @list($cmd, $info['nickname']) = explode(":", $command['incoming']);                
-                   break;
-                   case AIM_TYPE_ERROR:
-                           @list($cmd, $info['errorcode'], $info['args']) = explode(":", $command['incoming']);
-                   break;
-               
-                   case AIM_TYPE_CHATJ:
-                           @list($cmd, $info['chatid'], $info['chatname']) = explode(":", $command['incoming']);
-                   break;
-               
-                   case AIM_TYPE_CHATI:
-                           @list($cmd, $info['chatid'], $info['user'], $info['whisper'], $info['message']) = explode(":", $command['incoming'],5);
-                   break;
-               
-                   case AIM_TYPE_CHATUPDBUD:
-                           @list($cmd, $info['chatid'], $info['inside'], $info['userlist']) = explode(":", $command['incoming'],3);    
-                   break;
-               
-                   case AIM_TYPE_CHATINV:
-                           @list($cmd, $info['chatname'], $info['chatid'], $info['from'], $info['message']) = explode(":", $command['incoming'],5);
-                   break;
-               
-                   case AIM_TYPE_CHATLE:
-                           @list($cmd, $info['chatid']) = explode(":", $command['incoming']);          
-                   break;
-               
-                   case AIM_TYPE_URL:
-                           @list($cmd, $info['windowname'], $info['url']) = explode(":", $command['incoming'],3);
-                   break;
-               
-                   case AIM_TYPE_RVOUSP:
-                           @list($cmd,$info['user'],$info['uuid'],$info['cookie'],$info['seq'],$info['rip'],$info['pip'],$info['vip'],$info['port'],$info['tlvs']) = explode(":",$command['incoming'],10);
-                   break;
-               
-                   case AIM_TYPE_NICKSTAT:
-                   case AIM_TYPE_PASSSTAT:
-                           @list($cmd, $info['returncode'], $info['opt']) = explode(":", $command['incoming'],3);              
-                   break;
-               
-                   default:
-                   $info['command'] = $command['incoming'];
-           }
-           return $info;
-    }
-
-    /** 
-     * Returns a parsed message
-     *
-     * Calls msg_parse(msg_type( to first determine message type and then parse accordingly
-     *
-     * @access public
-     * @param String $command Raw server message
-     * @see msg_type
-     * @see msg_parse
-     * @return array
-     */
-    static function getMessageInfo($message)
-    {
-           return self::msg_parse(self::msg_type($message));
-    }
-
-    /** 
-     * Checks socket for end of file
-     *
-     * @access public
-     * @param Resource $socket Socket to check
-     * @return boolean true if end of file (socket) 
-     */
-    static function socketcheck($socket){
-           $info = stream_get_meta_data($socket);
-           return $info['eof'];
-           //return(feof($socket));
-    }
-}
-
-?>
diff --git a/plugins/Aim/extlib/phptoclib/dconnection.php b/plugins/Aim/extlib/phptoclib/dconnection.php
deleted file mode 100644 (file)
index c6be25f..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-
-//The following class was created June 30th 2004 by Jeremy(pickle)
-//This class is designed to handle a direct connection
-
-class Dconnect
-{
-       var $sock;
-       var $lastReceived;
-       var $lastMessage;
-       var $connected;
-       var $cookie;
-       var $type=2;
-       var $connectedTo;
-       
-       
-       function Dconnect($ip,$port)
-       {
-               if(!$this->connect($ip,$port))
-               {
-                       sEcho("Connection failed constructor");
-                       $this->connected=false;
-               }
-               else
-                       $this->connected=true;
-               
-               $this->lastMessage="";
-               $this->lastReceived="";
-       }
-       
-       function readDIM()
-       {
-               /*
-                       if(!$this->stuffToRead())
-                       {
-                               sEcho("Nothing to read");
-                               $this->lastMessage=$this->lastReceived="";
-                               return false;
-                       }
-               */
-               $head=fread($this->sock,6);
-               if(strlen($head)<=0)
-               {
-                       sEcho("The direct connection has been closed");
-                       return false;
-               }
-               $minihead=unpack("a4ver/nsize",$head);
-               if($minihead['size'] <=0)
-                 return;
-               $headerinfo=unpack("nchan/nsix/nzero/a6cookie/Npt1/Npt2/npt3/Nlen/Npt/npt0/ntype/Nzerom/a*sn",fread($this->sock,($minihead['size']-6)));
-               $allheader=array_merge($minihead,$headerinfo);
-               sEcho($allheader);
-               if($allheader['len']>0 && $allheader['len'] <= MAX_DIM_SIZE)
-               {
-                       $left=$allheader['len'];
-                       $stuff="";
-                       $nonin=0;
-                       while(strlen($stuff) < $allheader['len'] && $nonin<3)
-                       {
-                               $stuffg=fread($this->sock,$left);
-                               if(strlen($stuffg)<0)
-                               {
-                                       $nonin++;
-                                       continue;
-                               }
-                               $left=$left - strlen($stuffg);
-                               $stuff.=$stuffg;
-                       }
-                       $data=unpack("a*decoded",$stuff);
-               }
-               
-               else if($allheader['len'] > MAX_DIM_SIZE)
-               {
-                       $data['decoded']="too big";
-               }
-               
-               else
-                       $data['decoded']="";
-               $all=array_merge($allheader,$data);
-               
-               $this->lastReceived=$all;
-               $this->lastMessage=$all['decoded'];
-               
-               //$function=$this->DimInf . "(\$all);";
-               //eval($function);
-               
-               return $all;
-       }
-       
-       function sendMessage($message,$sn)
-       {
-               //Make the "mini header"
-               $minihead=pack("a4n","ODC2",76);
-               $header=pack("nnna6NNnNNnnNa*",1,6,0,$this->cookie,0,0,0,strlen($message),0,0,96,0,$sn);
-               $bighead=$minihead . $header;
-               while(strlen($bighead)<76)
-                       $bighead.=pack("c",0);
-               
-               $tosend=$bighead . pack("a*",$message);
-               $w=array($this->sock);
-               stream_select($r=NULL,$w,$e=NULL,NULL);
-               //Now send it all
-               fputs($this->sock,$tosend,strlen($tosend));
-       }
-       function stuffToRead()
-       {
-               //$info=stream_get_meta_data($this->sock);
-               //sEcho($info);
-               $s=array($this->sock);
-               $changed=stream_select($s,$fds=NULL,$m=NULL,0,20000);
-               return ($changed>0);
-       }
-       
-       function close()
-       {
-               $this->connected=false;
-               return fclose($this->sock);
-       }
-       
-       function connect($ip,$port)
-       {
-               $this->sock=fsockopen($ip,$port,$en,$es,3);
-               if(!$this->sock)
-               {  sEcho("Connection failed");
-                       $this->sock=null;
-                       return false;
-               }
-               return true;
-       }
-}
-
-
-class FileSendConnect
-{
-       var $sock;
-       var $lastReceived;
-       var $lastMessage;
-       var $connected;
-       var $cookie;
-       var $tpye=3;
-       
-       
-       function FileSendConnect($ip,$port)
-       {
-               if(!$this->connect($ip,$port))
-               {
-                       sEcho("Connection failed constructor");
-                       $this->connected=false;
-               }
-               else
-                       $this->connected=true;
-               
-               $this->lastMessage="";
-               $this->lastReceived="";
-       }
-       
-       function readDIM()
-       {
-               
-                       if(!$this->stuffToRead())
-                       {
-                               sEcho("Nothing to read");
-                               $this->lastMessage=$this->lastReceived="";
-                               return;
-                       }
-               
-               $minihead=unpack("a4ver/nsize",fread($this->sock,6));
-               if($minihead['size'] <=0)
-                 return;
-               $headerinfo=unpack("nchan/nsix/nzero/a6cookie/Npt1/Npt2/npt3/Nlen/Npt/npt0/ntype/Nzerom/a*sn",fread($this->sock,($minihead['size']-6)));
-               $allheader=array_merge($minihead,$headerinfo);
-               sEcho($allheader);
-               if($allheader['len']>0)
-                       $data=unpack("a*decoded",fread($this->sock,$allheader['len']));
-               else
-                       $data['decoded']="";
-               $all=array_merge($allheader,$data);
-               
-               $this->lastReceived=$all;
-               $this->lastMessage=$all['decoded'];
-               
-               //$function=$this->DimInf . "(\$all);";
-               //eval($function);
-               
-               return $all;
-       }
-       
-       function sendMessage($message,$sn)
-       {
-               //Make the "mini header"
-               $minihead=pack("a4n","ODC2",76);
-               $header=pack("nnna6NNnNNnnNa*",1,6,0,$this->cookie,0,0,0,strlen($message),0,0,96,0,$sn);
-               $bighead=$minihead . $header;
-               while(strlen($bighead)<76)
-                       $bighead.=pack("c",0);
-               
-               $tosend=$bighead . pack("a*",$message);
-               
-               //Now send it all
-               fwrite($this->sock,$tosend,strlen($tosend));
-       }
-       function stuffToRead()
-       {
-               //$info=stream_get_meta_data($this->sock);
-               //sEcho($info);
-               $s=array($this->sock);
-               $changed=stream_select($s,$fds=NULL,$m=NULL,1);
-               return ($changed>0);
-       }
-       
-       function close()
-       {
-               $this->connected=false;
-               fclose($this->sock);
-               unset($this->sock);
-               return true;
-       }
-       
-       function connect($ip,$port)
-       {
-               $this->sock=fsockopen($ip,$port,$en,$es,3);
-               if(!$this->sock)
-               {  sEcho("Connection failed to" . $ip . ":" . $port);
-                       $this->sock=null;
-                       return false;
-               }
-               return true;
-       }
-}
diff --git a/plugins/Aim/locale/Aim.pot b/plugins/Aim/locale/Aim.pot
deleted file mode 100644 (file)
index 323e95c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: No idea what the use case for this message is.
-#: aimmanager.php:80
-msgid "Send me a message to post a notice"
-msgstr ""
-
-#. TRANS: Display name.
-#: AimPlugin.php:60
-msgid "AIM"
-msgstr ""
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-#: AimPlugin.php:149
-msgid "Must specify a user."
-msgstr ""
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-#: AimPlugin.php:153
-msgid "Must specify a password."
-msgstr ""
-
-#. TRANS: Plugin description.
-#: AimPlugin.php:168
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
diff --git a/plugins/Aim/locale/af/LC_MESSAGES/Aim.po b/plugins/Aim/locale/af/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index b634420..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Afrikaans (Afrikaans)
-# Exported from translatewiki.net
-#
-# Author: Naudefj
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Afrikaans <https://translatewiki.net/wiki/Portal:af>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: af\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Stuur my 'n boodskap om 'n kennisgewing te pos"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr ""
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr ""
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Die AIM-uitbreiding laat gebruikers toe om kennisgewings oor die AIM-netwerk "
-"te stuur en te ontvang."
diff --git a/plugins/Aim/locale/ca/LC_MESSAGES/Aim.po b/plugins/Aim/locale/ca/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index ff774de..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Translation of StatusNet - Aim to Catalan (català)
-# Exported from translatewiki.net
-#
-# Author: Dvdgmz
-# Author: Gemmaa
-# Author: Toniher
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:33+0000\n"
-"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Envia'm un missatge per publicar un avís"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Has d'especificar un usuari"
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Has d'especificar una contrassenya"
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"El connector XMPP permet als usuaris enviar i rebre avisos des de la xarxa "
-"XMPP/Jabber."
diff --git a/plugins/Aim/locale/de/LC_MESSAGES/Aim.po b/plugins/Aim/locale/de/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 5beba69..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Translation of StatusNet - Aim to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Giftpflanze
-# Author: Marcel083
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Sende mir eine Nachricht um eine Notiz zu schreiben"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Du musst einen Benutzer angeben."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Du musst ein Passwort angeben."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Das AIM-Plugin ermöglicht es Benutzern, Nachrichten über das AIM-Netzwerk zu "
-"senden und zu empfangen."
diff --git a/plugins/Aim/locale/es/LC_MESSAGES/Aim.po b/plugins/Aim/locale/es/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 6eaa921..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Translation of StatusNet - Aim to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Erchache2000
-# Author: Od1n
-# Author: Plaxed
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Enviarme un mensaje para publicar un aviso"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Debe especificar un usuario."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Debe especificar una contraseña."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"El plugin AIM permite a los usuarios enviar y recibir mensajes de una red "
-"AIM."
diff --git a/plugins/Aim/locale/eu/LC_MESSAGES/Aim.po b/plugins/Aim/locale/eu/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 874f0d9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Basque <https://translatewiki.net/wiki/Portal:eu>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: eu\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Bidali mezu bat niri ohar bat argitartzeko"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Erabiltzaile bat zehaztu."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Pasahitz bat zehaztu."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"AIM pluginak erabiltzaileei AIM sare bidez mezuak bidali eta jasotzea "
-"ahalbidetzen die."
diff --git a/plugins/Aim/locale/fi/LC_MESSAGES/Aim.po b/plugins/Aim/locale/fi/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index e9ef6a7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Finnish (suomi)
-# Exported from translatewiki.net
-#
-# Author: Tne
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Finnish <https://translatewiki.net/wiki/Portal:fi>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fi\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Lähetä minulle viesti lähettääksesi päivityksen"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Käyttäjä pitää määrittää."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Salasana pitää määrittää."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"AIM-liitännäisen avulla käyttäjät voivat lähettää ja vastaanottaa "
-"päivityksiä AIM-verkoston kautta."
diff --git a/plugins/Aim/locale/fr/LC_MESSAGES/Aim.po b/plugins/Aim/locale/fr/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 8a20fec..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Translation of StatusNet - Aim to French (français)
-# Exported from translatewiki.net
-#
-# Author: Coyau
-# Author: Iketsi
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Envoyez-moi un message pour envoyer un avis"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Vous devez indiquer un utilisateur."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Vous devez indiquer un mot de passe."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Le plugin AIM permet aux utilisateurs d'envoyer et de recevoir des messages "
-"depuis le réseau AIM."
diff --git a/plugins/Aim/locale/gl/LC_MESSAGES/Aim.po b/plugins/Aim/locale/gl/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 0f9e3f6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Envíame unha mensaxe para publicar unha nota"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Cómpre especificar un usuario."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Cómpre especificar un contrasinal."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"O complemento AIM permite aos usuarios enviar e recibir mensaxes desde a "
-"rede de AIM."
diff --git a/plugins/Aim/locale/ia/LC_MESSAGES/Aim.po b/plugins/Aim/locale/ia/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index bc198b8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Inviar me un message pro publicar un nota"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Es necessari specificar un usator."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Es necessari specificar un contrasigno."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Le plug-in de AIM permitte que usatores invia e recipe notas per le rete de "
-"AIM."
diff --git a/plugins/Aim/locale/it/LC_MESSAGES/Aim.po b/plugins/Aim/locale/it/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index b48753f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Translation of StatusNet - Aim to Italian (italiano)
-# Exported from translatewiki.net
-#
-# Author: Od1n
-# Author: Ximo17
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Mandami un messaggio per pubblicare una notizia"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Devi specificare un utente."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Devi specificare una password."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Il plugin per AIM consente agli utenti di inviare e ricevere le notizie "
-"tramite la rete AIM."
diff --git a/plugins/Aim/locale/mk/LC_MESSAGES/Aim.po b/plugins/Aim/locale/mk/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index cefdc67..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Испрати ми порака за да објавам забелешка"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Мора да наведете корисник."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Мора да наведете лозинка."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Приклучокот AIM им овозможува на корисниците да испраќаат и примаат "
-"забелешки преку мрежата AIM."
diff --git a/plugins/Aim/locale/ms/LC_MESSAGES/Aim.po b/plugins/Aim/locale/ms/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index d15de49..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Malay <https://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Hantarkan pesanan kepada saya untuk mengirim notis"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Pengguna mesti ditentukan."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Kata laluan mesti ditentukan."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Pemalam AIM membolehkan pengguna menghantar dan menerima notis menerusi "
-"rangkaian AIM."
diff --git a/plugins/Aim/locale/nl/LC_MESSAGES/Aim.po b/plugins/Aim/locale/nl/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 6869d79..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Mij een bericht sturen om een mededeling te verzenden"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Er moet een gebruiker opgegeven worden."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Er moet een wachtwoord opgegeven worden."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Maakt het mogelijk om mededelingen te zenden naar en ontvangen van een AIM-"
-"netwerk."
diff --git a/plugins/Aim/locale/pl/LC_MESSAGES/Aim.po b/plugins/Aim/locale/pl/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 56a4cea..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Translation of StatusNet - Aim to Polish (polski)
-# Exported from translatewiki.net
-#
-# Author: BeginaFelicysym
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:34+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
-"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Wyślij do mnie wiadomość by dodać ogłoszenie"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Należy określić użytkownika."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Należy określić hasło."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Wtyczka AIM umożliwia użytkownikom wysyłanie i otrzymywanie powiadomień w "
-"sieci AIM."
diff --git a/plugins/Aim/locale/pt/LC_MESSAGES/Aim.po b/plugins/Aim/locale/pt/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 82fedba..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Portuguese (português)
-# Exported from translatewiki.net
-#
-# Author: SandroHc
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:35+0000\n"
-"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Envie-me uma mensagem para colocar uma notícia"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr ""
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr ""
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"O plugin AIM permite aos utilizadores enviar e receber avisos sobre a rede "
-"AIM."
diff --git a/plugins/Aim/locale/sv/LC_MESSAGES/Aim.po b/plugins/Aim/locale/sv/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index ac000fb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Translation of StatusNet - Aim to Swedish (svenska)
-# Exported from translatewiki.net
-#
-# Author: Jamminjohn
-# Author: WikiPhoenix
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:35+0000\n"
-"Language-Team: Swedish <https://translatewiki.net/wiki/Portal:sv>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: sv\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr ""
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Måste ange en användare."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Du måste ange ett lösenord."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"AIM-tillägget tillåter användare skicka och ta emot meddelanden över AIM-"
-"nätverket."
diff --git a/plugins/Aim/locale/tl/LC_MESSAGES/Aim.po b/plugins/Aim/locale/tl/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index f8c6c1d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:35+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Padalhan ako ng isang mensahe upang makapagpaskil ng isang pabatid"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Kailangang tumukoy ng isang tagagamit."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Kailangang tumukoy ng isang hudyat."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Nagpapahintulot sa mga tagagamit ang pampasak na AIM upang makapagpadala at "
-"makatanggap ng mga pabatid sa ibabaw ng kalambatan ng AIM."
diff --git a/plugins/Aim/locale/uk/LC_MESSAGES/Aim.po b/plugins/Aim/locale/uk/LC_MESSAGES/Aim.po
deleted file mode 100644 (file)
index 2acc6ae..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Translation of StatusNet - Aim to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Aim\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:35+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-18 16:18:38+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-aim\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: No idea what the use case for this message is.
-msgid "Send me a message to post a notice"
-msgstr "Надішліть мені повідомлення, щоб опублікувати свій допис"
-
-#. TRANS: Display name.
-msgid "AIM"
-msgstr "AIM"
-
-#. TRANS: Exception thrown in AIM plugin when user has not been specified.
-msgid "Must specify a user."
-msgstr "Необхідно зазначити користувача."
-
-#. TRANS: Exception thrown in AIM plugin when password has not been specified.
-msgid "Must specify a password."
-msgstr "Необхідно вказати пароль."
-
-#. TRANS: Plugin description.
-msgid ""
-"The AIM plugin allows users to send and receive notices over the AIM network."
-msgstr ""
-"Додаток AIM дозволяє користувачам надсилати і отримувати дописи у мережі AIM."
index 7d2f29c56892b2bdac08df0799530633f50fb4ba..6ff1cb19deafe246b3702164dbb1854f5939459c 100644 (file)
@@ -100,7 +100,7 @@ class AnonymousFavePlugin extends Plugin
         $action->inlineScript('SN.U.NoticeFavor();');
     }
 
-    function onStartInitializeRouter($m)
+    function onStartInitializeRouter(URLMapper $m)
     {
         $m->connect('main/anonfavor', array('action' => 'AnonFavor'));
         $m->connect('main/anondisfavor', array('action' => 'AnonDisFavor'));
index 5fbbfb512446bfed689d273d167ef9113b93c56e..c6695667725d904683e38d926568ee59dfd881d2 100644 (file)
@@ -44,6 +44,8 @@ class AuthCryptPlugin extends AuthenticationPlugin
 
     function checkPassword($username, $password)
     {
+        $username = Nickname::normalize($username);
+
         $user = User::getKV('nickname', $username);
         if (!($user instanceof User)) {
             return false;
@@ -81,6 +83,8 @@ class AuthCryptPlugin extends AuthenticationPlugin
     // $oldpassword is already verified when calling this function... shouldn't this be private?!
     function changePassword($username, $oldpassword, $newpassword)
     {
+        $username = Nickname::normalize($username);
+
         if (!$this->password_changeable) {
             return false;
         }
index db2d7b0152f54a4aa6d54de1257372184df5dd81..0f0bcd24c01be68d15a9222ed4150d79bed028a1 100644 (file)
@@ -92,7 +92,7 @@ class AutocompleteAction extends Action
     protected function prepare(array $args=array())
     {
         // If we die, show short error messages.
-        StatusNet::setApi(true);
+        GNUsocial::setApi(true);
 
         parent::prepare($args);
 
index 4e7058dd9dd17ef556528c585e12ed1df16e2af5..ed1ea4225d10865b14fb7001e1b0940e37b7b026 100644 (file)
@@ -13,7 +13,7 @@ SN.Init.NoticeFormSetup = function(form) {
 
     // Only attach to traditional-style forms
     var textarea = form.find('.notice_data-text:first');
-    if (textarea.length == 0) {
+    if (textarea.length === 0) {
         return;
     }
 
@@ -69,3 +69,69 @@ SN.Init.NoticeFormSetup = function(form) {
                 .appendTo(ul);
         };
 };
+
+/**
+ * Called when a people tag edit box is shown in the interface
+ *
+ * - loads the jQuery UI autocomplete plugin
+ * - sets event handlers for tag completion
+ *
+ */
+SN.Init.PeopletagAutocomplete = function(txtBox) {
+    var split,
+        extractLast;
+
+    split = function(val) {
+        return val.split( /\s+/ );
+    };
+
+     extractLast = function(term) {
+        return split(term).pop();
+    };
+
+    // don't navigate away from the field on tab when selecting an item
+    txtBox
+        .on('keydown', function(event) {
+            if (event.keyCode === $.ui.keyCode.TAB &&
+                    $(this).data('ui-autocomplete').menu.active) {
+                event.preventDefault();
+            }
+        })
+        .autocomplete({
+            minLength: 0,
+            source: function(request, response) {
+                // delegate back to autocomplete, but extract the last term
+                response($.ui.autocomplete.filter(
+                    SN.C.PtagACData, extractLast(request.term)));
+            },
+            focus: function () {
+                return false;
+            },
+            select: function(event, ui) {
+                var terms = split(this.value);
+                terms.pop();
+                terms.push(ui.item.value);
+                terms.push('');
+                this.value = terms.join(' ');
+                return false;
+            }
+        })
+        .data('ui-autocomplete')
+        ._renderItem = function (ul, item) {
+            // FIXME: with jQuery UI you cannot have it highlight the match
+            var _l = '<a class="ptag-ac-line-tag">' + item.tag +
+                     ' <em class="privacy_mode">' + item.mode + '</em>' +
+                     '<span class="freq">' + item.freq + '</span></a>';
+
+            return $('<li/>')
+                    .addClass('mode-' + item.mode)
+                    .addClass('ptag-ac-line')
+                    .data('item.autocomplete', item)
+                    .append(_l)
+                    .appendTo(ul);
+        };
+};
+
+$(document).on('click', '.peopletags_edit_button', function () {
+    SN.Init.PeopletagAutocomplete($(this).closest('dd').find('[name="tags"]'));
+});
index 4491c273294d5c0d9bd133bad02e12e6031f27d6..790fa9d8b0c29efb6b3d5ffa8eaeb51e6e410b7d 100644 (file)
@@ -433,17 +433,17 @@ class BlacklistPlugin extends Plugin
         return $hostname;
     }
 
-    function onStartHandleFeedEntry($activity)
+    function onStartHandleFeedEntry(Activity $activity)
     {
         return $this->_checkActivity($activity);
     }
 
-    function onStartHandleSalmon($activity)
+    function onStartHandleSalmon(Activity $activity)
     {
         return $this->_checkActivity($activity);
     }
 
-    function _checkActivity($activity)
+    function _checkActivity(Activity $activity)
     {
         $actor = $activity->actor;
 
index fb2712f5658189c7e25eaff70ed37bfaae0ab461..fe357941c03bcc4fe88a90a2cc550280ab15282f 100644 (file)
@@ -47,7 +47,7 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
 class Homepage_blacklist extends Managed_DataObject
 {
     public $__table = 'homepage_blacklist'; // table name
-    public $pattern;                        // varchar(255) pattern
+    public $pattern;                        // varchar(191) pattern   not 255 because utf8mb4 takes more space
     public $created;                        // datetime not_null
     public $modified;                       // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -55,7 +55,7 @@ class Homepage_blacklist extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'pattern' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'blacklist pattern'),
+                'pattern' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'blacklist pattern'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index f4f387a2e02e6524a46d96c77d83dd0937d1bae2..b045fd17cebfdd5c170e1fee326139fb15a35cbc 100644 (file)
@@ -47,7 +47,7 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
 class Nickname_blacklist extends Managed_DataObject
 {
     public $__table = 'nickname_blacklist'; // table name
-    public $pattern;                        // varchar(255) pattern
+    public $pattern;                        // varchar(191) pattern   not 255 because utf8mb4 takes more space
     public $created;                        // datetime not_null
     public $modified;                       // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -55,7 +55,7 @@ class Nickname_blacklist extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'pattern' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'blacklist pattern'),
+                'pattern' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'blacklist pattern'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
diff --git a/plugins/Blog/BlogPlugin.php b/plugins/Blog/BlogPlugin.php
deleted file mode 100644 (file)
index 7231462..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * A microapp to implement lite blogging
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Blog plugin
- *
- * Many social systems have a way to write and share long-form texts with
- * your network. This microapp plugin lets users post blog entries.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class BlogPlugin extends MicroAppPlugin
-{
-
-    var $oldSaveNew = true;
-
-    /**
-     * Database schema setup
-     *
-     * @see Schema
-     * @see ColumnDef
-     *
-     * @return boolean hook value; true means continue processing, false means stop.
-     */
-    function onCheckSchema()
-    {
-        $schema = Schema::get();
-
-        $schema->ensureTable('blog_entry', Blog_entry::schemaDef());
-
-        return true;
-    }
-    
-    public function newFormAction(){
-        return 'newblogentry';
-    }
-
-    /**
-     * Map URLs to actions
-     *
-     * @param URLMapper $m path-to-action mapper
-     *
-     * @return boolean hook value; true means continue processing, false means stop.
-     */
-    public function onRouterInitialized(URLMapper $m)
-    {
-        $m->connect('blog/new',
-                    array('action' => 'newblogentry'));
-        $m->connect('blog/:id',
-                    array('action' => 'showblogentry'),
-                    array('id' => UUID::REGEX));
-        return true;
-    }
-
-    function onPluginVersion(array &$versions)
-    {
-        $versions[] = array('name' => 'Blog',
-                            'version' => GNUSOCIAL_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:Blog',
-                            'rawdescription' =>
-                            // TRANS: Plugin description.
-                            _m('Let users write and share long-form texts.'));
-        return true;
-    }
-
-    function appTitle()
-    {
-        // TRANS: Blog application title.
-        return _m('TITLE','Blog');
-    }
-
-    function tag()
-    {
-        return 'blogentry';
-    }
-
-    function types()
-    {
-        return array(Blog_entry::TYPE);
-    }
-
-    function saveNoticeFromActivity(Activity $activity, Profile $actor, array $options=array())
-    {
-        if (count($activity->objects) != 1) {
-            // TRANS: Exception thrown when there are too many activity objects.
-            throw new ClientException(_m('Too many activity objects.'));
-        }
-
-        $entryObj = $activity->objects[0];
-
-        if ($entryObj->type != Blog_entry::TYPE) {
-            // TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-            throw new ClientException(_m('Wrong type for object.'));
-        }
-
-        $notice = null;
-
-        switch ($activity->verb) {
-        case ActivityVerb::POST:
-            $notice = Blog_entry::saveNew($actor,
-                                         $entryObj->title,
-                                         $entryObj->content,
-                                         $options);
-            break;
-        default:
-            // TRANS: Exception thrown when blog plugin comes across a undefined verb.
-            throw new ClientException(_m('Unknown verb for blog entries.'));
-        }
-
-        return $notice;
-    }
-
-    function activityObjectFromNotice(Notice $notice)
-    {
-        $entry = Blog_entry::fromNotice($notice);
-
-        if (empty($entry)) {
-            // TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-            throw new ClientException(sprintf(_m('No blog entry for notice %s.'),
-                        $notice->id));
-        }
-
-        return $entry->asActivityObject();
-    }
-
-    function entryForm($out)
-    {
-        return new BlogEntryForm($out);
-    }
-
-    function deleteRelated(Notice $notice)
-    {
-        if ($notice->object_type == Blog_entry::TYPE) {
-            $entry = Blog_entry::fromNotice($notice);
-            if (!empty($entry)) {
-                $entry->delete();
-            }
-        }
-    }
-
-    function adaptNoticeListItem($nli)
-    {
-        $notice = $nli->notice;
-
-        if ($notice->object_type == Blog_entry::TYPE) {
-            return new BlogEntryListItem($nli);
-        }
-
-        return null;
-    }
-
-    function onEndShowScripts(Action $action)
-    {
-        $action->script(common_path('plugins/TinyMCE/js/jquery.tinymce.js'));
-        $action->inlineScript('var _tinymce_path = "'.common_path('plugins/TinyMCE/js/tiny_mce.js').'";'."\n".
-                              'var _tinymce_placeholder = "'.common_path('plugins/TinyMCE/icons/placeholder.png').'";'."\n");
-        $action->script($this->path('blog.js'));
-        return true;
-    }
-}
diff --git a/plugins/Blog/actions/newblogentry.php b/plugins/Blog/actions/newblogentry.php
deleted file mode 100644 (file)
index 52f95eb..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * Save a new blog entry
- * 
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Save a new blog entry
- *
- * @category  Action
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class NewblogentryAction extends Action
-{
-    protected $user;
-    protected $title;
-    protected $content;
-    
-    /**
-     * For initializing members of the class.
-     *
-     * @param array $argarray misc. arguments
-     *
-     * @return boolean true
-     */
-
-    function prepare($argarray)
-    {
-        parent::prepare($argarray);
-
-        if (!$this->isPost()) {
-            throw new ClientException(_('Must be a POST.'), 405);
-        }
-
-        $this->user = common_current_user();
-
-        if (empty($this->user)) {
-            // TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-            throw new ClientException(_m('Must be logged in to post a blog entry.'),
-                                      403);
-        }
-
-        $this->checkSessionToken();
-        
-        $this->title = $this->trimmed('title');
-
-        if (empty($this->title)) {
-            // TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-            throw new ClientException(_m('Title required.'));
-        }
-
-        $this->content = $this->trimmed('content');
-
-        if (empty($this->content)) {
-            // TRANS: Client exception thrown when trying to post a blog entry without providing content.
-            throw new ClientException(_m('Content required.'));
-        }
-        
-        return true;
-    }
-
-    /**
-     * Handler method
-     *
-     * @param array $argarray is ignored since it's now passed in in prepare()
-     *
-     * @return void
-     */
-
-    function handle($argarray=null)
-    {
-        $options = array();
-
-        // Does the heavy-lifting for getting "To:" information
-
-        ToSelector::fillOptions($this, $options);
-
-        $options['source'] = 'web';
-            
-        $profile = $this->user->getProfile();
-
-        $saved = Blog_entry::saveNew($profile,
-                                    $this->title,
-                                    $this->content,
-                                    $options);
-        
-        if ($this->boolean('ajax')) {
-            $this->startHTML('text/xml;charset=utf-8');
-            $this->elementStart('head');
-            // TRANS: Page title after sending a notice.
-            $this->element('title', null, _m('Blog entry saved'));
-            $this->elementEnd('head');
-            $this->elementStart('body');
-            $nli = new NoticeListItem($saved, $this);
-            $nli->show();
-            $this->elementEnd('body');
-            $this->endHTML();
-        } else {
-            common_redirect($saved->getUrl(), 303);
-        }
-    }
-}
diff --git a/plugins/Blog/actions/showblogentry.php b/plugins/Blog/actions/showblogentry.php
deleted file mode 100644 (file)
index b46a65e..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * Show a blog entry
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Show a blog entry
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-class ShowblogentryAction extends ShownoticeAction
-{
-    protected $id;
-    protected $entry;
-
-    function getNotice()
-    {
-        $this->id = $this->trimmed('id');
-
-        $this->entry = Blog_entry::getKV('id', $this->id);
-
-        if (empty($this->entry)) {
-            // TRANS: Client exception thrown when referring to a non-existing blog entry.
-            throw new ClientException(_m('No such entry.'), 404);
-        }
-
-        $notice = $this->entry->getNotice();
-
-        if (empty($notice)) {
-            // TRANS: Client exception thrown when referring to a non-existing blog entry.
-            throw new ClientException(_m('No such entry.'), 404);
-        }
-
-        return $notice;
-    }
-
-    /**
-     * Title of the page
-     *
-     * Used by Action class for layout.
-     *
-     * @return string page tile
-     */
-    function title()
-    {
-        // XXX: check for double-encoding
-        // TRANS: Title for a blog entry without a title.
-        return (empty($this->entry->title)) ? _m('Untitled') : $this->entry->title;
-    }
-}
diff --git a/plugins/Blog/blog.js b/plugins/Blog/blog.js
deleted file mode 100644 (file)
index 333a289..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(function() {
-    var origInit = SN.Init.NoticeFormSetup;
-    SN.Init.NoticeFormSetup = function(form) {
-        origInit(form);
-        var content = form.find("#blog-entry-content");
-        if (content.length > 0) {
-            content.tinymce({
-                script_url : window._tinymce_path,
-                // General options
-                theme : "advanced",
-                plugins : "paste,fullscreen,autoresize,autolink,inlinepopups,tabfocus",
-                theme_advanced_buttons1 : "bold,italic,strikethrough,|,undo,redo,|,link,unlink,image",
-                theme_advanced_buttons2 : "",
-                theme_advanced_buttons3 : "",
-                add_form_submit_trigger : false,
-                theme_advanced_resizing : true,
-                tabfocus_elements: ":prev,:next",
-                setup: function(ed) {
-
-                    form.find('.submit:first').click(function() {
-                        tinymce.triggerSave();
-                    });
-
-                    form.find('input[type=file]').change(function() {
-                        var img = '<img src="'+window._tinymce_placeholder+'" class="placeholder" width="320" height="240">';
-                        var html = tinyMCE.activeEditor.getContent();
-                        ed.setContent(html + img);
-                    });
-                }
-            });
-        }
-    };
-})();
\ No newline at end of file
diff --git a/plugins/Blog/classes/Blog_entry.php b/plugins/Blog/classes/Blog_entry.php
deleted file mode 100644 (file)
index 26ed41f..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * Data structure for blog entries
- * 
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Data structure for blog entries
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class Blog_entry extends Managed_DataObject
-{
-    public $__table = 'blog_entry';
-
-    public $id; // UUID
-    public $profile_id; // int
-    public $title; // varchar(255)
-    public $summary; // text
-    public $content; // text
-    public $uri; // text
-    public $url; // text
-    public $created; // datetime
-    public $modified; // datetime
-
-    const TYPE = ActivityObject::ARTICLE;
-
-    static function schemaDef()
-    {
-        return array(
-            'description' => 'lite blog entry',
-            'fields' => array(
-                'id' => array('type' => 'char',
-                              'length' => 36,
-                              'not null' => true,
-                              'description' => 'Unique ID (UUID)'),
-                'profile_id' => array('type' => 'int',
-                                      'not null' => true,
-                                      'description' => 'Author profile ID'),
-                'title' => array('type' => 'varchar',
-                                 'length' => 255,
-                                 'description' => 'title of the entry'),
-                'summary' => array('type' => 'text',
-                                   'description' => 'initial summary'),
-                'content' => array('type' => 'text',
-                                   'description' => 'HTML content of the entry'),
-                'uri' => array('type' => 'varchar',
-                               'length' => 255,
-                               'description' => 'URI (probably http://) for this entry'),
-                'url' => array('type' => 'varchar',
-                               'length' => 255,
-                               'description' => 'URL (probably http://) for this entry'),
-                'created' => array('type' => 'datetime',
-                                   'not null' => true,
-                                   'description' => 'date this record was created'),
-                'modified' => array('type' => 'datetime',
-                                    'not null' => true,
-                                    'description' => 'date this record was created'),
-            ),
-            'primary key' => array('id'),
-            'unique keys' => array(
-                'blog_entry_uri_key' => array('uri'),
-            ),
-            'indexes' => array(
-                'blog_entry_profile_id_idx' => array('profile_id'),
-                'blog_entry_created_idx' => array('created')
-            ),
-            'foreign keys' => array(
-                'blog_entry_profile_id_fkey' => array('profile', array('profile_id' => 'id')),
-            ),
-        );
-    }
-
-    static function saveNew(Profile $profile, $title, $content, array $options = array())
-    {
-        $be             = new Blog_entry();
-        $be->id         = (string) new UUID();
-        $be->profile_id = $profile->id;
-        $be->title      = $title; // Note: not HTML-protected
-        $be->content    = self::purify($content);
-
-        if (array_key_exists('summary', $options)) {
-            $be->summary = self::purify($options['summary']);
-        } else {
-            // Already purified
-            $be->summary = self::summarize($be->content);
-        }
-
-        // Don't save an identical summary
-
-        if ($be->summary == $be->content) {
-            $be->summary = null;
-        }
-
-        $url = common_local_url('showblogentry', array('id' => $be->id));
-
-        if (!array_key_exists('uri', $options)) {
-            $options['uri'] = $url;
-        } 
-
-        $be->uri = $options['uri'];
-
-        if (!array_key_exists('url', $options)) {
-            $options['url'] = $url;
-        }
-
-        $be->url = $options['url'];
-
-        if (!array_key_exists('created', $options)) {
-            $be->created = common_sql_now();
-        }
-        
-        $be->created = $options['created'];
-
-        $be->modified = common_sql_now();
-
-        $be->insert();
-
-        // Use user's preferences for short URLs, if possible
-
-        try {
-            $user = $profile->isLocal()
-                        ? $profile->getUser()
-                        : null;
-            $shortUrl = File_redirection::makeShort($url, $user);
-        } catch (Exception $e) {
-            // Don't let this stop us.
-            $shortUrl = $url;
-        }
-
-        // XXX: this might be too long.
-
-        if (!empty($be->summary)) {
-            $options['rendered'] = $be->summary . ' ' . 
-                XMLStringer::estring('a', array('href' => $url,
-                                                'class' => 'blog-entry'),
-                                     _('More...'));
-            $text = common_strip_html($be->summary);
-        } else {
-            $options['rendered'] = $be->content;
-            $text = common_strip_html($be->content);
-        }
-
-
-        if (Notice::contentTooLong($text)) {
-            $text = substr($text, 0, Notice::maxContent() - mb_strlen($shortUrl) - 2) .
-                '… ' . $shortUrl;
-        }
-
-        // Override this no matter what.
-        
-        $options['object_type'] = self::TYPE;
-
-        $source = array_key_exists('source', $options) ?
-                                    $options['source'] : 'web';
-        
-        $saved = Notice::saveNew($profile->id, $text, $source, $options);
-
-        return $saved;
-    }
-
-    /**
-     * Summarize the contents of a blog post
-     *
-     * We take the first div or paragraph of the blog post if there's a hit;
-     * Otherwise we take the whole thing.
-     * 
-     * @param string $html HTML of full content
-     */
-    static function summarize($html)
-    {
-        if (preg_match('#<p>.*?</p>#s', $html, $matches)) {
-            return $matches[0];
-        } else if (preg_match('#<div>.*?</div>#s', $html, $matches)) {
-            return $matches[0];
-        } else {
-            return $html;
-        }
-    }
-
-    static function fromNotice(Notice $notice)
-    {
-        return Blog_entry::getKV('uri', $notice->uri);
-    }
-
-    function getNotice()
-    {
-        return Notice::getKV('uri', $this->uri);
-    }
-
-    function asActivityObject()
-    {
-        $obj = new ActivityObject();
-
-        $obj->id      = $this->uri;
-        $obj->type    = self::TYPE;
-        $obj->title   = $this->title;
-        $obj->summary = $this->summary;
-        $obj->content = $this->content;
-        $obj->link    = $this->url;
-
-        return $obj;
-    }
-
-    /**
-     * Clean up input HTML
-     */
-    static function purify($html)
-    {
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*');
-        $pure = htmLawed($html, $config);
-
-        return $pure;
-    }
-}
diff --git a/plugins/Blog/forms/blogentry.php b/plugins/Blog/forms/blogentry.php
deleted file mode 100644 (file)
index 2da2a13..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * Form for creating a blog entry
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Form for creating a blog entry
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-class BlogEntryForm extends Form
-{
-    /**
-     * ID of the form
-     *
-     * @return int ID of the form
-     */
-    function id()
-    {
-        return 'form_new_blog_entry';
-    }
-
-    /**
-     * class of the form
-     *
-     * @return string class of the form
-     */
-    function formClass()
-    {
-        return 'form_settings ajax-notice';
-    }
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-    function action()
-    {
-        return common_local_url('newblogentry');
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-    function formData()
-    {
-        $this->out->elementStart('fieldset', array('id' => 'new_blog_entry_data'));
-        $this->out->elementStart('ul', 'form_data');
-
-        $this->li();
-        $this->out->input('blog-entry-title',
-                          // TRANS: Field label on blog entry form.
-                          _m('LABEL','Title'),
-                          null,
-                          // TRANS: Field title on blog entry form.
-                          _m('Title of the blog entry.'),
-                          'title');
-        $this->unli();
-
-        $this->li();
-        $this->out->textarea('blog-entry-content',
-                             // TRANS: Field label on blog entry form.
-                             _m('LABEL','Text'),
-                            null,
-                            // TRANS: Field title on blog entry form.
-                            _m('Text of the blog entry.'),
-                            'content');
-        $this->unli();
-
-        $this->out->elementEnd('ul');
-
-        $toWidget = new ToSelector($this->out,
-                                   common_current_user(),
-                                   null);
-        $toWidget->show();
-
-        $this->out->elementEnd('fieldset');
-    }
-
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-    function formActions()
-    {
-        $this->out->submit('blog-entry-submit',
-                           // TRANS: Button text to save a blog entry.
-                           _m('BUTTON', 'Save'),
-                           'submit',
-                           'submit');
-    }
-}
diff --git a/plugins/Blog/lib/blogentrylistitem.php b/plugins/Blog/lib/blogentrylistitem.php
deleted file mode 100644 (file)
index 9bf3d6d..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * NoticeListItem adapter for blog entries
- * 
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Blog
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * NoticeListItem adapter for blog entries
- *
- * @category  General
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class BlogEntryListItem extends NoticeListItemAdapter
-{
-    function showNotice()
-    {
-        $out = $this->nli->out;
-        $out->elementStart('div', 'entry-title');
-        $this->showAuthor();
-        $this->showContent();
-        $out->elementEnd('div');
-    }
-
-    function showContent()
-    {
-        $notice = $this->nli->notice;
-        $out    = $this->nli->out;
-
-        $entry  = Blog_entry::fromNotice($notice);
-
-        if (empty($entry)) {
-            throw new Exception('BlogEntryListItem used for non-blog notice.');
-        }
-
-        $out->elementStart('h4', array('class' => 'blog-entry-title'));
-        $out->element('a', array('href' => $notice->getUrl()), $entry->title);
-        $out->elementEnd('h4');
-
-        // XXX: kind of a hack
-
-        $actionName = $out->trimmed('action');
-
-        if ($actionName == 'shownotice' ||
-            $actionName == 'showblogentry' ||
-            $actionName == 'conversation') {
-
-            $out->elementStart('div', 'blog-entry-content');
-            $out->raw($entry->content);
-            $out->elementEnd('div');
-
-        } else {
-
-            if (!empty($entry->summary)) {
-                $out->elementStart('div', 'blog-entry-summary');
-                $out->raw($entry->summary);
-                $out->elementEnd('div');
-            }
-
-            $url = ($entry->url) ? $entry->url : $notice->getUrl();
-            $out->element('a',
-                          array('href' => $url,
-                                'class' => 'blog-entry-link'),
-                          _('More...'));
-        }
-    }
-}
diff --git a/plugins/Blog/locale/Blog.pot b/plugins/Blog/locale/Blog.pot
deleted file mode 100644 (file)
index a6f3083..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-#: newblogentry.php:74
-msgid "Must be logged in to post a blog entry."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-#: newblogentry.php:84
-msgid "Title required."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-#: newblogentry.php:91
-msgid "Content required."
-msgstr ""
-
-#. TRANS: Page title after sending a notice.
-#: newblogentry.php:128
-msgid "Blog entry saved"
-msgstr ""
-
-#. TRANS: Plugin description.
-#: BlogPlugin.php:124
-msgid "Let users write and share long-form texts."
-msgstr ""
-
-#. TRANS: Blog application title.
-#: BlogPlugin.php:131
-msgctxt "TITLE"
-msgid "Blog"
-msgstr ""
-
-#. TRANS: Exception thrown when there are too many activity objects.
-#: BlogPlugin.php:148
-msgid "Too many activity objects."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-#: BlogPlugin.php:155
-msgid "Wrong type for object."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-#: BlogPlugin.php:169
-msgid "Unknown verb for blog entries."
-msgstr ""
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#: BlogPlugin.php:181
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr ""
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-#: showblogentry.php:60 showblogentry.php:67
-msgid "No such entry."
-msgstr ""
-
-#. TRANS: Title for a blog entry without a title.
-#: showblogentry.php:84
-msgid "Untitled"
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-#: blogentryform.php:92
-msgctxt "LABEL"
-msgid "Title"
-msgstr ""
-
-#. TRANS: Field title on blog entry form.
-#: blogentryform.php:95
-msgid "Title of the blog entry."
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-#: blogentryform.php:102
-msgctxt "LABEL"
-msgid "Text"
-msgstr ""
-
-#. TRANS: Field title on blog entry form.
-#: blogentryform.php:105
-msgid "Text of the blog entry."
-msgstr ""
-
-#. TRANS: Button text to save a blog entry.
-#: blogentryform.php:128
-msgctxt "BUTTON"
-msgid "Save"
-msgstr ""
diff --git a/plugins/Blog/locale/ar/LC_MESSAGES/Blog.po b/plugins/Blog/locale/ar/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index da9cdcd..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# Translation of StatusNet - Blog to Arabic (العربية)
-# Exported from translatewiki.net
-#
-# Author: OsamaK
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:52+0000\n"
-"Language-Team: Arabic <https://translatewiki.net/wiki/Portal:ar>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ar\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == "
-"2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= "
-"99) ? 4 : 5 ) ) ) );\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr ""
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr ""
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "مدونة"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr ""
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr ""
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr ""
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "العنوان"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "عنوان التدوينة."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "النص"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "نص التدوينة."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "احفظ"
diff --git a/plugins/Blog/locale/br/LC_MESSAGES/Blog.po b/plugins/Blog/locale/br/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 6035f20..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Breton (brezhoneg)
-# Exported from translatewiki.net
-#
-# Author: Y-M D
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Breton <https://translatewiki.net/wiki/Portal:br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Ezhomm 'zo eus un titl."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr ""
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr ""
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr ""
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr ""
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr ""
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Hep titl"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titl"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Testenn"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr ""
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Enrollañ"
diff --git a/plugins/Blog/locale/ca/LC_MESSAGES/Blog.po b/plugins/Blog/locale/ca/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 169702e..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Catalan (català)
-# Exported from translatewiki.net
-#
-# Author: Toniher
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Cal haver iniciat una sessió per enviar una entrada de blog."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Cal un títol."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Cal un contingut."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "S'ha desat l'entrada de blog."
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Permet als usuaris escriure i compartir textos de formularis llargs."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Masses objectes d'activitat."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Tipus d'objecte incorrecte."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verb desconegut de les entrades de blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "No hi ha entrada de blog de l'avís %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "No existeix l'entrada."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Sense títol"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Títol"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Títol de l'entrada de blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Text"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Text de l'entrada de blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Desa"
diff --git a/plugins/Blog/locale/de/LC_MESSAGES/Blog.po b/plugins/Blog/locale/de/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 4e9fc24..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# Translation of StatusNet - Blog to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Inkowik
-# Author: Marcel083
-# Author: Tiin
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Du musst angemeldet sein, um einen Blog-Eintrag zu erstellen."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titel erforderlich."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Inhalt erforderlich."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Blog-Eintrag gespeichert"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Benutzer lange Tetxte schreiben und teilen lassen."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Zu viele Aktivitätsobjekte."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Falscher Objekktyp."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Unbekanntes Verb für Blogeinträge."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Kein Blogeintrag für %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Kein solcher Eintrag"
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Ohne Titel"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titel"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Titel des Blog-Eintrags"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Text"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Text des Blog-Eintrages"
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Speichern"
diff --git a/plugins/Blog/locale/es/LC_MESSAGES/Blog.po b/plugins/Blog/locale/es/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 92269f0..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# Translation of StatusNet - Blog to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Erchache2000
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Debe haber iniciado sesión para publicar una entrada de blog."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Título requerido."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Contenido requerido."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Entrada de blog guardada"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-"Permiten a los usuarios escribir y compartir formulario con texto largo."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Demasiados objetos de actividad."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Tipo incorrecto para el objeto."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verbo desconocido para las entradas de blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Ninguna entrada de blog de notificación  %s ."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "No hay tal entrada."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Sin título"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Título"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Título de la entrada de blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Texto"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Texto de la entrada de blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Guardar"
diff --git a/plugins/Blog/locale/eu/LC_MESSAGES/Blog.po b/plugins/Blog/locale/eu/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index fc0479b..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Basque <https://translatewiki.net/wiki/Portal:eu>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: eu\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Saioa hasi behar duzu blogean sarrera bat idazteko."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titulua beharrezkoa."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Edukia beharrezkoa."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Blog sarrera gordea"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Erabiltzaileei testu luzeak idatzi eta partekatzen uzten die."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Bloga"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Jarduera objetu gehiegi."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Objetuarentzat moeta okerra."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Aditz ezezaguna blog sarerrentzat."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "%s oharrarentzat ez dago blog sarrerarik."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Ez dago sarrera hori."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Titulurik gabea"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titulua"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Blog sarreraren titulua."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Testua"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Blog sarreraren testua."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gorde"
diff --git a/plugins/Blog/locale/fr/LC_MESSAGES/Blog.po b/plugins/Blog/locale/fr/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 51d31c1..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# Translation of StatusNet - Blog to French (français)
-# Exported from translatewiki.net
-#
-# Author: Davidtsm
-# Author: Gomoko
-# Author: Karl1263
-# Author: Lucky
-# Author: Od1n
-# Author: Sherbrooke
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Vous devez être connecté pour publier un billet."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titre requis."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Contenu requis."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Billet enregistré"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Laissez les utilisateurs écrire et partager des textes longs"
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Trop d'objets d'activité"
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Mauvais type d'objet."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verbe inconnu pour les entrées du blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Aucune entrée de blog pour l'avis %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Enregistrement introuvable"
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Sans titre"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titre"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Titre de l'entrée de blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Texte"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Texte de l'entrée de blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Enregistrer"
diff --git a/plugins/Blog/locale/gl/LC_MESSAGES/Blog.po b/plugins/Blog/locale/gl/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 6c870e3..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Cómpre estar rexistrado para publicar unha entrada de blogue."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "O título é obrigatorio."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Cómpre algún contido."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Entrada de blogue gardada"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Permite aos usuarios escribir e compartir textos longos."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blogue"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Demasiados obxectos de actividade."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Tipo incorrecto para o obxecto."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verbo descoñecido para a entrada de blogue."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "A nota %s non ten ningunha entrada de blogue."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Non hai tal entrada."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Sen título"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Título"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Título da entrada de blogue."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Texto"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Texto da entrada de blogue."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gardar"
diff --git a/plugins/Blog/locale/ia/LC_MESSAGES/Blog.po b/plugins/Blog/locale/ia/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index f2aa789..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Es necessari aperir session pro publicar un articulo de blog."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titulo requirite."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Contento requirite."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Articulo de blog salveguardate"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Permitte que usatores scribe e divide textos longe."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Troppo de objectos de activitate."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Typo errate pro iste objecto."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verbo incognite pro articulos de blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Nulle articulo de blog pro le nota %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Articulo non existe."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Sin titulo"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titulo"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Le titulo del articulo de blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Texto"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Le texto del articulo de blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salveguardar"
diff --git a/plugins/Blog/locale/it/LC_MESSAGES/Blog.po b/plugins/Blog/locale/it/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index a39b43d..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# Translation of StatusNet - Blog to Italian (italiano)
-# Exported from translatewiki.net
-#
-# Author: Ximo17
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Bisogna effettuare l'accesso per poter scrivere qualcosa nel blog."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titolo richiesto."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Contenuto richiesto."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Voce del blog salvata"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-"Consentire agli utenti di scrivere e condividere testi con un formato lungo."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Troppi oggetti dell'attività."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Tipo di oggetto sbagliato."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Verbo sconosciuto per le voci del blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Nessuna voce del blog per la notizia  %s ."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Nessuna voce."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Senza titolo"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titolo"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Titolo della voce del blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Testo"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Testo della voce del blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salva"
diff --git a/plugins/Blog/locale/lt/LC_MESSAGES/Blog.po b/plugins/Blog/locale/lt/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index a9ddfd5..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# Translation of StatusNet - Blog to Lithuanian (lietuvių)
-# Exported from translatewiki.net
-#
-# Author: Eitvys200
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Language-Team: Lithuanian <https://translatewiki.net/wiki/Portal:lt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: lt\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Turite būti prisijungęs, kad galėtumėte rašyti dienoraščio įrašą."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Pavadinimas būtinas."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Turinys būtinas."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Dienoraščio įrašas išsaugotas"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Dienoraštis"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Per daug aktyvių objektui."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr ""
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr ""
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Tokio įrašo nėra."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr ""
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Tekstas"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr ""
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Išsaugoti"
diff --git a/plugins/Blog/locale/mk/LC_MESSAGES/Blog.po b/plugins/Blog/locale/mk/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 21e0623..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# Translation of StatusNet - Blog to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Мора да сте најавени за да објавите блоговски запис."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Се бара наслов."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Се бара содржина."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Блоговскиот запис е зачуван."
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-"Им овозможува на корисниците да пишуваат и споделуваат текстови во долг "
-"облик."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Блог"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Премногу објекти на активност."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Погрешен тип на објект."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Непознат глаголот за блоговските записи."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Нема блоговски запис за забелешката %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Нема таква ставка."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Без наслов"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Наслов"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Наслов на блоговскиот запис."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Текст"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Текст на блоговскиот запис."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Зачувај"
diff --git a/plugins/Blog/locale/nl/LC_MESSAGES/Blog.po b/plugins/Blog/locale/nl/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 7849e07..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# Translation of StatusNet - Blog to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: SPQRobin
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "U moet aangemeld zijn om een ​​blogbericht te posten."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Titel is verplicht."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Inhoud is verplicht."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Blogbericht is opgeslagen"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr "Laat gebruikers langere teksten schrijven en delen."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Te veel activiteitobjecten."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Verkeerde type voor object."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Onbekende werkwoord voor blogberichten."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Er is geen blogbericht voor de mededeling %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Geen dergelijke vermelding."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Zonder titel"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Titel"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Titel van het blogbericht."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Tekst"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Tekst van het blogbericht."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Opslaan"
diff --git a/plugins/Blog/locale/tl/LC_MESSAGES/Blog.po b/plugins/Blog/locale/tl/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index 9fc21ee..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-# Translation of StatusNet - Blog to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr "Kailangang nakalagda upang makapagpaskil ng isang pagpapasok ng blog."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Kailangan ang pamagat."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "Kailangang may nilalaman."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Nasagip ang pagpapasok ng blog"
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-"Payagan ang mga tagagamit na makapagsulat at magsalo ng mga tekstong "
-"mahahaba."
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Blog"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr "Masyadong maraming mga bagay ng gawain."
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr "Maling uri para sa bagay."
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Hindi nalalamang pandiwa para sa mga pagpapasok ng blog."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr "Walang pagpapasok ng blog para sa pabatid na %s."
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Walang ganyang pagpapasok."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Walang pamagat"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Pamagat"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr "Pamagat ng pagpapasok ng blog."
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Teksto"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr "Pamagat ng pagpapasok ng blog."
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Sagipin"
diff --git a/plugins/Blog/locale/tr/LC_MESSAGES/Blog.po b/plugins/Blog/locale/tr/LC_MESSAGES/Blog.po
deleted file mode 100644 (file)
index c15fff1..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Translation of StatusNet - Blog to Turkish (Türkçe)
-# Exported from translatewiki.net
-#
-# Author: Emperyan
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Blog\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
-"Language-Team: Turkish <https://translatewiki.net/wiki/Portal:tr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet-plugin-blog\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
-msgid "Must be logged in to post a blog entry."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
-msgid "Title required."
-msgstr "Başlık gerekli."
-
-#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
-msgid "Content required."
-msgstr "İçerik gerekli."
-
-#. TRANS: Page title after sending a notice.
-msgid "Blog entry saved"
-msgstr "Günce girdisini kaydedildi."
-
-#. TRANS: Plugin description.
-msgid "Let users write and share long-form texts."
-msgstr ""
-
-#. TRANS: Blog application title.
-msgctxt "TITLE"
-msgid "Blog"
-msgstr "Günce"
-
-#. TRANS: Exception thrown when there are too many activity objects.
-msgid "Too many activity objects."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
-msgid "Wrong type for object."
-msgstr ""
-
-#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
-msgid "Unknown verb for blog entries."
-msgstr "Günce girişleri için bilinmeyen bir eylem."
-
-#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
-#, php-format
-msgid "No blog entry for notice %s."
-msgstr ""
-
-#. TRANS: Client exception thrown when referring to a non-existing blog entry.
-msgid "No such entry."
-msgstr "Böyle bir girdi yok."
-
-#. TRANS: Title for a blog entry without a title.
-msgid "Untitled"
-msgstr "Başlıksız"
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Title"
-msgstr "Başlık"
-
-#. TRANS: Field title on blog entry form.
-msgid "Title of the blog entry."
-msgstr ""
-
-#. TRANS: Field label on blog entry form.
-msgctxt "LABEL"
-msgid "Text"
-msgstr "Metin"
-
-#. TRANS: Field title on blog entry form.
-msgid "Text of the blog entry."
-msgstr ""
-
-#. TRANS: Button text to save a blog entry.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Kaydet"
index fc4b62d5d0fd3ab32a4f4c53f192a7b50fff3397..bac54237afa91a283e3ce264d5cb4ebb7ce19f6f 100644 (file)
@@ -409,7 +409,7 @@ class BookmarkPlugin extends MicroAppPlugin
         $target = $attachments[0];
 
         $attrs = array('rel' => 'related',
-                       'href' => $target->url);
+                       'href' => $target->getUrl());
 
         if (!empty($target->title)) {
             $attrs['title'] = $target->title;
@@ -422,7 +422,7 @@ class BookmarkPlugin extends MicroAppPlugin
         try {
             $thumbnail = $target->getThumbnail();
             $tattrs = array('rel' => 'preview',
-                            'href' => $thumbnail->url);
+                            'href' => $thumbnail->getUrl());
 
             if (!empty($thumbnail->width)) {
                 $tattrs['media:width'] = $thumbnail->width;
index c3987a28b8dfa730c07d60e642680a222c330e94..67d92715694fc258f52296fe030c2777a80a842b 100644 (file)
@@ -76,7 +76,7 @@ class NewbookmarkAction extends Action
         parent::prepare($argarray);
 
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->user = common_current_user();
index b86746dde797c6f76c9d446bc68b4f7e01c1ff30..125f471d411e82008e764de5eddb017747bd6eec 100644 (file)
@@ -47,10 +47,10 @@ class Bookmark extends Managed_DataObject
     public $__table = 'bookmark'; // table name
     public $id;          // char(36) primary_key not_null
     public $profile_id;  // int(4) not_null
-    public $url;         // varchar(255) not_null
-    public $title;       // varchar(255)
+    public $url;         // varchar(191) not_null   not 255 because utf8mb4 takes more space
+    public $title;       // varchar(191)   not 255 because utf8mb4 takes more space
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $description; // text
-    public $uri;         // varchar(255)
     public $created;     // datetime
 
     public static function schemaDef()
@@ -62,12 +62,12 @@ class Bookmark extends Managed_DataObject
                             'not null' => true),
                 'profile_id' => array('type' => 'int', 'not null' => true),
                 'uri' => array('type' => 'varchar',
-                            'length' => 255,
+                            'length' => 191,
                             'not null' => true),
                 'url' => array('type' => 'varchar',
-                            'length' => 255,
+                            'length' => 191,
                             'not null' => true),
-                'title' => array('type' => 'varchar', 'length' => 255),
+                'title' => array('type' => 'varchar', 'length' => 191),
                 'description' => array('type' => 'text'),
                 'created' => array('type' => 'datetime', 'not null' => true),
             ),
index 23ef6940ed1e603125564caa470753dc1cd22979..474e092326fec7fdbca58b6eeff84fcb3b377ed4 100644 (file)
@@ -131,7 +131,7 @@ class BookmarkForm extends Form
                                                       $this->_thumbnail->height);
 
             $this->out->element('img',
-                                array('src' => $this->_thumbnail->url,
+                                array('src' => $this->_thumbnail->getUrl(),
                                       'class' => 'bookmarkform-thumbnail',
                                       'width' => $width,
                                       'height' => $height));
index 461655264e721e87ec7ecc3776980575b5872b56..16d5c20addd07fc77723d4c54a041bd46f7da322 100644 (file)
@@ -68,13 +68,13 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
         }
     }
 
-    function onStartInitializeRouter($m)
+    function onStartInitializeRouter(URLMapper $m)
     {
         $m->connect('main/cas', array('action' => 'caslogin'));
         return true;
     }
 
-    function onEndLoginGroupNav($action)
+    function onEndLoginGroupNav(Action $action)
     {
         $action_name = $action->trimmed('action');
 
@@ -88,7 +88,7 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
         return true;
     }
 
-    function onEndShowPageNotice($action)
+    function onEndShowPageNotice(Action $action)
     {
         $name = $action->trimmed('action');
 
index d8e52a141fd11aad77904e073913edae30bfcd32..e90fa3e34c676da2a240a8dd50ba7d657f1c5112 100644 (file)
@@ -37,7 +37,7 @@ class CronishPlugin extends Plugin {
      * When the page has finished rendering, let's do some cron jobs
      * if we have the time.
      */
-    public function onEndActionExecute($status, Action $action)
+    public function onEndActionExecute(Action $action)
     {
         $cron = new Cronish(); 
         $cron->callTimedEvents();
index bd568b6209f136501273db1aadfe36ec806db013..29c177445ca0ffa094ef679eda6a325e45167c04 100644 (file)
@@ -13,12 +13,12 @@ class Message extends Managed_DataObject
 
     public $__table = 'message';                         // table name
     public $id;                              // int(4)  primary_key not_null
-    public $uri;                             // varchar(255)  unique_key
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
     public $from_profile;                    // int(4)   not_null
     public $to_profile;                      // int(4)   not_null
     public $content;                         // text()
     public $rendered;                        // text()
-    public $url;                             // varchar(255)
+    public $url;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
     public $source;                          // varchar(32)
@@ -31,12 +31,12 @@ class Message extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier'),
                 'from_profile' => array('type' => 'int', 'not null' => true, 'description' => 'who the message is from'),
                 'to_profile' => array('type' => 'int', 'not null' => true, 'description' => 'who the message is to'),
                 'content' => array('type' => 'text', 'description' => 'message content'),
                 'rendered' => array('type' => 'text', 'description' => 'HTML version of the content'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL of any attachment (image, video, bookmark, whatever)'),
+                'url' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL of any attachment (image, video, bookmark, whatever)'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
                 'source' => array('type' => 'varchar', 'length' => 32, 'description' => 'source of comment, like "web", "im", or "clientname"'),
index a4bd1f55e83c6c2aebb264ae12858bd319595fe8..8aef1742a884cc0f5b268fa81bd9f55f61ff0158 100644 (file)
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET'))
-{
-    exit(1);
-}
-
-require_once INSTALLDIR . '/lib/publicgroupnav.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Group directory
@@ -40,10 +35,11 @@ require_once INSTALLDIR . '/lib/publicgroupnav.php';
  * @category Directory
  * @package  StatusNet
  * @author   Zach Copley <zach@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-class GroupdirectoryAction extends Action
+class GroupdirectoryAction extends ManagedAction
 {
     /**
      * The page we're on
@@ -138,17 +134,8 @@ class GroupdirectoryAction extends Action
         return true;
     }
 
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    function prepare(array $args=array())
+    protected function doPreparation()
     {
-        parent::prepare($args);
-
         $this->page    = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
         $this->filter  = $this->arg('filter', 'all');
         $this->reverse = $this->boolean('reverse');
@@ -156,23 +143,6 @@ class GroupdirectoryAction extends Action
         $this->sort    = $this->arg('sort', 'nickname');
 
         common_set_returnto($this->selfUrl());
-
-        return true;
-    }
-
-    /**
-     * Handle request
-     *
-     * Shows the page
-     *
-     * @param array $args $_REQUEST args; handled in prepare()
-     *
-     * @return void
-     */
-    function handle(array $args=array())
-    {
-        parent::handle($args);
-        $this->showPage();
     }
 
     /**
@@ -303,74 +273,61 @@ class GroupdirectoryAction extends Action
     {
         $group = new User_group();
 
-        $offset = ($this->page-1) * PROFILES_PER_PAGE;
-        $limit  = PROFILES_PER_PAGE + 1;
+        // Disable this to get global group searches
+        $group->joinAdd(array('id', 'local_group:group_id'));
 
-        if (isset($this->q)) {
+        $order = false;
 
-             $order = 'user_group.created ASC';
-
-             if ($this->sort == 'nickname') {
-                 if ($this->reverse) {
-                     $order = 'user_group.nickname DESC';
-                 } else {
-                     $order = 'user_group.nickname ASC';
-                 }
-             } else {
-                 if ($this->reverse) {
-                     $order = 'user_group.created DESC';
-                 }
-             }
-
-             $sql = <<< GROUP_QUERY_END
-SELECT user_group.*
-FROM user_group
-JOIN local_group ON user_group.id = local_group.group_id
-ORDER BY %s
-LIMIT %d, %d
-GROUP_QUERY_END;
-
-        $cnt = 0;
-        $group->query(sprintf($sql, $order, $limit, $offset));
-        $group->find();
+        if (!empty($this->q)) {
+            $wheres = array('nickname', 'fullname', 'homepage', 'description', 'location');
+            foreach ($wheres as $where) {
+                // Double % because of sprintf
+                $group->whereAdd(sprintf('LOWER(%1$s.%2$s) LIKE LOWER("%%%3$s%%")',
+                                        $group->escapedTableName(), $where,
+                                        $group->escape($this->q)),
+                                    'OR');
+            }
 
+            $order = sprintf('%1$s.%2$s %3$s',
+                            $group->escapedTableName(),
+                            $this->getSortKey('created'),
+                            $this->reverse ? 'DESC' : 'ASC');
         } else {
             // User is browsing via AlphaNav
-            $sort   = $this->getSortKey();
-
-            $sql = <<< GROUP_QUERY_END
-SELECT user_group.*
-FROM user_group
-JOIN local_group ON user_group.id = local_group.group_id
-GROUP_QUERY_END;
 
-            switch($this->filter)
-            {
+            switch($this->filter) {
             case 'all':
                 // NOOP
                 break;
             case '0-9':
-                $sql .=
-                    '  AND LEFT(user_group.nickname, 1) BETWEEN \'0\' AND \'9\'';
+                $group->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s',
+                                        $group->escapedTableName(),
+                                        'nickname',
+                                        $group->_quote("0"),
+                                        $group->_quote("9")));
                 break;
             default:
-                $sql .= sprintf(
-                    ' AND LEFT(LOWER(user_group.nickname), 1) = \'%s\'',
-                    $this->filter
-                );
+                $group->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s',
+                                            $group->escapedTableName(),
+                                            'nickname',
+                                            $group->_quote($this->filter)));
             }
 
-            $sql .= sprintf(
-                ' ORDER BY user_group.%s %s, user_group.nickname ASC LIMIT %d, %d',
-                $sort,
-                $this->reverse ? 'DESC' : 'ASC',
-                $offset,
-                $limit
-            );
-
-            $group->query($sql);
+            $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC',
+                            $group->escapedTableName(),
+                            $this->getSortKey('nickname'),
+                            $this->reverse ? 'DESC' : 'ASC',
+                            'nickname');
         }
 
+        $offset = ($this->page-1) * PROFILES_PER_PAGE;
+        $limit  = PROFILES_PER_PAGE + 1;
+
+        $group->orderBy($order);
+        $group->limit($offset, $limit);
+
+        $group->find();
+
         return $group;
     }
 
@@ -379,17 +336,14 @@ GROUP_QUERY_END;
      *
      * @return string   a column name for sorting
      */
-    function getSortKey()
+    function getSortKey($def='created')
     {
         switch ($this->sort) {
         case 'nickname':
-            return $this->sort;
-            break;
         case 'created':
             return $this->sort;
-            break;
         default:
-            return 'nickname';
+            return $def;
         }
     }
 
index 24bdd5c9fa848e7eddadc6d16bea206d81806ff6..55ce0de42086cbc4b80e33ca2d3deeab93594f3e 100644 (file)
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET'))
-{
-    exit(1);
-}
-
-require_once INSTALLDIR . '/lib/publicgroupnav.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * User directory
@@ -43,7 +38,7 @@ require_once INSTALLDIR . '/lib/publicgroupnav.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-class UserdirectoryAction extends Action
+class UserdirectoryAction extends ManagedAction
 {
     /**
      * The page we're on
@@ -137,17 +132,8 @@ class UserdirectoryAction extends Action
         return true;
     }
 
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    function prepare(array $args=array())
+    protected function doPreparation()
     {
-        parent::prepare($args);
-
         $this->page    = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
         $this->filter  = $this->arg('filter', 'all');
         $this->reverse = $this->boolean('reverse');
@@ -155,23 +141,6 @@ class UserdirectoryAction extends Action
         $this->sort    = $this->arg('sort', 'nickname');
 
         common_set_returnto($this->selfUrl());
-
-        return true;
-    }
-
-    /**
-     * Handle request
-     *
-     * Shows the page
-     *
-     * @param array $args $_REQUEST args; handled in prepare()
-     *
-     * @return void
-     */
-    function handle(array $args=array())
-    {
-        parent::handle($args);
-        $this->showPage();
     }
 
     /**
@@ -291,10 +260,13 @@ class UserdirectoryAction extends Action
     {
         $profile = new Profile();
 
+        // Comment this out or disable to get global profile searches
+        $profile->joinAdd(array('id', 'user:id'));
+
         $offset = ($this->page - 1) * PROFILES_PER_PAGE;
         $limit  = PROFILES_PER_PAGE + 1;
 
-        if (isset($this->q)) {
+        if (!empty($this->q)) {
              // User is searching via query
              $search_engine = $profile->getSearchEngine('profile');
 
@@ -319,34 +291,34 @@ class UserdirectoryAction extends Action
              $profile->find();
         } else {
             // User is browsing via AlphaNav
-            $sort   = $this->getSortKey();
-            $sql    = 'SELECT profile.* FROM profile, user WHERE profile.id = user.id';
 
-            switch($this->filter)
-            {
+            switch ($this->filter) {
             case 'all':
                 // NOOP
                 break;
             case '0-9':
-                $sql .=
-                    '  AND LEFT(profile.nickname, 1) BETWEEN \'0\' AND \'9\'';
+                $profile->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s',
+                                            $profile->escapedTableName(),
+                                            'nickname',
+                                            $profile->_quote("0"),
+                                            $profile->_quote("9")));
                 break;
             default:
-                $sql .= sprintf(
-                    ' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'',
-                    $this->filter
-                );
+                $profile->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s',
+                                            $profile->escapedTableName(),
+                                            'nickname',
+                                            $profile->_quote($this->filter)));
             }
 
-            $sql .= sprintf(
-                ' ORDER BY profile.%s %s, profile.nickname ASC LIMIT %d, %d',
-                $sort,
-                $this->reverse ? 'DESC' : 'ASC',
-                $offset,
-                $limit
-            );
+            $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC',
+                            $profile->escapedTableName(),
+                            $this->getSortKey('nickname'),
+                            $this->reverse ? 'DESC' : 'ASC',
+                            'nickname');
+            $profile->orderBy($order);
+            $profile->limit($offset, $limit);
 
-            $profile->query($sql);
+            $profile->find();
         }
 
         return $profile;
@@ -357,15 +329,12 @@ class UserdirectoryAction extends Action
      *
      * @return string   a column name for sorting
      */
-    function getSortKey()
+    function getSortKey($def='nickname')
     {
         switch ($this->sort) {
         case 'nickname':
-            return $this->sort;
-            break;
         case 'created':
             return $this->sort;
-            break;
         default:
             return 'nickname';
         }
index 6fc14e68e5736b820055c136025477ad24432e69..2443139af6b02b0e6df1471674de529f1481bdb6 100644 (file)
@@ -66,7 +66,7 @@ class DomainStatusNetworkPlugin extends Plugin
             }
         }
 
-        $nickname = StatusNet::currentSite();
+        $nickname = GNUsocial::currentSite();
 
         if (empty($nickname)) {
             $this->log(LOG_WARNING, "No current site");
@@ -212,7 +212,7 @@ class DomainStatusNetworkPlugin extends Plugin
             return false;
         }
 
-        StatusNet::switchSite($sn->nickname);
+        GNUsocial::switchSite($sn->nickname);
 
         $user = User::getKV('email', $email);
 
@@ -242,7 +242,7 @@ class DomainStatusNetworkPlugin extends Plugin
             Status_network::$wildcard = $config['WILDCARD'];
         }
 
-        StatusNet::switchSite($sn->nickname);
+        GNUsocial::switchSite($sn->nickname);
 
         $confirm = EmailRegistrationPlugin::registerEmail($email);
 
@@ -259,7 +259,7 @@ class DomainStatusNetworkPlugin extends Plugin
             throw new ClientException(_("No such site."));
         }
 
-        StatusNet::switchSite($sn->nickname);
+        GNUsocial::switchSite($sn->nickname);
 
         $user = common_check_user($email, $password);
 
@@ -294,7 +294,7 @@ class DomainStatusNetworkPlugin extends Plugin
             throw new NoSuchUserException(array('email' => $email));
         }
 
-        StatusNet::switchSite($sn->nickname);
+        GNUsocial::switchSite($sn->nickname);
 
         $user = User::getKV('email', $email);
         
index faf38378ecbb73f00bf968f67daac65e214410e2..b283ce8da6460cba97e48774f843b62c87860ffb 100644 (file)
@@ -59,7 +59,7 @@ class GlobalApiAction extends Action
 
     function prepare(array $args=array())
     {
-        StatusNet::setApi(true); // reduce exception reports to aid in debugging
+        GNUsocial::setApi(true); // reduce exception reports to aid in debugging
 
         parent::prepare($args);
 
index 0547a2596f610aacf1ad8029d3af2e367ec6b0cf..877319be759d95875b0b1547bcd1d82319639248 100644 (file)
@@ -212,7 +212,7 @@ class DomainStatusNetworkInstaller extends Installer
 
         Status_network::$wildcard = $config['WILDCARD'];
 
-        StatusNet::switchSite($this->nickname);
+        GNUsocial::switchSite($this->nickname);
 
         // We need to initialize the schema_version stuff to make later setup easier
 
index 3ad9c63f13ee814fc0ce3fd72105be94c25b909e..44c60e2cf2bddb2ef2676e69a1c08135ed0426a8 100644 (file)
@@ -124,6 +124,7 @@ class EmailregisterAction extends Action
                     }
                 }
 
+                $this->nickname = Nickname::normalize($this->trimmed('nickname'));
                 $this->password1 = $this->trimmed('password1');
                 $this->password2 = $this->trimmed('password2');
 
@@ -285,16 +286,13 @@ class EmailregisterAction extends Action
             }
 
             if (!empty($this->error)) {
-                $nickname = $this->nicknameFromEmail($email);
-                $this->form = new ConfirmRegistrationForm($this, $nickname, $email, $this->code);
+                $this->form = new ConfirmRegistrationForm($this, $this->nickname, $email, $this->code);
                 $this->showPage();
                 return;
             }
 
-            $nickname = $this->nicknameFromEmail($email);
-
             try {
-                $fields = array('nickname' => $nickname,
+                $fields = array('nickname' => $this->nickname,
                                 'email' => $email,
                                 'password' => $this->password1,
                                 'email_confirmed' => true);
@@ -305,8 +303,7 @@ class EmailregisterAction extends Action
                 $this->user = User::register($fields);
             } catch (ClientException $e) {
                 $this->error = $e->getMessage();
-                $nickname = $this->nicknameFromEmail($email);
-                $this->form = new ConfirmRegistrationForm($this, $nickname, $email, $this->code);
+                $this->form = new ConfirmRegistrationForm($this, $this->nickname, $email, $this->code);
                 $this->showPage();
                 return;
             }
index 25e1bb07603bd73c93418566c604e1f1ff804a7b..7618410e8ebf40ee20be939ef55b582020e80ac6 100644 (file)
@@ -71,12 +71,11 @@ class ConfirmRegistrationForm extends Form
         $this->elementStart('li');
 
         // TRANS: Field label in e-mail registration form.
-        $this->element('label', array('for' => 'nickname-ignore'), _m('LABEL','User name'));
+        $this->element('label', array('for' => 'nickname'), _m('LABEL','User name'));
 
-        $this->element('input', array('name' => 'nickname-ignore',
+        $this->element('input', array('name' => 'nickname',
                                       'type' => 'text',
-                                      'id' => 'nickname-ignore',
-                                      'disabled' => 'true',
+                                      'id' => 'nickname',
                                       'value' => $this->nickname));
 
         $this->elementEnd('li');
index 235305f04722a3c26587edfa9a2287012879b9dc..7af2cdf5e6ac776f49d43b37e225d80d83798c98 100644 (file)
@@ -30,8 +30,8 @@ class Email_reminder extends Managed_DataObject
 {
     public $__table = 'email_reminder';
 
-    public $type;     // type of reminder
-    public $code;     // confirmation code
+    public $type;     // type of reminder varchar(191)    not 255 because utf8mb4 takes more space
+    public $code;     // confirmation code varchar(191)   not 255 because utf8mb4 takes more space
     public $days;     // number of days after code was created
     public $sent;     // timestamp
     public $created;  // timestamp
@@ -102,14 +102,14 @@ class Email_reminder extends Managed_DataObject
             'fields'      => array(
                 'type'     => array(
                     'type'          => 'varchar',
-                    'length'        => 255,
+                    'length'        => 191,
                     'not null'      => true,
                     'description'   => 'type of reminder'
                 ),
                 'code' => array(
                     'type'        => 'varchar',
                     'not null'    => 'true',
-                    'length'      => 255,
+                    'length'      => 191,
                     'description' => 'confirmation code'
                  ),
                 'days' => array(
index 707bb4090782059375d77a612e3f8efda424972f..b126f9e049329cdd2f56834d9a8f8991b0d8ad8c 100644 (file)
@@ -95,7 +95,7 @@ if (have_option('u', 'universe')) {
             while ($sn->fetch()) {
                 try {
                     $server = $sn->getServerName();
-                    StatusNet::init($server);
+                    GNUsocial::init($server);
                     // Different queue manager, maybe!
                     $qm = QueueManager::get();
                     foreach ($reminders as $reminder) {
index 5ee5596e58564d550fb9ebd26c3cb17925f12150..b132975bcd9d2c4b60cba1743d6640c2d401de67 100644 (file)
@@ -40,7 +40,7 @@ if (have_option('u', 'universe')) {
     if ($sn->find()) {
         while ($sn->fetch()) {
             $server = $sn->getServerName();
-            StatusNet::init($server);
+            GNUsocial::init($server);
             // Different queue manager, maybe!
             $qm = QueueManager::get();
             $qm->enqueue(1, 'sitesum');
diff --git a/plugins/Enjit/README b/plugins/Enjit/README
deleted file mode 100644 (file)
index 03f9894..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-This doesn't seem to have been functional for a while; can't find other references
-to the enjit configuration or transport enqueuing. Keeping it in case someone
-wants to bring it up to date.
-
--- brion vibber <brion@status.net> 2009-12-03
diff --git a/plugins/Enjit/enjitqueuehandler.php b/plugins/Enjit/enjitqueuehandler.php
deleted file mode 100644 (file)
index c0332b9..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-/**
- * Queue handler for watching new notices and posting to enjit.
- * @todo FIXME: Is this actually being used/functional atm?
- */
-class EnjitQueueHandler extends QueueHandler
-{
-    function transport()
-    {
-        return 'enjit';
-    }
-
-    function handle($notice)
-    {
-
-        $profile = Profile::getKV($notice->profile_id);
-
-        $this->log(LOG_INFO, "Posting Notice ".$notice->id." from ".$profile->nickname);
-
-        if ( ! $notice->is_local ) {
-            $this->log(LOG_INFO, "Skipping remote notice");
-            return "skipped";
-        }
-
-        #
-        // Build an Atom message from the notice
-        #
-        $noticeurl = common_local_url('shownotice', array('notice' => $notice->id));
-        $msg = $profile->nickname . ': ' . $notice->content;
-
-        $atom  = "<entry xmlns='http://www.w3.org/2005/Atom'>\n";
-        $atom .= "<apisource>".common_config('enjit','source')."</apisource>\n";
-        $atom .= "<source>\n";
-        $atom .= "<title>" . $profile->nickname . " - " . common_config('site', 'name') . "</title>\n";
-        $atom .= "<link href='" . $profile->profileurl . "'/>\n";
-        $atom .= "<link rel='self' type='application/rss+xml' href='" . common_local_url('userrss', array('nickname' => $profile->nickname)) . "'/>\n";
-        $atom .= "<author><name>" . $profile->nickname . "</name></author>\n";
-        $atom .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n";
-        $atom .= "</source>\n";
-        $atom .= "<title>" . htmlspecialchars($msg) . "</title>\n";
-        $atom .= "<summary>" . htmlspecialchars($msg) . "</summary>\n";
-        $atom .= "<link rel='alternate' href='" . $noticeurl . "' />\n";
-        $atom .= "<id>". $notice->uri . "</id>\n";
-        $atom .= "<published>".common_date_w3dtf($notice->created)."</published>\n";
-        $atom .= "<updated>".common_date_w3dtf($notice->modified)."</updated>\n";
-        $atom .= "</entry>\n";
-
-        $url  = common_config('enjit', 'apiurl') . "/submit/". common_config('enjit','apikey');
-        $data = array(
-            'msg' => $atom,
-        );
-
-        #
-        // POST the message to $config['enjit']['apiurl']
-        #
-        $request = HTTPClient::start();
-        $response = $request->post($url, null, $data);
-
-        return $response->isOk();
-    }
-}
index 1669226523d04f03e1ec324130d6c18b2b717ee1..31a26837511a135540901dcc69f69a39809f93ad 100644 (file)
@@ -72,7 +72,7 @@ class CancelrsvpAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true); // short error results!
+            GNUsocial::setApi(true); // short error results!
         }
 
         $rsvpId = $this->trimmed('rsvp');
index 2ba90070a50accc5aad6515fddaea884a1d315d5..ea32b2b368e179a9c3f6121367f931d4a122dc1d 100644 (file)
@@ -72,7 +72,7 @@ class NewrsvpAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true); // short error results!
+            GNUsocial::setApi(true); // short error results!
         }
 
         $eventId = $this->trimmed('event');
index 3d2a1738b5e21e8427d8d0f7f848f6e74faf2ff9..c27edd11b08a957d351d10eb44d42acfebf7c808 100644 (file)
@@ -53,13 +53,13 @@ class Happening extends Managed_DataObject
 
     public $__table = 'happening'; // table name
     public $id;                    // varchar(36) UUID
-    public $uri;                   // varchar(255)
+    public $uri;                   // varchar(191)   not 255 because utf8mb4 takes more space
     public $profile_id;            // int
     public $start_time;            // datetime
     public $end_time;              // datetime
-    public $title;                 // varchar(255)
-    public $location;              // varchar(255)
-    public $url;                   // varchar(255)
+    public $title;                 // varchar(191)   not 255 because utf8mb4 takes more space
+    public $location;              // varchar(191)   not 255 because utf8mb4 takes more space
+    public $url;                   // varchar(191)   not 255 because utf8mb4 takes more space
     public $description;           // text
     public $created;               // datetime
 
@@ -76,18 +76,18 @@ class Happening extends Managed_DataObject
                               'not null' => true,
                               'description' => 'UUID'),
                 'uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'profile_id' => array('type' => 'int', 'not null' => true),
                 'start_time' => array('type' => 'datetime', 'not null' => true),
                 'end_time' => array('type' => 'datetime', 'not null' => true),
                 'title' => array('type' => 'varchar',
-                                 'length' => 255,
+                                 'length' => 191,
                                  'not null' => true),
                 'location' => array('type' => 'varchar',
-                                    'length' => 255),
+                                    'length' => 191),
                 'url' => array('type' => 'varchar',
-                               'length' => 255),
+                               'length' => 191),
                 'description' => array('type' => 'text'),
                 'created' => array('type' => 'datetime',
                                    'not null' => true),
index c9504bf601cfafac25576f444a9939215207010a..6a6f7f3811354773907fed9840d6531142d62065 100644 (file)
@@ -50,7 +50,7 @@ class RSVP extends Managed_DataObject
 
     public $__table = 'rsvp'; // table name
     public $id;                // varchar(36) UUID
-    public $uri;               // varchar(255)
+    public $uri;               // varchar(191)   not 255 because utf8mb4 takes more space
     public $profile_id;        // int
     public $event_id;          // varchar(36) UUID
     public $response;            // tinyint
@@ -83,7 +83,7 @@ class RSVP extends Managed_DataObject
                               'not null' => true,
                               'description' => 'UUID'),
                 'uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'profile_id' => array('type' => 'int'),
                 'event_id' => array('type' => 'char',
index 9618eee31c38422a272a83216f8a60821df3d396..23b175bcff9a294db3d87a7fd16c4e3b52bbaa5e 100644 (file)
@@ -190,7 +190,7 @@ class FacebookBridgePlugin extends Plugin
      *
      * @return void
      */
-    function onEndLoginGroupNav($action)
+    function onEndLoginGroupNav(Action $action)
     {
         $action_name = $action->trimmed('action');
 
index a7cf5a13aa20cac519fe61fd462c6b0d565c9752..1f77bb1b4f117e9b4244ab55827b67a419f5f954 100644 (file)
@@ -52,7 +52,7 @@ class Notice_to_item extends Managed_DataObject
 {
     public $__table = 'notice_to_item'; // table name
     public $notice_id;                  // int(4)  primary_key not_null
-    public $item_id;                    // varchar(255) not null
+    public $item_id;                    // varchar(191) not null   not 255 because utf8mb4 takes more space
     public $created;                    // datetime
 
     /**
@@ -76,7 +76,7 @@ class Notice_to_item extends Managed_DataObject
     {
         return array(
             new ColumnDef('notice_id', 'integer', null, false, 'PRI'),
-            new ColumnDef('item_id', 'varchar', 255, false, 'UNI'),
+            new ColumnDef('item_id', 'varchar', 191, false, 'UNI'),
             new ColumnDef('created', 'datetime',  null, false)
         );
     }
index 3ce7e74c79e7e3fda655048cb86aa503a6fd4107..b39453b5aa7f83f31b9beb557e2dff6835f26dcd 100644 (file)
@@ -74,7 +74,7 @@ class DisfavorAction extends FormAction
             $this->serverError(_('Could not delete favorite.'));
         }
         Fave::blowCacheForProfileId($this->scoped->id);
-        if (StatusNet::isAjax()) {
+        if (GNUsocial::isAjax()) {
             $this->startHTML('text/xml;charset=utf-8');
             $this->elementStart('head');
             // TRANS: Title for page on which favorites can be added.
index 68c36dfaef5b6710ccbf2771f3aa612a498aba5c..094b65feaa94fd19b38f6b5dd12e6af5b48ebd10 100644 (file)
@@ -8,7 +8,7 @@ class Fave extends Managed_DataObject
     public $__table = 'fave';                            // table name
     public $notice_id;                       // int(4)  primary_key not_null
     public $user_id;                         // int(4)  primary_key not_null
-    public $uri;                             // varchar(255)
+    public $uri;                             // varchar(191)   not 255 because utf8mb4 takes more space   not 255 because utf8mb4 takes more space
     public $created;                         // datetime  multiple_key not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -18,7 +18,7 @@ class Fave extends Managed_DataObject
             'fields' => array(
                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice that is the favorite'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user who likes this notice'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier, usually a tag URI'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index c530ca030c7309d0bb8ff6f4680dafb0e9cde6cc..c10b64524d24dfe0a34c4785cbd37d04461880c1 100644 (file)
@@ -39,10 +39,10 @@ class Photo extends Managed_DataObject
 
     public $__table = 'photo'; // table name
     public $id;                // char (36) // UUID
-    public $uri;               // varchar (255)  // This is the corresponding notice's uri.
-    public $photo_uri;         // varchar (255)
-    public $thumb_uri;         // varchar (255)
-    public $title;             // varchar (255)
+    public $uri;               // varchar (191)  // This is the corresponding notice's uri.   not 255 because utf8mb4 takes more space
+    public $photo_uri;         // varchar (191)   not 255 because utf8mb4 takes more space
+    public $thumb_uri;         // varchar (191)   not 255 because utf8mb4 takes more space
+    public $title;             // varchar (191)   not 255 because utf8mb4 takes more space
     public $description;       // text
     public $profile_id;        // int
 
@@ -66,13 +66,13 @@ class Photo extends Managed_DataObject
                               'not null' => true,
                               'description' => 'UUID'),
                 'uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'photo_uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'photo_uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'profile_id' => array('type' => 'int', 'not null' => true),
             ),
index 906509fef5d52573b1b07c53810bc7465ef0efde..2d03fe2afc6ad23c1346d9c8146d7434f6dfd3a8 100644 (file)
@@ -84,7 +84,7 @@ class GNUsocialPhotosPlugin extends Plugin
     }
 
 
-    function onStartHandleFeedEntry($activity)
+    function onStartHandleFeedEntry(Activity $activity)
     {
         common_log(LOG_INFO, 'photo plugin: onEndAtomPubNewActivity');
         $oprofile = Ostatus_profile::ensureActorProfile($activity);
@@ -121,7 +121,7 @@ class GNUsocialPhotosPlugin extends Plugin
         return true;
     }
 
-    function onStartShowNoticeItem($action)
+    function onStartShowNoticeItem(Action $action)
     {
         $photo = GNUsocialPhoto::getKV('notice_id', $action->notice->id);
         if($photo) { 
index 4f4e5fbfe44cc415ae66c8410c4686bb93567b2d..5b14e006da40197f69a68f6a08c29b8da12c8af3 100644 (file)
@@ -38,9 +38,9 @@ class GNUsocialPhoto extends Managed_DataObject
     public $id;         // int(11)
     public $notice_id;  // int(11)
     public $album_id;   // int(11)
-    public $uri;        // varchar(255)
-    public $thumb_uri;  // varchar(255)
-       public $title;      // varchar(255)
+    public $uri;        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $thumb_uri;  // varchar(191)   not 255 because utf8mb4 takes more space
+       public $title;      // varchar(191)   not 255 because utf8mb4 takes more space
        public $photo_description; // text
     public $created;           // datetime()   not_null
     public $modified;          // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -63,9 +63,9 @@ class GNUsocialPhoto extends Managed_DataObject
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'Unique ID for Photo'),
                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'Notice ID for the related notice'),
                 'album_id' => array('type' => 'int', 'not null' => true, 'description' => 'The parent album ID'),
-                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'unique address for this photo'),
-                'thumb_uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'unique address for this photo thumbnail'),
-                'title' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'The Photo title'),
+                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'unique address for this photo'),
+                'thumb_uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'unique address for this photo thumbnail'),
+                'title' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'The Photo title'),
                 'photo_description' => array('type' => 'text', 'not null' => true, 'description' => 'A description for this photo'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 8b8c1dbf5a03c7b98e813deb0c1fe924b1edbaf2..acf509a22ac0c84dc73e9534e506dac81cd61711 100644 (file)
@@ -38,7 +38,7 @@ class GNUsocialPhotoAlbum extends Managed_DataObject
     public $__table = 'GNUsocialPhotoAlbum';
     public $album_id;          // int(11) -- Unique identifier for the album
     public $profile_id;        // int(11) -- Profile ID for the owner of the album
-    public $album_name;        // varchar(255) -- Title for this album
+    public $album_name;        // varchar(191) -- Title for this album   not 255 because utf8mb4 takes more space
     public $album_description; // text -- A description of the album
     public $created;           // datetime()   not_null
     public $modified;          // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -50,7 +50,7 @@ class GNUsocialPhotoAlbum extends Managed_DataObject
             'fields' => array(
                 'album_id' => array('type' => 'serial', 'not null' => true, 'description' => 'Unique identifier for the album'),
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'Profile ID for the owner of the album'),
-                'album_name' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'Title for this album'),
+                'album_name' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'Title for this album'),
                 'album_description' => array('type' => 'text', 'not null' => true, 'description' => 'A description for this album'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 564ddce875e40294de0fad6411fb5f2310c616e0..5a9b8de0cb357cc74fc167e92143d43938c06b3d 100644 (file)
@@ -37,9 +37,9 @@ class GNUsocialProfileExtensionField extends Managed_DataObject
     public $__table = 'gnusocialprofileextensionfield';
     public $id;          // int(11)
     public $systemname;  // varchar(64)
-    public $title;       // varchar(255)
+    public $title;       // varchar(191)   not 255 because utf8mb4 takes more space
     public $description; // text
-    public $type;        // varchar(255)
+    public $type;        // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;     // datetime()   not_null
     public $modified;    // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -49,9 +49,9 @@ class GNUsocialProfileExtensionField extends Managed_DataObject
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'Unique ID for extension field'),
                 'systemname' => array('type' => 'varchar', 'not null' => true, 'length' => 64, 'description' => 'field systemname'),
-                'title' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'field title'),
+                'title' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'field title'),
                 'description' => array('type' => 'text', 'not null' => true, 'description' => 'field description'),
-                'type' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'field type'),
+                'type' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'field type'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
index 9746948e16f93aefc7bc2fc2ef7f2024d188df0e..9ba395d8cad839157f6f6a3ee75a0528280cda1b 100644 (file)
@@ -39,8 +39,8 @@ class Video extends Managed_DataObject
 
     public $__table = 'video'; // table name
     public $id;                // char (36) // UUID
-    public $uri;               // varchar (255)  // This is the corresponding notice's uri.
-    public $url;               // varchar (255)
+    public $uri;               // varchar (191)   This is the corresponding notice's uri.   not 255 because utf8mb4 takes more space
+    public $url;               // varchar (191)   not 255 because utf8mb4 takes more space
     public $profile_id;        // int
 
     public static function getByNotice(Notice $notice)
@@ -63,10 +63,10 @@ class Video extends Managed_DataObject
                               'not null' => true,
                               'description' => 'UUID'),
                 'uri' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'url' => array('type' => 'varchar',
-                               'length' => 255,
+                               'length' => 191,
                                'not null' => true),
                 'profile_id' => array('type' => 'int', 'not null' => true),
             ),
index 7e825d416deb1fb2c8a628317d63b09c8cdfe465..e4e9f5f6248b848152a7f90f3ea90e785f805a11 100644 (file)
@@ -48,12 +48,12 @@ class Group_message extends Managed_DataObject
 {
     public $__table = 'group_message'; // table name
     public $id;                        // char(36)  primary_key not_null
-    public $uri;                       // varchar(255)
+    public $uri;                       // varchar(191)   not 255 because utf8mb4 takes more space
     public $from_profile;              // int
     public $to_group;                  // int
     public $content;
     public $rendered;
-    public $url;
+    public $url;                       // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                   // datetime()   not_null
     public $modified;                  // timestamp()   not_null default_CURRENT_TIMESTAMP
 
@@ -62,8 +62,8 @@ class Group_message extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'char', 'not null' => true, 'length' => 36, 'description' => 'message uuid'),
-                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'message uri'),
-                'url' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'representation url'),
+                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'message uri'),
+                'url' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'representation url'),
                 'from_profile' => array('type' => 'int', 'not null' => true, 'description' => 'sending profile ID'),
                 'to_group' => array('type' => 'int', 'not null' => true, 'description' => 'receiving group ID'),
                 'content' => array('type' => 'text', 'not null' => true, 'description' => 'message content'),
index 20ea468c7209c0c9a020b0571661e44d334fc77e..d6d4f1a1b8f0fae1ee81105b04e4a138624e1a0c 100644 (file)
@@ -51,7 +51,7 @@ class ImageMagickPlugin extends Plugin
      * @param array $info The response from getimagesize()
      */
     public function onFillImageFileMetadata(ImageFile $imagefile) {
-        if (is_null($imagefile->animated) && $imagefile->type === IMAGETYPE_GIF) {
+        if (is_null($imagefile->animated) && $imagefile->mimetype === 'image/gif') {
             $magick = new Imagick($imagefile->filepath);
             $magick = $magick->coalesceImages();
             $imagefile->animated = $magick->getNumberImages()>1;
@@ -60,31 +60,41 @@ class ImageMagickPlugin extends Plugin
         return true;
     }
 
-    public function onStartResizeImageFile(ImageFile $imagefile, $outpath, array $box) {
-        // So far we only take over the resize for IMAGETYPE_GIF
-        // (and only animated for gifs! (and only if we really want to resize the animation!))
-        if ($imagefile->type == IMAGETYPE_GIF && $imagefile->animated && common_config('thumbnail', 'animated')) {
-            $magick = new Imagick($imagefile->filepath);
-            $magick = $magick->coalesceImages();
-            $magick->setIteratorIndex(0);
-            do {
-                $magick->cropImage($box['w'], $box['h'], $box['x'], $box['y']);
-                $magick->thumbnailImage($box['width'], $box['height']);
-                $magick->setImagePage($box['width'], $box['height'], 0, 0);
-            } while ($magick->nextImage());
-            $magick = $magick->deconstructImages();
-
-            // $magick->writeImages($outpath, true); did not work, had to use filehandle
-            // There's been bugs for writeImages in php5-imagick before, probably now too
-            $fh = fopen($outpath, 'w+');
-            $success = $magick->writeImagesFile($fh);
-            fclose($fh);
-
-            return !$success;
+    public function onStartResizeImageFile(ImageFile $imagefile, $outpath, array $box)
+    {
+        switch ($imagefile->mimetype) {
+        case 'image/gif':
+            // If GIF, then only for animated gifs! (and only if we really want to resize the animation!)
+            if ($imagefile->animated && common_config('thumbnail', 'animated')) {
+                return $this->resizeImageFileAnimatedGif($imagefile, $outpath, $box);
+            }
+            break;
         }
         return true;
     }
 
+    protected function resizeImageFileAnimatedGif(ImageFile $imagefile, $outpath, array $box)
+    {
+        $magick = new Imagick($imagefile->filepath);
+        $magick = $magick->coalesceImages();
+        $magick->setIteratorIndex(0);
+        do {
+            $magick->cropImage($box['w'], $box['h'], $box['x'], $box['y']);
+            $magick->thumbnailImage($box['width'], $box['height']);
+            $magick->setImagePage($box['width'], $box['height'], 0, 0);
+        } while ($magick->nextImage());
+        $magick = $magick->deconstructImages();
+
+        // $magick->writeImages($outpath, true); did not work, had to use filehandle
+        // There's been bugs for writeImages in php5-imagick before, probably now too
+        $fh = fopen($outpath, 'w+');
+        $success = $magick->writeImagesFile($fh);
+        fclose($fh);
+        $magick->destroy();
+
+        return !$success;
+    }
+
     public function onPluginVersion(&$versions)
     {
         $versions[] = array('name' => 'ImageMagick',
diff --git a/plugins/Irc/README b/plugins/Irc/README
deleted file mode 100644 (file)
index 0a5d9ea..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-The IRC plugin allows users to send and receive notices over an IRC network.
-
-Installation
-============
-add "addPlugin('irc',
-    array('setting'=>'value', 'setting2'=>'value2', ...);"
-to the bottom of your config.php
-
-scripts/imdaemon.php included with StatusNet must be running. It will be started by
-the plugin along with their other daemons when you run scripts/startdaemons.sh.
-See the StatusNet README for more about queuing and daemons.
-
-Settings
-========
-host*: Hostname of IRC server
-port: Port of IRC server (defaults to 6667)
-username*: Username of bot
-realname*: Real name of bot
-nick*: Nickname of bot
-password: Password
-nickservpassword: NickServ password for identification
-nickservidentifyregexp: Override existing regexp matching request for identification from NickServ
-channels: Channels for bot to idle in
-transporttype: Set to 'ssl' to enable SSL
-encoding: Set to change encoding
-pinginterval: Set to change the number of seconds between pings (helps keep the connection open)
-              Defaults to 120 seconds
-regcheck: Check user's nicknames are registered, enabled by default, set to false to disable
-regregexp: Override existing regexp matching response from NickServ if nick checked is registered.
-           Must contain a capturing group catching the nick
-unregregexp: Override existing regexp matching response from NickServ if nick checked is unregistered
-             Must contain a capturing group catching the nick
-
-* required
-
-Example
-=======
-addPlugin('irc', array(
-    'host' => '...',
-    'username' => '...',
-    'realname' => '...',
-    'nick' => '...',
-    'channels' => array('#channel1', '#channel2')
-));
-
diff --git a/plugins/Irc/classes/Irc_waiting_message.php b/plugins/Irc/classes/Irc_waiting_message.php
deleted file mode 100644 (file)
index c3fefc8..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php\r
-/**\r
- * Table Definition for irc_waiting_message\r
- */\r
-\r
-require_once INSTALLDIR.'/classes/Memcached_DataObject.php';\r
-\r
-class Irc_waiting_message extends Managed_DataObject {\r
-\r
-    public $__table = 'irc_waiting_message'; // table name\r
-    public $id;                              // int primary_key not_null auto_increment\r
-    public $data;                            // blob not_null\r
-    public $prioritise;                      // tinyint(1) not_null\r
-    public $attempts;                        // int not_null\r
-    public $claimed;                         // datetime()\r
-    public $created;                         // datetime()   not_null\r
-    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP\r
-\r
-    public static function schemaDef()\r
-    {\r
-        return array(\r
-            'fields' => array(\r
-                'id' => array('type' => 'serial', 'not null' => true, 'description' => 'Unique ID for entry'),\r
-                'data' => array('type' => 'blob', 'not null' => true, 'description' => 'data blob'),\r
-                'prioritise' => array('type' => 'int', 'size' => 'tiny', 'description' => 'tinyint priority value'),\r
-                'attempts' => array('type' => 'int', 'not null' => true, 'description' => 'attempts count'),\r
-                'claimed' => array('type' => 'datetime', 'description' => 'date this irc message was claimed'),\r
-                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),\r
-                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),\r
-            ),\r
-            'primary key' => array('id'),\r
-            'indexes' => array(\r
-                'irc_waiting_message_prioritise_idx' => array('prioritise'),\r
-            ),\r
-        );\r
-    }\r
-\r
-    /**\r
-     * Get the next item in the queue\r
-     *\r
-     * @return Irc_waiting_message Next message if there is one\r
-     */\r
-    public static function top() {\r
-        $wm = new Irc_waiting_message();\r
-\r
-        $wm->orderBy('prioritise DESC, created');\r
-        $wm->whereAdd('claimed is null');\r
-\r
-        $wm->limit(1);\r
-\r
-        $cnt = $wm->find(true);\r
-\r
-        if ($cnt) {\r
-            // XXX: potential race condition\r
-            // can we force it to only update if claimed is still null\r
-            // (or old)?\r
-            common_log(LOG_INFO, 'claiming IRC waiting message id = ' . $wm->id);\r
-            $orig = clone($wm);\r
-            $wm->claimed = common_sql_now();\r
-            $result = $wm->update($orig);\r
-            if ($result) {\r
-                common_log(LOG_INFO, 'claim succeeded.');\r
-                return $wm;\r
-            } else {\r
-                common_log(LOG_INFO, 'claim failed.');\r
-            }\r
-        }\r
-        $wm = null;\r
-        return null;\r
-    }\r
-\r
-    /**\r
-    * Increment the attempts count\r
-    *\r
-    * @return void\r
-    * @throws Exception\r
-    */\r
-    public function incAttempts() {\r
-        $orig = clone($this);\r
-        $this->attempts++;\r
-        $result = $this->update($orig);\r
-\r
-        if (!$result) {\r
-            // TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-            // TRANS: %d is the object ID for which the count could not be updated.\r
-            throw new Exception(sprintf(_m('Could not increment attempts count for %d.'), $this->id));\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Release a claimed item.\r
-     */\r
-    public function releaseClaim() {\r
-        // DB_DataObject doesn't let us save nulls right now\r
-        $sql = sprintf("UPDATE irc_waiting_message SET claimed=NULL WHERE id=%d", $this->id);\r
-        $this->query($sql);\r
-\r
-        $this->claimed = null;\r
-        $this->encache();\r
-    }\r
-}\r
diff --git a/plugins/Irc/extlib/.gitignore b/plugins/Irc/extlib/.gitignore
deleted file mode 100644 (file)
index 553fe8e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Settings.php
-*.db
diff --git a/plugins/Irc/extlib/phergie/.gitignore b/plugins/Irc/extlib/phergie/.gitignore
deleted file mode 100644 (file)
index 553fe8e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Settings.php
-*.db
diff --git a/plugins/Irc/extlib/phergie/LICENSE b/plugins/Irc/extlib/phergie/LICENSE
deleted file mode 100644 (file)
index d7d2342..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2010, Phergie Development Team 
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this 
-list of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright notice, 
-this list of conditions and the following disclaimer in the documentation 
-and/or other materials provided with the distribution.
-
-Neither the name of the Phergie Development Team nor the names of its 
-contributors may be used to endorse or promote products derived from this 
-software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 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.
diff --git a/plugins/Irc/extlib/phergie/Phergie/Autoload.php b/plugins/Irc/extlib/phergie/Phergie/Autoload.php
deleted file mode 100644 (file)
index 0004f44..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Autoloader for Phergie classes.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Autoload
-{
-    /**
-     * Constructor to add the base Phergie path to the include_path.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $path = realpath(dirname(__FILE__) . '/..');
-        $includePath = get_include_path();
-        $includePathList = explode(PATH_SEPARATOR, $includePath);
-        if (!in_array($path, $includePathList)) {
-            self::addPath($path);
-        }
-    }
-
-    /**
-     * Autoload callback for loading class files.
-     *
-     * @param string $class Class to load
-     *
-     * @return void
-     */
-    public function load($class)
-    {
-        include str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
-    }
-
-    /**
-     * Registers an instance of this class as an autoloader.
-     *
-     * @return void
-     */
-    public static function registerAutoloader()
-    {
-        spl_autoload_register(array(new self, 'load'));
-    }
-
-    /**
-     * Add a path to the include path.
-     *
-     * @param string $path Path to add
-     *
-     * @return void
-     */
-    public static function addPath($path)
-    {
-        set_include_path($path . PATH_SEPARATOR . get_include_path());
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Bot.php b/plugins/Irc/extlib/phergie/Phergie/Bot.php
deleted file mode 100644 (file)
index 85e8a00..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Composite class for other components to represent the bot.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Bot
-{
-    /**
-     * Current version of Phergie
-     */
-    const VERSION = '2.0.1';
-
-    /**
-     * Current driver instance
-     *
-     * @var Phergie_Driver_Abstract
-     */
-    protected $driver;
-
-    /**
-     * Current configuration instance
-     *
-     * @var Phergie_Config
-     */
-    protected $config;
-
-    /**
-     * Current connection handler instance
-     *
-     * @var Phergie_Connection_Handler
-     */
-    protected $connections;
-
-    /**
-     * Current plugin handler instance
-     *
-     * @var Phergie_Plugin_Handler
-     */
-    protected $plugins;
-
-    /**
-     * Current event handler instance
-     *
-     * @var Phergie_Event_Handler
-     */
-    protected $events;
-
-    /**
-     * Current end-user interface instance
-     *
-     * @var Phergie_Ui_Abstract
-     */
-    protected $ui;
-
-    /**
-     * Current processor instance
-     *
-     * @var Phergie_Process_Abstract
-     */
-    protected $processor;
-
-    /**
-     * Returns a driver instance, creating one of the default class if
-     * none has been set.
-     *
-     * @return Phergie_Driver_Abstract
-     */
-    public function getDriver()
-    {
-        if (empty($this->driver)) {
-            // Check if a driver has been defined in the configuration to use
-            // as the default
-            $config = $this->getConfig();
-            if (isset($config['driver'])) {
-                $class = 'Phergie_Driver_' . ucfirst($config['driver']);
-            } else {
-                // Otherwise default to the Streams driver.
-                $class = 'Phergie_Driver_Streams';
-            }
-
-            $this->driver = new $class;
-        }
-        return $this->driver;
-    }
-
-    /**
-     * Sets the driver instance to use.
-     *
-     * @param Phergie_Driver_Abstract $driver Driver instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setDriver(Phergie_Driver_Abstract $driver)
-    {
-        $this->driver = $driver;
-        return $this;
-    }
-
-    /**
-     * Sets the configuration to use.
-     *
-     * @param Phergie_Config $config Configuration instance
-     *
-     * @return Phergie_Runner_Abstract Provides a fluent interface
-     */
-    public function setConfig(Phergie_Config $config)
-    {
-        $this->config = $config;
-        return $this;
-    }
-
-    /**
-     * Returns the entire configuration in use or the value of a specific
-     * configuration setting.
-     *
-     * @param string $index   Optional index of a specific configuration
-     *        setting for which the corresponding value should be returned
-     * @param mixed  $default Value to return if no match is found for $index
-     *
-     * @return mixed Value corresponding to $index or the entire
-     *         configuration if $index is not specified
-     */
-    public function getConfig($index = null, $default = null)
-    {
-        if (empty($this->config)) {
-            $this->config = new Phergie_Config;
-            $this->config->read('Settings.php');
-        }
-        if ($index !== null) {
-            if (isset($this->config[$index])) {
-                return $this->config[$index];
-            } else {
-                return $default;
-            }
-        }
-        return $this->config;
-    }
-
-    /**
-     * Returns a plugin handler instance, creating it if it does not already
-     * exist and using a default class if none has been set.
-     *
-     * @return Phergie_Plugin_Handler
-     */
-    public function getPluginHandler()
-    {
-        if (empty($this->plugins)) {
-            $this->plugins = new Phergie_Plugin_Handler(
-                $this->getConfig(),
-                $this->getEventHandler()
-            );
-        }
-        return $this->plugins;
-    }
-
-    /**
-     * Sets the plugin handler instance to use.
-     *
-     * @param Phergie_Plugin_Handler $handler Plugin handler instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setPluginHandler(Phergie_Plugin_Handler $handler)
-    {
-        $this->plugins = $handler;
-        return $this;
-    }
-
-    /**
-     * Returns an event handler instance, creating it if it does not already
-     * exist and using a default class if none has been set.
-     *
-     * @return Phergie_Event_Handler
-     */
-    public function getEventHandler()
-    {
-        if (empty($this->events)) {
-            $this->events = new Phergie_Event_Handler;
-        }
-        return $this->events;
-    }
-
-    /**
-     * Sets the event handler instance to use.
-     *
-     * @param Phergie_Event_Handler $handler Event handler instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setEventHandler(Phergie_Event_Handler $handler)
-    {
-        $this->events = $handler;
-        return $this;
-    }
-
-    /**
-     * Returns a connection handler instance, creating it if it does not
-     * already exist and using a default class if none has been set.
-     *
-     * @return Phergie_Connection_Handler
-     */
-    public function getConnectionHandler()
-    {
-        if (empty($this->connections)) {
-            $this->connections = new Phergie_Connection_Handler;
-        }
-        return $this->connections;
-    }
-
-    /**
-     * Sets the connection handler instance to use.
-     *
-     * @param Phergie_Connection_Handler $handler Connection handler instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setConnectionHandler(Phergie_Connection_Handler $handler)
-    {
-        $this->connections = $handler;
-        return $this;
-    }
-
-    /**
-     * Returns an end-user interface instance, creating it if it does not
-     * already exist and using a default class if none has been set.
-     *
-     * @return Phergie_Ui_Abstract
-     */
-    public function getUi()
-    {
-        if (empty($this->ui)) {
-            $this->ui = new Phergie_Ui_Console;
-        }
-        return $this->ui;
-    }
-
-    /**
-     * Sets the end-user interface instance to use.
-     *
-     * @param Phergie_Ui_Abstract $ui End-user interface instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setUi(Phergie_Ui_Abstract $ui)
-    {
-        $this->ui = $ui;
-        return $this;
-    }
-
-    /**
-     * Returns a processer instance, creating one if none exists.
-     *
-     * @return Phergie_Process_Abstract
-     */
-    public function getProcessor()
-    {
-        if (empty($this->processor)) {
-            $class = 'Phergie_Process_Standard';
-
-            $type = $this->getConfig('processor');
-            if (!empty($type)) {
-                $class = 'Phergie_Process_' . ucfirst($type);
-            }
-
-            $this->processor = new $class(
-                $this,
-                $this->getConfig('processor.options', array())
-            );
-        }
-        return $this->processor;
-    }
-
-    /**
-     * Sets the processer instance to use.
-     *
-     * @param Phergie_Process_Abstract $processor Processer instance
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function setProcessor(Phergie_Process_Abstract $processor)
-    {
-        $this->processor = $processor;
-        return $this;
-    }
-
-    /**
-     * Loads plugins into the plugin handler.
-     *
-     * @return void
-     */
-    protected function loadPlugins()
-    {
-        $config = $this->getConfig();
-        $plugins = $this->getPluginHandler();
-        $ui = $this->getUi();
-
-        $plugins->setAutoload($config['plugins.autoload']);
-        foreach ($config['plugins'] as $name) {
-            try {
-                $plugin = $plugins->addPlugin($name);
-                $ui->onPluginLoad($name);
-            } catch (Phergie_Plugin_Exception $e) {
-                $ui->onPluginFailure($name, $e->getMessage());
-                if (!empty($plugin)) {
-                    $plugins->removePlugin($plugin);
-                }
-            }
-        }
-    }
-
-    /**
-     * Configures and establishes connections to IRC servers.
-     *
-     * @return void
-     */
-    protected function loadConnections()
-    {
-        $config = $this->getConfig();
-        $driver = $this->getDriver();
-        $connections = $this->getConnectionHandler();
-        $plugins = $this->getPluginHandler();
-        $ui = $this->getUi();
-
-        foreach ($config['connections'] as $data) {
-            $connection = new Phergie_Connection($data);
-            $connections->addConnection($connection);
-
-            $ui->onConnect($data['host']);
-            $driver->setConnection($connection)->doConnect();
-            $plugins->setConnection($connection);
-            $plugins->onConnect();
-        }
-    }
-
-    /**
-     * Establishes server connections and initiates an execution loop to
-     * continuously receive and process events.
-     *
-     * @return Phergie_Bot Provides a fluent interface
-     */
-    public function run()
-    {
-        set_time_limit(0);
-
-        $timezone = $this->getConfig('timezone', 'UTC');
-        date_default_timezone_set($timezone);
-
-        $ui = $this->getUi();
-        $ui->setEnabled($this->getConfig('ui.enabled'));
-
-        $this->loadPlugins();
-        $this->loadConnections();
-
-        $processor = $this->getProcessor();
-
-        $connections = $this->getConnectionHandler();
-        while (count($connections)) {
-            $processor->handleEvents();
-        }
-
-        $ui->onShutdown();
-
-        return $this;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Config.php b/plugins/Irc/extlib/phergie/Phergie/Config.php
deleted file mode 100644 (file)
index c182f2a..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Reads from and writes to PHP configuration files and provides access to
- * the settings they contain.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Config implements ArrayAccess
-{
-    /**
-     * Mapping of configuration file paths to an array of names of settings
-     * they contain
-     *
-     * @var array
-     */
-    protected $files = array();
-
-    /**
-     * Mapping of setting names to their current corresponding values
-     *
-     * @var array
-     */
-    protected $settings = array();
-
-    /**
-     * Includes a specified PHP configuration file and incorporates its
-     * return value (which should be an associative array) into the current
-     * configuration settings.
-     *
-     * @param string $file Path to the file to read
-     *
-     * @return Phergie_Config Provides a fluent interface
-     * @throws Phergie_Config_Exception
-     */
-    public function read($file)
-    {
-        if (!(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'
-            && file_exists($file))
-            && !is_executable($file)
-        ) {
-            throw new Phergie_Config_Exception(
-                'Path "' . $file . '" does not reference an executable file',
-                Phergie_Config_Exception::ERR_FILE_NOT_EXECUTABLE
-            );
-        }
-
-        $settings = include $file;
-        if (!is_array($settings)) {
-            throw new Phergie_Config_Exception(
-                'File "' . $file . '" does not return an array',
-                Phergie_Config_Exception::ERR_ARRAY_NOT_RETURNED
-            );
-        }
-
-        $this->files[$file] = array_keys($settings);
-        $this->settings += $settings;
-
-        return $this;
-    }
-
-    /**
-     * Merges an associative array of configuration setting values into the
-     * current configuration settings.
-     *
-     * @param array $settings Associative array of configuration setting
-     *        values keyed by setting name
-     *
-     * @return Phergie_Config Provides a fluent interface
-     */
-    public function readArray(array $settings)
-    {
-        $this->settings += $settings;
-
-        return $this;
-    }
-
-    /**
-     * Writes the values of the current configuration settings back to their
-     * originating files.
-     *
-     * @return Phergie_Config Provides a fluent interface
-     */
-    public function write()
-    {
-        foreach ($this->files as $file => &$settings) {
-            $values = array();
-            foreach ($settings as $setting) {
-                $values[$setting] = $this->settings[$setting];
-            }
-            $source = '<?php' . PHP_EOL . PHP_EOL .
-                'return ' . var_export($value, true) . ';';
-            file_put_contents($file, $source);
-        }
-    }
-
-    /**
-     * Checks to see if a configuration setting is assigned a value.
-     *
-     * @param string $offset Configuration setting name
-     *
-     * @return bool TRUE if the setting has a value, FALSE otherwise
-     * @see ArrayAccess::offsetExists()
-     */
-    public function offsetExists($offset)
-    {
-        return isset($this->settings[$offset]);
-    }
-
-    /**
-     * Returns the value of a configuration setting.
-     *
-     * @param string $offset Configuration setting name
-     *
-     * @return mixed Configuration setting value or NULL if it is not
-     *         assigned a value
-     * @see ArrayAccess::offsetGet()
-     */
-    public function offsetGet($offset)
-    {
-        if (isset($this->settings[$offset])) {
-            $value = &$this->settings[$offset];
-        } else {
-            $value = null;
-        }
-
-        return $value;
-    }
-
-    /**
-     * Sets the value of a configuration setting.
-     *
-     * @param string $offset Configuration setting name
-     * @param mixed  $value  New setting value
-     *
-     * @return void
-     * @see ArrayAccess::offsetSet()
-     */
-    public function offsetSet($offset, $value)
-    {
-        $this->settings[$offset] = $value;
-    }
-
-    /**
-     * Removes the value set for a configuration setting.
-     *
-     * @param string $offset Configuration setting name
-     *
-     * @return void
-     * @see ArrayAccess::offsetUnset()
-     */
-    public function offsetUnset($offset)
-    {
-        unset($this->settings[$offset]);
-
-        foreach ($this->files as $file => $settings) {
-            $key = array_search($offset, $settings);
-            if ($key !== false) {
-                unset($this->files[$file][$key]);
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Config/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Config/Exception.php
deleted file mode 100644 (file)
index fb646c1..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to configuration.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Config_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that an attempt was made to read a configuration 
-     * file that could not be executed
-     */
-    const ERR_FILE_NOT_EXECUTABLE = 1;
-
-    /**
-     * Error indicating that a read configuration file does not return an 
-     * array
-     */
-    const ERR_ARRAY_NOT_RETURNED = 2; 
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Connection.php b/plugins/Irc/extlib/phergie/Phergie/Connection.php
deleted file mode 100644 (file)
index 746dec0..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Data structure for connection metadata.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Connection
-{
-    /**
-     * Host to which the client will connect
-     *
-     * @var string
-     */
-    protected $host;
-
-    /**
-     * Port on which the client will connect, defaults to the standard IRC
-     * port
-     *
-     * @var int
-     */
-    protected $port;
-
-    /**
-     * Transport for the connection, defaults to tcp but can be set to ssl
-     * or variations thereof to connect over SSL
-     *
-     * @var string
-     */
-    protected $transport;
-
-    /**
-     * Encoding method for the connection, defaults to ISO-8859-1 but can
-     * be set to UTF8 if necessary
-     *
-     * @var strng
-     */
-    protected $encoding;
-
-    /**
-     * Nick that the client will use
-     *
-     * @var string
-     */
-    protected $nick;
-
-    /**
-     * Username that the client will use
-     *
-     * @var string
-     */
-    protected $username;
-
-    /**
-     * Realname that the client will use
-     *
-     * @var string
-     */
-    protected $realname;
-
-    /**
-     * Password that the client will use
-     *
-     * @var string
-     */
-    protected $password;
-
-    /**
-     * Hostmask for the connection
-     *
-     * @var Phergie_Hostmask
-     */
-    protected $hostmask;
-
-    /**
-     * Constructor to initialize instance properties.
-     *
-     * @param array $options Optional associative array of property values
-     *        to initialize
-     *
-     * @return void
-     */
-    public function __construct(array $options = array())
-    {
-        $this->transport = 'tcp';
-        $this->encoding = 'ISO-8859-1';
-        // @note this may need changed to something different, for broader support.
-        // @note also may need to make use of http://us.php.net/manual/en/function.stream-encoding.php
-
-        $this->setOptions($options);
-    }
-
-    /**
-     * Emits an error related to a required connection setting does not have
-     * value set for it.
-     *
-     * @param string $setting Name of the setting
-     *
-     * @return void
-     */
-    protected function checkSetting($setting)
-    {
-        if (empty($this->$setting)) {
-            throw new Phergie_Connection_Exception(
-                'Required connection setting "' . $setting . '" missing',
-                Phergie_Connection_Exception::ERR_REQUIRED_SETTING_MISSING
-            );
-        }
-    }
-
-    /**
-     * Returns a hostmask that uniquely identifies the connection.
-     *
-     * @return string
-     */
-    public function getHostmask()
-    {
-        if (empty($this->hostmask)) {
-            $this->hostmask = new Phergie_Hostmask(
-                $this->getNick(),
-                $this->getUsername(),
-                $this->getHost()
-            );
-        }
-
-        return $this->hostmask;
-    }
-
-    /**
-     * Sets the host to which the client will connect.
-     *
-     * @param string $host Hostname
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setHost($host)
-    {
-        if (empty($this->host)) {
-            $this->host = (string) $host;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the host to which the client will connect if it is set or
-     * emits an error if it is not set.
-     *
-     * @return string
-     */
-    public function getHost()
-    {
-        $this->checkSetting('host');
-
-        return $this->host;
-    }
-
-    /**
-     * Sets the port on which the client will connect.
-     *
-     * @param int $port Port
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setPort($port)
-    {
-        if (empty($this->port)) {
-            $this->port = (int) $port;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the port on which the client will connect.
-     *
-     * @return int
-     */
-    public function getPort()
-    {
-        if (empty($this->port)) {
-            $this->port = 6667;
-        }
-
-        return $this->port;
-    }
-
-    /**
-     * Sets the transport for the connection to use.
-     *
-     * @param string $transport Transport (ex: tcp, ssl, etc.)
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setTransport($transport)
-    {
-        $this->transport = (string) $transport;
-
-        if (!in_array($this->transport, stream_get_transports())) {
-            throw new Phergie_Connection_Exception(
-                'Transport ' . $this->transport . ' is not supported',
-                Phergie_Connection_Exception::ERR_TRANSPORT_NOT_SUPPORTED
-            );
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the transport in use by the connection.
-     *
-     * @return string Transport (ex: tcp, ssl, etc.)
-     */
-    public function getTransport()
-    {
-        return $this->transport;
-    }
-
-    /**
-     * Sets the encoding for the connection to use.
-     *
-     * @param string $encoding Encoding to use (ex: ASCII, ISO-8859-1, UTF8, etc.)
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setEncoding($encoding)
-    {
-        $this->encoding = (string) $encoding;
-
-        if (!in_array($this->encoding, mb_list_encodings())) {
-            throw new Phergie_Connection_Exception(
-                'Encoding ' . $this->encoding . ' is not supported',
-                Phergie_Connection_Exception::ERR_ENCODING_NOT_SUPPORTED
-            );
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the encoding in use by the connection.
-     *
-     * @return string Encoding (ex: ASCII, ISO-8859-1, UTF8, etc.)
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Sets the nick that the client will use.
-     *
-     * @param string $nick Nickname
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setNick($nick)
-    {
-        if (empty($this->nick)) {
-            $this->nick = (string) $nick;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the nick that the client will use.
-     *
-     * @return string
-     */
-    public function getNick()
-    {
-        $this->checkSetting('nick');
-
-        return $this->nick;
-    }
-
-    /**
-     * Sets the username that the client will use.
-     *
-     * @param string $username Username
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setUsername($username)
-    {
-        if (empty($this->username)) {
-            $this->username = (string) $username;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the username that the client will use.
-     *
-     * @return string
-     */
-    public function getUsername()
-    {
-        $this->checkSetting('username');
-
-        return $this->username;
-    }
-
-    /**
-     * Sets the realname that the client will use.
-     *
-     * @param string $realname Real name
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setRealname($realname)
-    {
-        if (empty($this->realname)) {
-            $this->realname = (string) $realname;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the realname that the client will use.
-     *
-     * @return string
-     */
-    public function getRealname()
-    {
-        $this->checkSetting('realname');
-
-        return $this->realname;
-    }
-
-    /**
-     * Sets the password that the client will use.
-     *
-     * @param string $password Password
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setPassword($password)
-    {
-        if (empty($this->password)) {
-            $this->password = (string) $password;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the password that the client will use.
-     *
-     * @return string
-     */
-    public function getPassword()
-    {
-        return $this->password;
-    }
-
-    /**
-     * Sets multiple connection settings using an array.
-     *
-     * @param array $options Associative array of setting names mapped to
-     *        corresponding values
-     *
-     * @return Phergie_Connection Provides a fluent interface
-     */
-    public function setOptions(array $options)
-    {
-        foreach ($options as $option => $value) {
-            $method = 'set' . ucfirst($option);
-            if (method_exists($this, $method)) {
-                $this->$method($value);
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Connection/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Connection/Exception.php
deleted file mode 100644 (file)
index aec1cd8..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to a connection to an IRC server.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Connection_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that an operation was attempted requiring a value 
-     * for a specific configuration setting, but none was set
-     */
-    const ERR_REQUIRED_SETTING_MISSING = 1;
-
-    /**
-     * Error indicating that a connection is configured to use a transport, 
-     * but that transport is not supported by the current PHP installation
-     */
-    const ERR_TRANSPORT_NOT_SUPPORTED = 2;
-
-    /**
-     * Error indicating that a connection is configured to use an encoding,
-     * but that encoding is not supported by the current PHP installation
-     */
-    const ERR_ENCODING_NOT_SUPPORTED = 3;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Connection/Handler.php b/plugins/Irc/extlib/phergie/Phergie/Connection/Handler.php
deleted file mode 100644 (file)
index e9aeddc..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Handles connections initiated by the bot.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Connection_Handler implements Countable, IteratorAggregate
-{
-    /**
-     * Map of connections indexed by hostmask
-     *
-     * @var array
-     */
-    protected $connections;
-
-    /**
-     * Constructor to initialize storage for connections. 
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $this->connections = array();
-    }
-
-    /**
-     * Adds a connection to the connection list.
-     *
-     * @param Phergie_Connection $connection Connection to add
-     *
-     * @return Phergie_Connection_Handler Provides a fluent interface
-     */
-    public function addConnection(Phergie_Connection $connection)
-    {
-        $this->connections[(string) $connection->getHostmask()] = $connection;
-        return $this;
-    }
-
-    /**
-     * Removes a connection from the connection list.
-     *
-     * @param Phergie_Connection|string $connection Instance or hostmask for
-     *        the connection to remove
-     *
-     * @return Phergie_Connection_Handler Provides a fluent interface
-     */
-    public function removeConnection($connection)
-    {
-        if ($connection instanceof Phergie_Connection) {
-            $hostmask = (string) $connection->getHostmask(); 
-        } elseif (is_string($connection) 
-            && isset($this->connections[$connection])) {
-            $hostmask = $connection;
-        } else {
-            return $this;
-        }
-        unset($this->connections[$hostmask]);
-        return $this;
-    }
-
-    /**
-     * Returns the number of connections in the list. 
-     *
-     * @return int Number of connections 
-     */
-    public function count()
-    {
-        return count($this->connections);
-    }
-
-    /**
-     * Returns an iterator for the connection list. 
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        return new ArrayIterator($this->connections);
-    }
-
-    /**
-     * Returns a list of specified connection objects.
-     *
-     * @param array|string $keys One or more hostmasks identifying the 
-     *        connections to return
-     *
-     * @return array List of Phergie_Connection objects corresponding to the 
-     *         specified hostmask(s)
-     */
-    public function getConnections($keys)
-    {
-        $connections = array();
-
-        if (!is_array($keys)) {
-            $keys = array($keys);
-        }
-        
-        foreach ($keys as $key) {
-            if (isset($this->connections[$key])) {
-                $connections[] = $this->connections[$key];
-            }
-        }
-
-        return $connections;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Driver/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Driver/Abstract.php
deleted file mode 100644 (file)
index 6273662..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for drivers which handle issuing client commands to the IRC
- * server and converting responses into usable data objects.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-abstract class Phergie_Driver_Abstract
-{
-    /**
-     * Currently active connection
-     *
-     * @var Phergie_Connection
-     */
-    protected $connection;
-
-    /**
-     * Sets the currently active connection.
-     *
-     * @param Phergie_Connection $connection Active connection
-     *
-     * @return Phergie_Driver_Abstract Provides a fluent interface
-     */
-    public function setConnection(Phergie_Connection $connection)
-    {
-        $this->connection = $connection;
-
-        return $this;
-    }
-
-    /**
-     * Returns the currently active connection.
-     *
-     * @return Phergie_Connection
-     * @throws Phergie_Driver_Exception
-     */
-    public function getConnection()
-    {
-        if (empty($this->connection)) {
-            throw new Phergie_Driver_Exception(
-                'Operation requires an active connection, but none is set',
-                Phergie_Driver_Exception::ERR_NO_ACTIVE_CONNECTION
-            );
-        }
-
-        return $this->connection;
-    }
-
-    /**
-     * Returns an event if one has been received from the server.
-     *
-     * @return Phergie_Event_Interface|null Event instance if an event has
-     *         been received, NULL otherwise
-     */
-    public abstract function getEvent();
-
-    /**
-     * Initiates a connection with the server.
-     *
-     * @return void
-     */
-    public abstract function doConnect();
-
-    /**
-     * Terminates the connection with the server.
-     *
-     * @param string $reason Reason for connection termination (optional)
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_1_6
-     */
-    public abstract function doQuit($reason = null);
-
-    /**
-     * Joins a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to join 
-     * @param string $keys     Optional comma-delimited list of channel keys
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_1
-     */
-    public abstract function doJoin($channels, $keys = null);
-
-    /**
-     * Leaves a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to leave 
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_2
-     */
-    public abstract function doPart($channels);
-
-    /**
-     * Invites a user to an invite-only channel.
-     *
-     * @param string $nick    Nick of the user to invite
-     * @param string $channel Name of the channel
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_7
-     */
-    public abstract function doInvite($nick, $channel);
-
-    /**
-     * Obtains a list of nicks of users in specified channels.
-     *
-     * @param string $channels Comma-delimited list of one or more channels
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_5
-     */
-    public abstract function doNames($channels);
-
-    /**
-     * Obtains a list of channel names and topics.
-     *
-     * @param string $channels Comma-delimited list of one or more channels
-     *                         to which the response should be restricted
-     *                         (optional)
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_6
-     */
-    public abstract function doList($channels = null);
-
-    /**
-     * Retrieves or changes a channel topic.
-     *
-     * @param string $channel Name of the channel
-     * @param string $topic   New topic to assign (optional)
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_4
-     */
-    public abstract function doTopic($channel, $topic = null);
-
-    /**
-     * Retrieves or changes a channel or user mode.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $mode   New mode to assign (optional)
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_3
-     */
-    public abstract function doMode($target, $mode = null);
-
-    /**
-     * Changes the client nick.
-     *
-     * @param string $nick New nick to assign
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_1_2
-     */
-    public abstract function doNick($nick);
-
-    /**
-     * Retrieves information about a nick.
-     *
-     * @param string $nick Nick
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_5_2
-     */
-    public abstract function doWhois($nick);
-
-    /**
-     * Sends a message to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the message to send
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_4_1
-     */
-    public abstract function doPrivmsg($target, $text);
-
-    /**
-     * Sends a notice to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the notice to send
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_4_2
-     */
-    public abstract function doNotice($target, $text);
-
-    /**
-     * Kicks a user from a channel.
-     *
-     * @param string $nick    Nick of the user
-     * @param string $channel Channel name
-     * @param string $reason  Reason for the kick (optional)
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_8
-     */
-    public abstract function doKick($nick, $channel, $reason = null);
-
-    /**
-     * Responds to a server test of client responsiveness.
-     *
-     * @param string $daemon Daemon from which the original request originates
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_6_3
-     */
-    public abstract function doPong($daemon);
-
-    /**
-     * Sends a CTCP ACTION (/me) command to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the action to perform
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.4
-     */
-    public abstract function doAction($target, $text);
-
-    /**
-     * Sends a CTCP PING request to a user.
-     *
-     * @param string $nick User nick
-     * @param string $hash Hash to use in the handshake
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.2
-     */
-    public abstract function doPing($nick, $hash);
-
-    /**
-     * Sends a CTCP VERSION request or response to a user.
-     *
-     * @param string $nick    User nick
-     * @param string $version Version string to send for a response
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.1
-     */
-    public abstract function doVersion($nick, $version = null);
-
-    /**
-     * Sends a CTCP TIME request to a user.
-     *
-     * @param string $nick User nick
-     * @param string $time Time string to send for a response
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.6
-     */
-    public abstract function doTime($nick, $time = null);
-
-    /**
-     * Sends a CTCP FINGER request to a user.
-     *
-     * @param string $nick   User nick
-     * @param string $finger Finger string to send for a response
-     *
-     * @return void
-     * @link http://www.irchelp.org/irchelp/rfc/ctcpspec.html 
-     */
-    public abstract function doFinger($nick, $finger = null);
-
-    /**
-     * Sends a raw command to the server.
-     *
-     * @param string $command Command string to send
-     *
-     * @return void
-     */
-    public abstract function doRaw($command);
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Driver/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Driver/Exception.php
deleted file mode 100644 (file)
index 5873b2c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to driver operations.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Driver_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that an operation was requested requiring an active
-     * connection before one had been set
-     */
-    const ERR_NO_ACTIVE_CONNECTION = 1;
-
-    /**
-     * Error indicating that an operation was requested requiring an active
-     * connection where one had been set but not initiated
-     */
-    const ERR_NO_INITIATED_CONNECTION = 2;
-
-    /**
-     * Error indicating that an attempt to initiate a connection failed
-     */
-    const ERR_CONNECTION_ATTEMPT_FAILED = 3;
-
-    /**
-     * Error indicating that an attempt to send data via a connection failed
-     */
-    const ERR_CONNECTION_WRITE_FAILED = 4;
-
-    /**
-     * Error indicating that an attempt to read data via a connection failed
-     */
-    const ERR_CONNECTION_READ_FAILED = 5;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Driver/Statusnet.php b/plugins/Irc/extlib/phergie/Phergie/Driver/Statusnet.php
deleted file mode 100644 (file)
index 84c85a0..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php\r
-/**\r
- * StatusNet - the distributed open-source microblogging tool\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- * Extends the Streams driver (Phergie_Driver_Streams) to give external access\r
- * to the socket resources and send method\r
- *\r
- * @category  Phergie\r
- * @package   Phergie_Driver_Statusnet\r
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
- * @copyright 2010 StatusNet, Inc.\r
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
- * @link      http://status.net/\r
- */\r
-\r
-class Phergie_Driver_Statusnet extends Phergie_Driver_Streams {\r
-    /**\r
-     * Handles construction of command strings and their transmission to the\r
-     * server.\r
-     *\r
-     * @param string       $command Command to send\r
-     * @param string|array $args    Optional string or array of sequential\r
-     *        arguments\r
-     *\r
-     * @return string Command string that was sent\r
-     * @throws Phergie_Driver_Exception\r
-     */\r
-    public function send($command, $args = '') {\r
-        return parent::send($command, $args);\r
-    }\r
-\r
-    public function forceQuit() {\r
-        try {\r
-            // Send a QUIT command to the server\r
-            $this->send('QUIT', 'Reconnecting');\r
-        } catch (Phergie_Driver_Exception $e){}\r
-\r
-        // Terminate the socket connection\r
-        fclose($this->socket);\r
-\r
-        // Remove the socket from the internal socket list\r
-        unset($this->sockets[(string) $this->getConnection()->getHostmask()]);\r
-    }\r
-\r
-    /**\r
-    * Returns the array of sockets\r
-    *\r
-    * @return array Array of socket resources\r
-    */\r
-    public function getSockets() {\r
-        return $this->sockets;\r
-    }\r
-}
\ No newline at end of file
diff --git a/plugins/Irc/extlib/phergie/Phergie/Driver/Streams.php b/plugins/Irc/extlib/phergie/Phergie/Driver/Streams.php
deleted file mode 100644 (file)
index 73c0230..0000000
+++ /dev/null
@@ -1,729 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Driver that uses the sockets wrapper of the streams extension for
- * communicating with the server and handles formatting and parsing of
- * events using PHP.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Driver_Streams extends Phergie_Driver_Abstract
-{
-    /**
-     * Socket handlers
-     *
-     * @var array
-     */
-    protected $sockets = array();
-
-    /**
-     * Reference to the currently active socket handler
-     *
-     * @var resource
-     */
-    protected $socket;
-
-    /**
-     * Amount of time in seconds to wait to receive an event each time the
-     * socket is polled
-     *
-     * @var float
-     */
-    protected $timeout = 0.1;
-
-    /**
-     * Handles construction of command strings and their transmission to the
-     * server.
-     *
-     * @param string       $command Command to send
-     * @param string|array $args    Optional string or array of sequential
-     *        arguments
-     *
-     * @return string Command string that was sent
-     * @throws Phergie_Driver_Exception
-     */
-    protected function send($command, $args = '')
-    {
-        $connection = $this->getConnection();
-        $encoding = $connection->getEncoding();
-
-        // Require an open socket connection to continue
-        if (empty($this->socket)) {
-            throw new Phergie_Driver_Exception(
-                'doConnect() must be called first',
-                Phergie_Driver_Exception::ERR_NO_INITIATED_CONNECTION
-            );
-        }
-
-        // Add the command
-        $buffer = strtoupper($command);
-
-        // Add arguments
-        if (!empty($args)) {
-
-            // Apply formatting if arguments are passed in as an array
-            if (is_array($args)) {
-                $end = count($args) - 1;
-                $args[$end] = ':' . $args[$end];
-                $args = implode(' ', $args);
-            } else {
-                $args = ':' . $args;
-            }
-
-            $buffer .= ' ' . $args;
-        }
-
-        // Transmit the command over the socket connection
-        $attempts = $written = 0;
-        $temp = $buffer . "\r\n";
-        $is_multibyte = !substr($encoding, 0, 8) === 'ISO-8859' && $encoding !== 'ASCII' && $encoding !== 'CP1252';
-        $length = ($is_multibyte) ? mb_strlen($buffer, '8bit') : strlen($buffer);
-        while (true) {
-            $written += (int) fwrite($this->socket, $temp);
-            if ($written < $length) {
-                $temp = substr($temp, $written);
-                $attempts++;
-                if ($attempts == 3) {
-                    throw new Phergie_Driver_Exception(
-                        'Unable to write to socket',
-                        Phergie_Driver_Exception::ERR_CONNECTION_WRITE_FAILED
-                    );
-                }
-            } else {
-                break;
-            }
-        }
-
-        // Return the command string that was transmitted
-        return $buffer;
-    }
-
-    /**
-     * Overrides the parent class to set the currently active socket handler
-     * when the active connection is changed.
-     *
-     * @param Phergie_Connection $connection Active connection
-     *
-     * @return Phergie_Driver_Streams Provides a fluent interface
-     */
-    public function setConnection(Phergie_Connection $connection)
-    {
-        // Set the active socket handler
-        $hostmask = (string) $connection->getHostmask();
-        if (!empty($this->sockets[$hostmask])) {
-            $this->socket = $this->sockets[$hostmask];
-        }
-
-        // Set the active connection
-        return parent::setConnection($connection);
-    }
-
-    /**
-     * Returns a list of hostmasks corresponding to sockets with data to read.
-     *
-     * @param int $sec  Length of time to wait for new data (seconds)
-     * @param int $usec Length of time to wait for new data (microseconds)
-     *
-     * @return array List of hostmasks or an empty array if none were found
-     *         to have data to read
-     */
-    public function getActiveReadSockets($sec = 0, $usec = 200000)
-    {
-        $read = $this->sockets;
-        $write = null;
-        $error = null;
-        $active = array();
-
-        if (count($this->sockets) > 0) {
-            $number = stream_select($read, $write, $error, $sec, $usec);
-            if ($number > 0) {
-                foreach ($read as $item) {
-                    $active[] = array_search($item, $this->sockets);
-                }
-            }
-        }
-
-        return $active;
-    }
-
-    /**
-     * Sets the amount of time to wait for a new event each time the socket
-     * is polled.
-     *
-     * @param float $timeout Amount of time in seconds
-     *
-     * @return Phergie_Driver_Streams Provides a fluent interface
-     */
-    public function setTimeout($timeout)
-    {
-        $timeout = (float) $timeout;
-        if ($timeout) {
-            $this->timeout = $timeout;
-        }
-        return $this;
-    }
-
-    /**
-     * Returns the amount of time to wait for a new event each time the
-     * socket is polled.
-     *
-     * @return float Amount of time in seconds
-     */
-    public function getTimeout()
-    {
-        return $this->timeout;
-    }
-
-    /**
-     * Supporting method to parse event argument strings where the last
-     * argument may contain a colon.
-     *
-     * @param string $args  Argument string to parse
-     * @param int    $count Optional maximum number of arguments
-     *
-     * @return array Array of argument values
-     */
-    protected function parseArguments($args, $count = -1)
-    {
-        return preg_split('/ :?/S', $args, $count);
-    }
-
-    /**
-     * Listens for an event on the current connection.
-     *
-     * @return Phergie_Event_Interface|null Event instance if an event was
-     *         received, NULL otherwise
-     */
-    public function getEvent()
-    {
-        // Check the socket is still active
-        if (feof($this->socket)) {
-            throw new Phergie_Driver_Exception(
-                'EOF detected on socket',
-                Phergie_Driver_Exception::ERR_CONNECTION_READ_FAILED
-            );
-        }
-
-        // Check for a new event on the current connection
-        $buffer = fgets($this->socket, 512);
-
-        // If no new event was found, return NULL
-        if (empty($buffer)) {
-            return null;
-        }
-
-        // Strip the trailing newline from the buffer
-        $buffer = rtrim($buffer);
-
-        // If the event is from the server...
-        if (substr($buffer, 0, 1) != ':') {
-
-            // Parse the command and arguments
-            list($cmd, $args) = array_pad(explode(' ', $buffer, 2), 2, null);
-            $hostmask = new Phergie_Hostmask(null, null, $this->connection->getHost());
-
-        } else {
-            // If the event could be from the server or a user...
-
-            // Parse the server hostname or user hostmask, command, and arguments
-            list($prefix, $cmd, $args)
-                = array_pad(explode(' ', ltrim($buffer, ':'), 3), 3, null);
-            if (strpos($prefix, '@') !== false) {
-                $hostmask = Phergie_Hostmask::fromString($prefix);
-            } else {
-                $hostmask = new Phergie_Hostmask(null, null, $prefix);
-            }
-        }
-
-        // Parse the event arguments depending on the event type
-        $cmd = strtolower($cmd);
-        switch ($cmd) {
-        case 'names':
-        case 'nick':
-        case 'quit':
-        case 'ping':
-        case 'join':
-        case 'error':
-            $args = array(ltrim($args, ':'));
-            break;
-
-        case 'privmsg':
-        case 'notice':
-            $args = $this->parseArguments($args, 2);
-            list($source, $ctcp) = $args;
-            if (substr($ctcp, 0, 1) === "\001" && substr($ctcp, -1) === "\001") {
-                $ctcp = substr($ctcp, 1, -1);
-                $reply = ($cmd == 'notice');
-                list($cmd, $args) = array_pad(explode(' ', $ctcp, 2), 2, null);
-                $cmd = strtolower($cmd);
-                switch ($cmd) {
-                case 'version':
-                case 'time':
-                case 'finger':
-                    if ($reply) {
-                        $args = $ctcp;
-                    }
-                    break;
-                case 'ping':
-                    if ($reply) {
-                        $cmd .= 'Response';
-                    } else {
-                        $cmd = 'ctcpPing';
-                    }
-                    break;
-                case 'action':
-                    $args = array($source, $args);
-                    break;
-
-                default:
-                    $cmd = 'ctcp';
-                    if ($reply) {
-                        $cmd .= 'Response';
-                    }
-                    $args = array($source, $args);
-                    break;
-                }
-            }
-            break;
-
-        case 'oper':
-        case 'topic':
-        case 'mode':
-            $args = $this->parseArguments($args);
-            break;
-
-        case 'part':
-        case 'kill':
-        case 'invite':
-            $args = $this->parseArguments($args, 2);
-            break;
-
-        case 'kick':
-            $args = $this->parseArguments($args, 3);
-            break;
-
-        // Remove the target from responses
-        default:
-            $args = substr($args, strpos($args, ' ') + 1);
-            break;
-        }
-
-        // Create, populate, and return an event object
-        if (ctype_digit($cmd)) {
-            $event = new Phergie_Event_Response;
-            $event
-                ->setCode($cmd)
-                ->setDescription($args);
-        } else {
-            $event = new Phergie_Event_Request;
-            $event
-                ->setType($cmd)
-                ->setArguments($args);
-            if (isset($hostmask)) {
-                $event->setHostmask($hostmask);
-            }
-        }
-        $event->setRawData($buffer);
-        return $event;
-    }
-
-    /**
-     * Initiates a connection with the server.
-     *
-     * @return void
-     */
-    public function doConnect()
-    {
-        // Listen for input indefinitely
-        set_time_limit(0);
-
-        // Get connection information
-        $connection = $this->getConnection();
-        $hostname = $connection->getHost();
-        $port = $connection->getPort();
-        $password = $connection->getPassword();
-        $username = $connection->getUsername();
-        $nick = $connection->getNick();
-        $realname = $connection->getRealname();
-        $transport = $connection->getTransport();
-
-        // Establish and configure the socket connection
-        $remote = $transport . '://' . $hostname . ':' . $port;
-        $this->socket = @stream_socket_client($remote, $errno, $errstr);
-        if (!$this->socket) {
-            throw new Phergie_Driver_Exception(
-                'Unable to connect: socket error ' . $errno . ' ' . $errstr,
-                Phergie_Driver_Exception::ERR_CONNECTION_ATTEMPT_FAILED
-            );
-        }
-
-        $seconds = (int) $this->timeout;
-        $microseconds = ($this->timeout - $seconds) * 1000000;
-        stream_set_timeout($this->socket, $seconds, $microseconds);
-
-        // Send the password if one is specified
-        if (!empty($password)) {
-            $this->send('PASS', $password);
-        }
-
-        // Send user information
-        $this->send(
-            'USER',
-            array(
-                $username,
-                $hostname,
-                $hostname,
-                $realname
-            )
-        );
-
-        $this->send('NICK', $nick);
-
-        // Add the socket handler to the internal array for socket handlers
-        $this->sockets[(string) $connection->getHostmask()] = $this->socket;
-    }
-
-    /**
-     * Terminates the connection with the server.
-     *
-     * @param string $reason Reason for connection termination (optional)
-     *
-     * @return void
-     */
-    public function doQuit($reason = null)
-    {
-        // Send a QUIT command to the server
-        $this->send('QUIT', $reason);
-
-        // Terminate the socket connection
-        fclose($this->socket);
-
-        // Remove the socket from the internal socket list
-        unset($this->sockets[(string) $this->getConnection()->getHostmask()]);
-    }
-
-    /**
-     * Joins a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to join
-     * @param string $keys     Optional comma-delimited list of channel keys
-     *
-     * @return void
-     */
-    public function doJoin($channels, $keys = null)
-    {
-        $args = array($channels);
-
-        if (!empty($keys)) {
-            $args[] = $keys;
-        }
-
-        $this->send('JOIN', $args);
-    }
-
-    /**
-     * Leaves a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to leave
-     *
-     * @return void
-     */
-    public function doPart($channels)
-    {
-        $this->send('PART', $channels);
-    }
-
-    /**
-     * Invites a user to an invite-only channel.
-     *
-     * @param string $nick    Nick of the user to invite
-     * @param string $channel Name of the channel
-     *
-     * @return void
-     */
-    public function doInvite($nick, $channel)
-    {
-        $this->send('INVITE', array($nick, $channel));
-    }
-
-    /**
-     * Obtains a list of nicks of usrs in currently joined channels.
-     *
-     * @param string $channels Comma-delimited list of one or more channels
-     *
-     * @return void
-     */
-    public function doNames($channels)
-    {
-        $this->send('NAMES', $channels);
-    }
-
-    /**
-     * Obtains a list of channel names and topics.
-     *
-     * @param string $channels Comma-delimited list of one or more channels
-     *                         to which the response should be restricted
-     *                         (optional)
-     *
-     * @return void
-     */
-    public function doList($channels = null)
-    {
-        $this->send('LIST', $channels);
-    }
-
-    /**
-     * Retrieves or changes a channel topic.
-     *
-     * @param string $channel Name of the channel
-     * @param string $topic   New topic to assign (optional)
-     *
-     * @return void
-     */
-    public function doTopic($channel, $topic = null)
-    {
-        $args = array($channel);
-
-        if (!empty($topic)) {
-            $args[] = $topic;
-        }
-
-        $this->send('TOPIC', $args);
-    }
-
-    /**
-     * Retrieves or changes a channel or user mode.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $mode   New mode to assign (optional)
-     *
-     * @return void
-     */
-    public function doMode($target, $mode = null)
-    {
-        $args = array($target);
-
-        if (!empty($mode)) {
-            $args[] = $mode;
-        }
-
-        $this->send('MODE', $args);
-    }
-
-    /**
-     * Changes the client nick.
-     *
-     * @param string $nick New nick to assign
-     *
-     * @return void
-     */
-    public function doNick($nick)
-    {
-        $this->send('NICK', $nick);
-    }
-
-    /**
-     * Retrieves information about a nick.
-     *
-     * @param string $nick Nick
-     *
-     * @return void
-     */
-    public function doWhois($nick)
-    {
-        $this->send('WHOIS', $nick);
-    }
-
-    /**
-     * Sends a message to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the message to send
-     *
-     * @return void
-     */
-    public function doPrivmsg($target, $text)
-    {
-        $this->send('PRIVMSG', array($target, $text));
-    }
-
-    /**
-     * Sends a notice to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the notice to send
-     *
-     * @return void
-     */
-    public function doNotice($target, $text)
-    {
-        $this->send('NOTICE', array($target, $text));
-    }
-
-    /**
-     * Kicks a user from a channel.
-     *
-     * @param string $nick    Nick of the user
-     * @param string $channel Channel name
-     * @param string $reason  Reason for the kick (optional)
-     *
-     * @return void
-     */
-    public function doKick($nick, $channel, $reason = null)
-    {
-        $args = array($nick, $channel);
-
-        if (!empty($reason)) {
-            $args[] = $response;
-        }
-
-        $this->send('KICK', $args);
-    }
-
-    /**
-     * Responds to a server test of client responsiveness.
-     *
-     * @param string $daemon Daemon from which the original request originates
-     *
-     * @return void
-     */
-    public function doPong($daemon)
-    {
-        $this->send('PONG', $daemon);
-    }
-
-    /**
-     * Sends a CTCP ACTION (/me) command to a nick or channel.
-     *
-     * @param string $target Channel name or user nick
-     * @param string $text   Text of the action to perform
-     *
-     * @return void
-     */
-    public function doAction($target, $text)
-    {
-        $buffer = rtrim('ACTION ' . $text);
-
-        $this->doPrivmsg($target, chr(1) . $buffer . chr(1));
-    }
-
-    /**
-     * Sends a CTCP response to a user.
-     *
-     * @param string       $nick    User nick
-     * @param string       $command Command to send
-     * @param string|array $args    String or array of sequential arguments
-     *        (optional)
-     *
-     * @return void
-     */
-    protected function doCtcp($nick, $command, $args = null)
-    {
-        if (is_array($args)) {
-            $args = implode(' ', $args);
-        }
-
-        $buffer = rtrim(strtoupper($command) . ' ' . $args);
-
-        $this->doNotice($nick, chr(1) . $buffer . chr(1));
-    }
-
-    /**
-     * Sends a CTCP PING request or response (they are identical) to a user.
-     *
-     * @param string $nick User nick
-     * @param string $hash Hash to use in the handshake
-     *
-     * @return void
-     */
-    public function doPing($nick, $hash)
-    {
-        $this->doCtcp($nick, 'PING', $hash);
-    }
-
-    /**
-     * Sends a CTCP VERSION request or response to a user.
-     *
-     * @param string $nick    User nick
-     * @param string $version Version string to send for a response
-     *
-     * @return void
-     */
-    public function doVersion($nick, $version = null)
-    {
-        if ($version) {
-            $this->doCtcp($nick, 'VERSION', $version);
-        } else {
-            $this->doCtcp($nick, 'VERSION');
-        }
-    }
-
-    /**
-     * Sends a CTCP TIME request to a user.
-     *
-     * @param string $nick User nick
-     * @param string $time Time string to send for a response
-     *
-     * @return void
-     */
-    public function doTime($nick, $time = null)
-    {
-        if ($time) {
-            $this->doCtcp($nick, 'TIME', $time);
-        } else {
-            $this->doCtcp($nick, 'TIME');
-        }
-    }
-
-    /**
-     * Sends a CTCP FINGER request to a user.
-     *
-     * @param string $nick   User nick
-     * @param string $finger Finger string to send for a response
-     *
-     * @return void
-     */
-    public function doFinger($nick, $finger = null)
-    {
-        if ($finger) {
-            $this->doCtcp($nick, 'FINGER', $finger);
-        } else {
-            $this->doCtcp($nick, 'FINGER');
-        }
-    }
-
-    /**
-     * Sends a raw command to the server.
-     *
-     * @param string $command Command string to send
-     *
-     * @return void
-     */
-    public function doRaw($command)
-    {
-        $this->send('RAW', $command);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Event/Abstract.php
deleted file mode 100644 (file)
index 54b035d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for events.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-abstract class Phergie_Event_Abstract
-{
-    /**
-     * Event type, used for determining the callback to execute in response
-     *
-     * @var string
-     */
-    protected $type;
-
-    /**
-     * Returns the event type.
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->type; 
-    }
-
-    /**
-     * Sets the event type.
-     *
-     * @param string $type Event type
-     *
-     * @return Phergie_Event_Abstract Implements a fluent interface
-     */
-    public function setType($type)
-    {
-        $this->type = (string) $type;
-        return $this;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Command.php b/plugins/Irc/extlib/phergie/Phergie/Event/Command.php
deleted file mode 100644 (file)
index 5940636..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Event originating from a plugin for the bot.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Event_Command extends Phergie_Event_Request
-{
-    /**
-     * Reference to the plugin instance that created the event
-     *
-     * @var Phergie_Plugin_Abstract
-     */
-    protected $plugin;
-
-    /**
-     * Stores a reference to the plugin instance that created the event.
-     *
-     * @param Phergie_Plugin_Abstract $plugin Plugin instance
-     *
-     * @return Phergie_Event_Command Provides a fluent interface
-     */
-    public function setPlugin(Phergie_Plugin_Abstract $plugin)
-    {
-        $this->plugin = $plugin;
-        return $this;
-    }
-
-    /**
-     * Returns a reference to the plugin instance that created the event.
-     *
-     * @return Phergie_Plugin_Abstract
-     */
-    public function getPlugin()
-    {
-        return $this->plugin;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Event/Exception.php
deleted file mode 100644 (file)
index 6b094a8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to outgoing events. 
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Event_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that an attempt was made to create an event of an 
-     * unknown type
-     */
-    const ERR_UNKNOWN_EVENT_TYPE = 1;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Handler.php b/plugins/Irc/extlib/phergie/Phergie/Event/Handler.php
deleted file mode 100644 (file)
index e308df8..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Handles events initiated by plugins.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Event_Handler implements IteratorAggregate, Countable
-{
-    /**
-     * Current queue of events
-     *
-     * @var array
-     */
-    protected $events;
-
-    /**
-     * Constructor to initialize the event queue.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $this->events = array();
-    }
-
-    /**
-     * Adds an event to the queue.
-     *
-     * @param Phergie_Plugin_Abstract $plugin Plugin originating the event
-     * @param string                  $type   Event type, corresponding to a
-     *        Phergie_Event_Command::TYPE_* constant
-     * @param array                   $args   Optional event arguments
-     *
-     * @return Phergie_Event_Handler Provides a fluent interface
-     */
-    public function addEvent(Phergie_Plugin_Abstract $plugin, $type,
-        array $args = array()
-    ) {
-        if (!defined('Phergie_Event_Command::TYPE_' . strtoupper($type))) {
-            throw new Phergie_Event_Exception(
-                'Unknown event type "' . $type . '"',
-                Phergie_Event_Exception::ERR_UNKNOWN_EVENT_TYPE
-            );
-        }
-
-        $event = new Phergie_Event_Command;
-        $event
-            ->setPlugin($plugin)
-            ->setType($type)
-            ->setArguments($args);
-
-        $this->events[] = $event;
-
-        return $this;
-    }
-
-    /**
-     * Returns the current event queue.
-     *
-     * @return array Enumerated array of Phergie_Event_Command objects
-     */
-    public function getEvents()
-    {
-        return $this->events;
-    }
-
-    /**
-     * Clears the event queue.
-     *
-     * @return Phergie_Event_Handler Provides a fluent interface
-     */
-    public function clearEvents()
-    {
-        $this->events = array();
-        return $this;
-    }
-
-    /**
-     * Replaces the current event queue with a given queue of events.
-     *
-     * @param array $events Ordered list of objects of the class
-     *        Phergie_Event_Command
-     *
-     * @return Phergie_Event_Handler Provides a fluent interface
-     */
-    public function replaceEvents(array $events)
-    {
-        $this->events = $events;
-        return $this;
-    }
-
-    /**
-     * Returns whether an event of the given type exists in the queue.
-     *
-     * @param string $type Event type from Phergie_Event_Request::TYPE_*
-     *        constants
-     *
-     * @return bool TRUE if an event of the specified type exists in the
-     *         queue, FALSE otherwise
-     */
-    public function hasEventOfType($type)
-    {
-        foreach ($this->events as $event) {
-            if ($event->getType() == $type) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns a list of events of a specified type.
-     *
-     * @param string $type Event type from Phergie_Event_Request::TYPE_*
-     *        constants
-     *
-     * @return array Array containing event instances of the specified type
-     *         or an empty array if no such events were found
-     */
-    public function getEventsOfType($type)
-    {
-        $events = array();
-        foreach ($this->events as $event) {
-            if ($event->getType() == $type) {
-                $events[] = $event;
-            }
-        }
-        return $events;
-    }
-
-    /**
-     * Removes a single event from the event queue.
-     *
-     * @param Phergie_Event_Command $event Event to remove
-     *
-     * @return Phergie_Event_Handler Provides a fluent interface
-     */
-    public function removeEvent(Phergie_Event_Command $event)
-    {
-        $key = array_search($event, $this->events);
-        if ($key !== false) {
-            unset($this->events[$key]);
-        }
-        return $this;
-    }
-
-    /**
-     * Returns an iterator for the current event queue.
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        return new ArrayIterator($this->events);
-    }
-
-    /**
-     * Returns the number of events in the event queue
-     *
-     * @return int number of queued events
-     */
-    public function count()
-    {
-        return count($this->events);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Request.php b/plugins/Irc/extlib/phergie/Phergie/Event/Request.php
deleted file mode 100644 (file)
index 647b5ac..0000000
+++ /dev/null
@@ -1,468 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Autonomous event originating from a user or the server.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- * @link     http://www.irchelp.org/irchelp/rfc/chapter4.html
- */
-class Phergie_Event_Request
-    extends Phergie_Event_Abstract
-    implements ArrayAccess
-{
-    /**
-     * Nick message event type
-     */
-    const TYPE_NICK = 'nick';
-
-    /**
-     * Whois message event type
-     */
-    const TYPE_WHOIS = 'whois';
-
-    /**
-     * Quit command event type
-     */
-    const TYPE_QUIT = 'quit';
-
-    /**
-     * Join message event type
-     */
-    const TYPE_JOIN = 'join';
-
-    /**
-     * Kick message event type
-     */
-    const TYPE_KICK = 'kick';
-
-    /**
-     * Part message event type
-     */
-    const TYPE_PART = 'part';
-
-    /**
-     * Invite message event type
-     */
-    const TYPE_INVITE = 'invite';
-
-    /**
-     * Mode message event type
-     */
-    const TYPE_MODE = 'mode';
-
-    /**
-     * Topic message event type
-     */
-    const TYPE_TOPIC = 'topic';
-
-    /**
-     * Private message command event type
-     */
-    const TYPE_PRIVMSG = 'privmsg';
-
-    /**
-     * Notice message event type
-     */
-    const TYPE_NOTICE = 'notice';
-
-    /**
-     * Pong message event type
-     */
-    const TYPE_PONG = 'pong';
-
-    /**
-     * CTCP ACTION command event type
-     */
-    const TYPE_ACTION = 'action';
-
-    /**
-     * CTCP PING command event type
-     */
-    const TYPE_PING = 'ping';
-
-    /**
-     * CTCP TIME command event type
-     */
-    const TYPE_TIME = 'time';
-
-    /**
-     * CTCP VERSION command event type
-     */
-    const TYPE_VERSION = 'version';
-
-    /**
-     * RAW message event type
-     */
-    const TYPE_RAW = 'raw';
-
-    /**
-     * Mapping of event types to their named parameters
-     *
-     * @var array
-     */
-    protected static $map = array(
-
-        self::TYPE_QUIT => array(
-            'message' => 0
-        ),
-
-        self::TYPE_JOIN => array(
-            'channel' => 0
-        ),
-
-        self::TYPE_KICK => array(
-            'channel' => 0,
-            'user'    => 1,
-            'comment' => 2
-        ),
-
-        self::TYPE_PART => array(
-            'channel' => 0,
-            'message' => 1
-        ),
-
-        self::TYPE_INVITE => array(
-            'nickname' => 0,
-            'channel'  => 1
-        ),
-
-        self::TYPE_MODE => array(
-            'target'  => 0,
-            'mode'    => 1,
-            'limit'   => 2,
-            'user'    => 3,
-            'banmask' => 4
-        ),
-
-        self::TYPE_TOPIC => array(
-            'channel' => 0,
-            'topic'   => 1
-        ),
-
-        self::TYPE_PRIVMSG => array(
-            'receiver' => 0,
-            'text'     => 1
-        ),
-
-        self::TYPE_NOTICE => array(
-            'nickname' => 0,
-            'text'     => 1
-        ),
-
-        self::TYPE_ACTION => array(
-            'target' => 0,
-            'action' => 1
-        ),
-
-        self::TYPE_RAW => array(
-            'message' => 0
-        )
-
-    );
-
-    /**
-     * Hostmask representing the originating user, if applicable
-     *
-     * @var Phergie_Hostmask
-     */
-    protected $hostmask;
-
-    /**
-     * Arguments included with the message
-     *
-     * @var array
-     */
-    protected $arguments;
-
-    /**
-     * Raw data sent by the server
-     *
-     * @var string
-     */
-    protected $rawData;
-
-    /**
-     * Sets the hostmask representing the originating user.
-     *
-     * @param Phergie_Hostmask $hostmask User hostmask
-     *
-     * @return Phergie_Event_Request Provides a fluent interface
-     */
-    public function setHostmask(Phergie_Hostmask $hostmask)
-    {
-        $this->hostmask = $hostmask;
-        return $this;
-    }
-
-    /**
-     * Returns the hostmask representing the originating user.
-     *
-     * @return Phergie_Event_Request|null Hostmask or NULL if none was set
-     */
-    public function getHostmask()
-    {
-        return $this->hostmask;
-    }
-
-    /**
-     * Sets the arguments for the request.
-     *
-     * @param array $arguments Request arguments
-     *
-     * @return Phergie_Event_Request Provides a fluent interface
-     */
-    public function setArguments($arguments)
-    {
-        $this->arguments = $arguments;
-        return $this;
-    }
-
-    /**
-     * Sets the value of a single argument for the request.
-     *
-     * @param mixed  $argument Integer position (starting from 0) or the
-     *        equivalent string name of the argument from self::$map
-     * @param string $value    Value to assign to the argument
-     *
-     * @return Phergie_Event_Request Provides a fluent interface
-     */
-    public function setArgument($argument, $value)
-    {
-        $argument = $this->resolveArgument($argument);
-        if ($argument !== null) {
-            $this->arguments[$argument] = (string) $value;
-        }
-        return $this;
-    }
-
-    /**
-     * Returns the arguments for the request.
-     *
-     * @return array
-     */
-    public function getArguments()
-    {
-        return $this->arguments;
-    }
-
-    /**
-     * Resolves an argument specification to an integer position.
-     *
-     * @param mixed $argument Integer position (starting from 0) or the
-     *        equivalent string name of the argument from self::$map
-     *
-     * @return int|null Integer position of the argument or NULL if no
-     *         corresponding argument was found
-     */
-    protected function resolveArgument($argument)
-    {
-        if (isset($this->arguments[$argument])) {
-            return $argument;
-        } else {
-            $argument = strtolower($argument);
-            if (isset(self::$map[$this->type][$argument])
-                && isset($this->arguments[self::$map[$this->type][$argument]])
-            ) {
-                return self::$map[$this->type][$argument];
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns a single specified argument for the request.
-     *
-     * @param mixed $argument Integer position (starting from 0) or the
-     *        equivalent string name of the argument from self::$map
-     *
-     * @return string|null Argument value or NULL if none is set
-     */
-    public function getArgument($argument)
-    {
-        $argument = $this->resolveArgument($argument);
-        if ($argument !== null) {
-            return $this->arguments[$argument];
-        }
-        return null;
-    }
-
-    /**
-     * Sets the raw buffer for the event.
-     *
-     * @param string $buffer Raw event buffer
-     *
-     * @return Phergie_Event_Request Provides a fluent interface
-     */
-    public function setRawData($buffer)
-    {
-        $this->rawData = $buffer;
-        return $this;
-    }
-
-    /**
-     * Returns the raw buffer sent from the server for the event.
-     *
-     * @return string
-     */
-    public function getRawData()
-    {
-        return $this->rawData;
-    }
-
-    /**
-     * Returns the nick of the user who originated the event.
-     *
-     * @return string
-     */
-    public function getNick()
-    {
-        return $this->hostmask->getNick();
-    }
-
-    /**
-     * Returns the channel name if the event occurred in a channel or the
-     * user nick if the event was a private message directed at the bot by a
-     * user.
-     *
-     * @return string
-     */
-    public function getSource()
-    {
-        if (substr($this->arguments[0], 0, 1) == '#') {
-            return $this->arguments[0];
-        }
-        return $this->hostmask->getNick();
-    }
-
-    /**
-     * Returns whether or not the event occurred within a channel.
-     *
-     * @return TRUE if the event is in a channel, FALSE otherwise
-     */
-    public function isInChannel()
-    {
-        return (substr($this->getSource(), 0, 1) == '#');
-    }
-
-    /**
-     * Returns whether or not the event originated from a user.
-     *
-     * @return TRUE if the event is from a user, FALSE otherwise
-     */
-    public function isFromUser()
-    {
-        if (empty($this->hostmask)) {
-            return false;
-        }
-        $username = $this->hostmask->getUsername();
-        return !empty($username);
-    }
-
-    /**
-     * Returns whether or not the event originated from the server.
-     *
-     * @return TRUE if the event is from the server, FALSE otherwise
-     */
-    public function isFromServer()
-    {
-        $username = $this->hostmask->getUsername();
-        return empty($username);
-    }
-
-    /**
-     * Provides access to named parameters via virtual "getter" methods.
-     *
-     * @param string $name      Name of the method called
-     * @param array  $arguments Arguments passed to the method (should always
-     *        be empty)
-     *
-     * @return mixed Method return value
-     */
-    public function __call($name, array $arguments)
-    {
-        if (!count($arguments) && substr($name, 0, 3) == 'get') {
-            return $this->getArgument(substr($name, 3));
-        }
-    }
-
-    /**
-     * Checks to see if an event argument is assigned a value.
-     *
-     * @param string|int $offset Argument name or position beginning from 0
-     *
-     * @return bool TRUE if the argument has a value, FALSE otherwise
-     * @see ArrayAccess::offsetExists()
-     */
-    public function offsetExists($offset)
-    {
-        return ($this->resolveArgument($offset) !== null);
-    }
-
-    /**
-     * Returns the value of an event argument.
-     *
-     * @param string|int $offset Argument name or position beginning from 0
-     *
-     * @return string|null Argument value or NULL if none is set
-     * @see ArrayAccess::offsetGet()
-     */
-    public function offsetGet($offset)
-    {
-        return $this->getArgument($offset);
-    }
-
-    /**
-     * Sets the value of an event argument.
-     *
-     * @param string|int $offset Argument name or position beginning from 0
-     * @param string     $value  New argument value
-     *
-     * @return void
-     * @see ArrayAccess::offsetSet()
-     */
-    public function offsetSet($offset, $value)
-    {
-        $offset = $this->resolveArgument($offset);
-        if ($offset !== null) {
-            $this->arguments[$offset] = $value;
-        }
-    }
-
-    /**
-     * Removes the value set for an event argument.
-     *
-     * @param string|int $offset Argument name or position beginning from 0
-     *
-     * @return void
-     * @see ArrayAccess::offsetUnset()
-     */
-    public function offsetUnset($offset)
-    {
-        if ($offset = $this->resolveArgument($offset)) {
-            unset($this->arguments[$offset]);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Event/Response.php b/plugins/Irc/extlib/phergie/Phergie/Event/Response.php
deleted file mode 100644 (file)
index 097e253..0000000
+++ /dev/null
@@ -1,953 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Event originating from the server in response to an event sent by the
- * current client.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- * @link     http://www.irchelp.org/irchelp/rfc/chapter6.html
- */
-class Phergie_Event_Response extends Phergie_Event_Abstract
-{
-    /**
-     * <nickname> No such nick/channel
-     *
-     * Used to indicate the nickname parameter supplied to a command is currently
-     * unused.
-     */
-    const ERR_NOSUCHNICK = '401';
-
-    /**
-     * <server name> No such server
-     *
-     * Used to indicate the server name given currently doesn't exist.
-     */
-    const ERR_NOSUCHSERVER = '402';
-
-    /**
-     * <channel name> No such channel
-     *
-     * Used to indicate the given channel name is invalid.
-     */
-    const ERR_NOSUCHCHANNEL = '403';
-
-    /**
-     * <channel name> Cannot send to channel
-     *
-     * Sent to a user who is either (a) not on a channel which is mode +n or (b) not
-     * a chanop (or mode +v) on a channel which has mode +m set and is trying to send
-     * a PRIVMSG message to that channel.
-     */
-    const ERR_CANNOTSENDTOCHAN = '404';
-
-    /**
-     * <channel name> You have joined too many channels
-     *
-     * Sent to a user when they have joined the maximum number of allowed channels
-     * and they try to join another channel.
-     */
-    const ERR_TOOMANYCHANNELS = '405';
-
-    /**
-     * <nickname> There was no such nickname
-     *
-     * Returned by WHOWAS to indicate there is no history information for that
-     * nickname.
-     */
-    const ERR_WASNOSUCHNICK = '406';
-
-    /**
-     * <target> Duplicate recipients. No message delivered
-     *
-     * Returned to a client which is attempting to send PRIVMSG/NOTICE using the
-     * user@host destination format and for a user@host which has several
-     * occurrences.
-     */
-    const ERR_TOOMANYTARGETS = '407';
-
-    /**
-     * No origin specified
-     *
-     * PING or PONG message missing the originator parameter which is required since
-     * these commands must work without valid prefixes.
-     */
-    const ERR_NOORIGIN = '409';
-
-    /**
-     * No recipient given (<command>)
-     */
-    const ERR_NORECIPIENT = '411';
-
-    /**
-     * No text to send
-     */
-    const ERR_NOTEXTTOSEND = '412';
-
-    /**
-     * <mask> No toplevel domain specified
-     */
-    const ERR_NOTOPLEVEL = '413';
-
-    /**
-     * <mask> Wildcard in toplevel domain
-     *
-     * 412 - 414 are returned by PRIVMSG to indicate that the message wasn't
-     * delivered for some reason. ERR_NOTOPLEVEL and ERR_WILDTOPLEVEL are errors that
-     * are returned when an invalid use of "PRIVMSG $<server>" or "PRIVMSG #<host>"
-     * is attempted.
-     */
-    const ERR_WILDTOPLEVEL = '414';
-
-    /**
-     * <command> Unknown command
-     *
-     * Returned to a registered client to indicate that the command sent is unknown
-     * by the server.
-     */
-    const ERR_UNKNOWNCOMMAND = '421';
-
-    /**
-     * MOTD File is missing
-     *
-     * Server's MOTD file could not be opened by the server.
-     */
-    const ERR_NOMOTD = '422';
-
-    /**
-     * <server> No administrative info available
-     *
-     * Returned by a server in response to an ADMIN message when there is an error in
-     * finding the appropriate information.
-     */
-    const ERR_NOADMININFO = '423';
-
-    /**
-     * File error doing <file op> on <file>
-     *
-     * Generic error message used to report a failed file operation during the
-     * processing of a message.
-     */
-    const ERR_FILEERROR = '424';
-
-    /**
-     * No nickname given
-     *
-     * Returned when a nickname parameter expected for a command and isn't found.
-     */
-    const ERR_NONICKNAMEGIVEN = '431';
-
-    /**
-     * <nick> Erroneus nickname
-     *
-     * Returned after receiving a NICK message which contains characters which do not
-     * fall in the defined set. See section x.x.x for details on valid nicknames.
-     */
-    const ERR_ERRONEUSNICKNAME = '432';
-
-    /**
-     * <nick> Nickname is already in use
-     *
-     * Returned when a NICK message is processed that results in an attempt to change
-     * to a currently existing nickname.
-     */
-    const ERR_NICKNAMEINUSE = '433';
-
-    /**
-     * <nick> Nickname collision KILL
-     *
-     * Returned by a server to a client when it detects a nickname collision
-     * (registered of a NICK that already exists by another server).
-     */
-    const ERR_NICKCOLLISION = '436';
-
-    /**
-     * <nick> <channel> They aren't on that channel
-     *
-     * Returned by the server to indicate that the target user of the command is not
-     * on the given channel.
-     */
-    const ERR_USERNOTINCHANNEL = '441';
-
-    /**
-     * <channel> You're not on that channel
-     *
-     * Returned by the server whenever a client tries to perform a channel effecting
-     * command for which the client isn't a member.
-     */
-    const ERR_NOTONCHANNEL = '442';
-
-    /**
-     * <user> <channel> is already on channel
-     *
-     * Returned when a client tries to invite a user to a channel they are already
-     * on.
-     */
-    const ERR_USERONCHANNEL = '443';
-
-    /**
-     * <user> User not logged in
-     *
-     * Returned by the summon after a SUMMON command for a user was unable to be
-     * performed since they were not logged in.
-     */
-    const ERR_NOLOGIN = '444';
-
-    /**
-     * SUMMON has been disabled
-     *
-     * Returned as a response to the SUMMON command. Must be returned by any server
-     * which does not implement it.
-     */
-    const ERR_SUMMONDISABLED = '445';
-
-    /**
-     * USERS has been disabled
-     *
-     * Returned as a response to the USERS command. Must be returned by any server
-     * which does not implement it.
-     */
-    const ERR_USERSDISABLED = '446';
-
-    /**
-     * You have not registered
-     *
-     * Returned by the server to indicate that the client must be registered before
-     * the server will allow it to be parsed in detail.
-     */
-    const ERR_NOTREGISTERED = '451';
-
-    /**
-     * <command> Not enough parameters
-     *
-     * Returned by the server by numerous commands to indicate to the client that it
-     * didn't supply enough parameters.
-     */
-    const ERR_NEEDMOREPARAMS = '461';
-
-    /**
-     * You may not reregister
-     *
-     * Returned by the server to any link which tries to change part of the
-     * registered details (such as password or user details from second USER
-     * message).
-     */
-    const ERR_ALREADYREGISTRED = '462';
-
-    /**
-     * Your host isn't among the privileged
-     *
-     * Returned to a client which attempts to register with a server which does not
-     * been setup to allow connections from the host the attempted connection is
-     * tried.
-     */
-    const ERR_NOPERMFORHOST = '463';
-
-    /**
-     * Password incorrect
-     *
-     * Returned to indicate a failed attempt at registering a connection for which a
-     * password was required and was either not given or incorrect.
-     */
-    const ERR_PASSWDMISMATCH = '464';
-
-    /**
-     * You are banned from this server
-     *
-     * Returned after an attempt to connect and register yourself with a server which
-     * has been setup to explicitly deny connections to you.
-     */
-    const ERR_YOUREBANNEDCREEP = '465';
-
-    /**
-     * <channel> Channel key already set
-     */
-    const ERR_KEYSET = '467';
-
-    /**
-     * <channel> Cannot join channel (+l)
-     */
-    const ERR_CHANNELISFULL = '471';
-
-    /**
-     * <char> is unknown mode char to me
-     */
-    const ERR_UNKNOWNMODE = '472';
-
-    /**
-     * <channel> Cannot join channel (+i)
-     */
-    const ERR_INVITEONLYCHAN = '473';
-
-    /**
-     * <channel> Cannot join channel (+b)
-     */
-    const ERR_BANNEDFROMCHAN = '474';
-
-    /**
-     * <channel> Cannot join channel (+k)
-     */
-    const ERR_BADCHANNELKEY = '475';
-
-    /**
-     * Permission Denied- You're not an IRC operator
-     *
-     * Any command requiring operator privileges to operate must return this error to
-     * indicate the attempt was unsuccessful.
-     */
-    const ERR_NOPRIVILEGES = '481';
-
-    /**
-     * <channel> You're not channel operator
-     *
-     * Any command requiring 'chanop' privileges (such as MODE messages) must return
-     * this error if the client making the attempt is not a chanop on the specified
-     * channel.
-     */
-    const ERR_CHANOPRIVSNEEDED = '482';
-
-    /**
-     * You cant kill a server!
-     *
-     * Any attempts to use the KILL command on a server are to be refused and this
-     * error returned directly to the client.
-     */
-    const ERR_CANTKILLSERVER = '483';
-
-    /**
-     * No O-lines for your host
-     *
-     * If a client sends an OPER message and the server has not been configured to
-     * allow connections from the client's host as an operator, this error must be
-     * returned.
-     */
-    const ERR_NOOPERHOST = '491';
-
-    /**
-     * Unknown MODE flag
-     *
-     * Returned by the server to indicate that a MODE message was sent with a
-     * nickname parameter and that the a mode flag sent was not recognized.
-     */
-    const ERR_UMODEUNKNOWNFLAG = '501';
-
-    /**
-     * Cant change mode for other users
-     *
-     * Error sent to any user trying to view or change the user mode for a user other
-     * than themselves.
-     */
-    const ERR_USERSDONTMATCH = '502';
-
-    /**
-     * Dummy reply number. Not used.
-     */
-    const RPL_NONE = '300';
-
-    /**
-     * [<reply>{<space><reply>}]
-     *
-     * Reply format used by USERHOST to list replies to the query list. The reply
-     * string is composed as follows <reply> = <nick>['*'] '=' <'+'|'-'><hostname>
-     * The '*' indicates whether the client has registered as an Operator. The '-' or
-     * '+' characters represent whether the client has set an AWAY message or not
-     * respectively.
-     */
-    const RPL_USERHOST = '302';
-
-    /**
-     * [<nick> {<space><nick>}]
-     *
-     * Reply format used by ISON to list replies to the query list.
-     */
-    const RPL_ISON = '303';
-
-    /**
-     * <nick> <away message>
-     */
-    const RPL_AWAY = '301';
-
-    /**
-     * You are no longer marked as being away
-     */
-    const RPL_UNAWAY = '305';
-
-    /**
-     * You have been marked as being away
-     *
-     * These replies are used with the AWAY command (if allowed). RPL_AWAY is sent to
-     * any client sending a PRIVMSG to a client which is away. RPL_AWAY is only sent
-     * by the server to which the client is connected. Replies RPL_UNAWAY and
-     * RPL_NOWAWAY are sent when the client removes and sets an AWAY message.
-     */
-    const RPL_NOWAWAY = '306';
-
-    /**
-     * <nick> <user> <host> * <real name>
-     */
-    const RPL_WHOISUSER = '311';
-
-    /**
-     * <nick> <server> <server info>
-     */
-    const RPL_WHOISSERVER = '312';
-
-    /**
-     * <nick> is an IRC operator
-     */
-    const RPL_WHOISOPERATOR = '313';
-
-    /**
-     * <nick> <integer> seconds idle
-     */
-    const RPL_WHOISIDLE = '317';
-
-    /**
-     * <nick> End of /WHOIS list
-     */
-    const RPL_ENDOFWHOIS = '318';
-
-    /**
-     * <nick> {[@|+]<channel><space>}
-     *
-     * Replies 311 - 313, 317 - 319 are all replies generated in response to a WHOIS
-     * message. Given that there are enough parameters present, the answering server
-     * must either formulate a reply out of the above numerics (if the query nick is
-     * found) or return an error reply. The '*' in RPL_WHOISUSER is there as the
-     * literal character and not as a wild card. For each reply set, only
-     * RPL_WHOISCHANNELS may appear more than once (for long lists of channel names).
-     * The '@' and '+' characters next to the channel name indicate whether a client
-     * is a channel operator or has been granted permission to speak on a moderated
-     * channel. The RPL_ENDOFWHOIS reply is used to mark the end of processing a
-     * WHOIS message.
-     */
-    const RPL_WHOISCHANNELS = '319';
-
-    /**
-     * <nick> <user> <host> * <real name>
-     */
-    const RPL_WHOWASUSER = '314';
-
-    /**
-     * <nick> End of WHOWAS
-     *
-     * When replying to a WHOWAS message, a server must use the replies
-     * RPL_WHOWASUSER, RPL_WHOISSERVER or ERR_WASNOSUCHNICK for each nickname in the
-     * presented list. At the end of all reply batches, there must be RPL_ENDOFWHOWAS
-     * (even if there was only one reply and it was an error).
-     */
-    const RPL_ENDOFWHOWAS = '369';
-
-    /**
-     * Channel Users Name
-     */
-    const RPL_LISTSTART = '321';
-
-    /**
-     * <channel> <# visible> <topic>
-     */
-    const RPL_LIST = '322';
-
-    /**
-     * End of /LIST
-     *
-     * Replies RPL_LISTSTART, RPL_LIST, RPL_LISTEND mark the start, actual replies
-     * with data and end of the server's response to a LIST command. If there are no
-     * channels available to return, only the start and end reply must be sent.
-     */
-    const RPL_LISTEND = '323';
-
-    /**
-     * <channel> <mode> <mode params>
-     */
-    const RPL_CHANNELMODEIS = '324';
-
-    /**
-     * <channel> No topic is set
-     */
-    const RPL_NOTOPIC = '331';
-
-    /**
-     * <channel> <topic>
-     *
-     * When sending a TOPIC message to determine the channel topic, one of two
-     * replies is sent. If the topic is set, RPL_TOPIC is sent back else RPL_NOTOPIC.
-     */
-    const RPL_TOPIC = '332';
-
-    /**
-     * <channel> <nick>
-     *
-     * Returned by the server to indicate that the attempted INVITE message was
-     * successful and is being passed onto the end client.
-     */
-    const RPL_INVITING = '341';
-
-    /**
-     * <user> Summoning user to IRC
-     *
-     * Returned by a server answering a SUMMON message to indicate that it is
-     * summoning that user.
-     */
-    const RPL_SUMMONING = '342';
-
-    /**
-     * <version>.<debuglevel> <server> <comments>
-     *
-     * Reply by the server showing its version details. The <version> is the version
-     * of the software being used (including any patchlevel revisions) and the
-     * <debuglevel> is used to indicate if the server is running in "debug mode". The
-     * "comments" field may contain any comments about the version or further version
-     * details.
-     */
-    const RPL_VERSION = '351';
-
-    /**
-     * <channel> <user> <host> <server> <nick> <H|G>[*][@|+] <hopcount> <real name>
-     */
-    const RPL_WHOREPLY = '352';
-
-    /**
-     * <name> End of /WHO list
-     *
-     * The RPL_WHOREPLY and RPL_ENDOFWHO pair are used to answer a WHO message. The
-     * RPL_WHOREPLY is only sent if there is an appropriate match to the WHO query.
-     * If there is a list of parameters supplied with a WHO message, a RPL_ENDOFWHO
-     * must be sent after processing each list item with <name> being the item.
-     */
-    const RPL_ENDOFWHO = '315';
-
-    /**
-     * <channel> [[@|+]<nick> [[@|+]<nick> [...]]]
-     */
-    const RPL_NAMREPLY = '353';
-
-    /**
-     * <channel> End of /NAMES list
-     *
-     * To reply to a NAMES message, a reply pair consisting of RPL_NAMREPLY and
-     * RPL_ENDOFNAMES is sent by the server back to the client. If there is no
-     * channel found as in the query, then only RPL_ENDOFNAMES is returned. The
-     * exception to this is when a NAMES message is sent with no parameters and all
-     * visible channels and contents are sent back in a series of RPL_NAMEREPLY
-     * messages with a RPL_ENDOFNAMES to mark the end.
-     */
-    const RPL_ENDOFNAMES = '366';
-
-    /**
-     * <mask> <server> <hopcount> <server info>
-     */
-    const RPL_LINKS = '364';
-
-    /**
-     * <mask> End of /LINKS list
-     *
-     * In replying to the LINKS message, a server must send replies back using the
-     * RPL_LINKS numeric and mark the end of the list using an RPL_ENDOFLINKS reply.v
-     */
-    const RPL_ENDOFLINKS = '365';
-
-    /**
-     * <channel> <banid>
-     */
-    const RPL_BANLIST = '367';
-
-    /**
-     * <channel> End of channel ban list
-     *
-     * When listing the active 'bans' for a given channel, a server is required to
-     * send the list back using the RPL_BANLIST and RPL_ENDOFBANLIST messages. A
-     * separate RPL_BANLIST is sent for each active banid. After the banids have been
-     * listed (or if none present) a RPL_ENDOFBANLIST must be sent.
-     */
-    const RPL_ENDOFBANLIST = '368';
-
-    /**
-     * <string>
-     */
-    const RPL_INFO = '371';
-
-    /**
-     * End of /INFO list
-     *
-     * A server responding to an INFO message is required to send all its 'info' in a
-     * series of RPL_INFO messages with a RPL_ENDOFINFO reply to indicate the end of
-     * the replies.
-     */
-    const RPL_ENDOFINFO = '374';
-
-    /**
-     * - <server> Message of the day -
-     */
-    const RPL_MOTDSTART = '375';
-
-    /**
-     * - <text>
-     */
-    const RPL_MOTD = '372';
-
-    /**
-     * End of /MOTD command
-     *
-     * When responding to the MOTD message and the MOTD file is found, the file is
-     * displayed line by line, with each line no longer than 80 characters, using
-     * RPL_MOTD format replies. These should be surrounded by a RPL_MOTDSTART (before
-     * the RPL_MOTDs) and an RPL_ENDOFMOTD (after).
-     */
-    const RPL_ENDOFMOTD = '376';
-
-    /**
-     * You are now an IRC operator
-     *
-     * RPL_YOUREOPER is sent back to a client which has just successfully issued an
-     * OPER message and gained operator status.
-     */
-    const RPL_YOUREOPER = '381';
-
-    /**
-     * <config file> Rehashing
-     *
-     * If the REHASH option is used and an operator sends a REHASH message, an
-     * RPL_REHASHING is sent back to the operator.
-     */
-    const RPL_REHASHING = '382';
-
-    /**
-     * <server> <string showing server's local time>
-     *
-     * When replying to the TIME message, a server must send the reply using the
-     * RPL_TIME format above. The string showing the time need only contain the
-     * correct day and time there. There is no further requirement for the time
-     * string.
-     */
-    const RPL_TIME = '391';
-
-    /**
-     * UserID Terminal Host
-     */
-    const RPL_USERSSTART = '392';
-
-    /**
-     * %-8s %-9s %-8s
-     */
-    const RPL_USERS = '393';
-
-    /**
-     * End of users
-     */
-    const RPL_ENDOFUSERS = '394';
-
-    /**
-     * Nobody logged in
-     *
-     * If the USERS message is handled by a server, the replies RPL_USERSTART,
-     * RPL_USERS, RPL_ENDOFUSERS and RPL_NOUSERS are used. RPL_USERSSTART must be
-     * sent first, following by either a sequence of RPL_USERS or a single
-     * RPL_NOUSER. Following this is RPL_ENDOFUSERS.
-     */
-    const RPL_NOUSERS = '395';
-
-    /**
-     * Link <version & debug level> <destination> <next server>
-     */
-    const RPL_TRACELINK = '200';
-
-    /**
-     * Try. <class> <server>
-     */
-    const RPL_TRACECONNECTING = '201';
-
-    /**
-     * H.S. <class> <server>
-     */
-    const RPL_TRACEHANDSHAKE = '202';
-
-    /**
-     * ???? <class> [<client IP address in dot form>]
-     */
-    const RPL_TRACEUNKNOWN = '203';
-
-    /**
-     * Oper <class> <nick>
-     */
-    const RPL_TRACEOPERATOR = '204';
-
-    /**
-     * User <class> <nick>
-     */
-    const RPL_TRACEUSER = '205';
-
-    /**
-     * Serv <class> <int>S <int>C <server> <nick!user|*!*>@<host|server>
-     */
-    const RPL_TRACESERVER = '206';
-
-    /**
-     * <newtype> 0 <client name>
-     */
-    const RPL_TRACENEWTYPE = '208';
-
-    /**
-     * File <logfile> <debug level>
-     *
-     * The RPL_TRACE* are all returned by the server in response to the TRACE
-     * message. How many are returned is dependent on the the TRACE message and
-     * whether it was sent by an operator or not. There is no predefined order for
-     * which occurs first. Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and
-     * RPL_TRACEHANDSHAKE are all used for connections which have not been fully
-     * established and are either unknown, still attempting to connect or in the
-     * process of completing the 'server handshake'. RPL_TRACELINK is sent by any
-     * server which handles a TRACE message and has to pass it on to another server.
-     * The list of RPL_TRACELINKs sent in response to a TRACE command traversing the
-     * IRC network should reflect the actual connectivity of the servers themselves
-     * along that path. RPL_TRACENEWTYPE is to be used for any connection which does
-     * not fit in the other categories but is being displayed anyway.
-     */
-    const RPL_TRACELOG = '261';
-
-    /**
-     * <linkname> <sendq> <sent messages> <sent bytes> <received messages> <received
-     * bytes> <time open>
-     */
-    const RPL_STATSLINKINFO = '211';
-
-    /**
-     * <command> <count>
-     */
-    const RPL_STATSCOMMANDS = '212';
-
-    /**
-     * C <host> * <name> <port> <class>
-     */
-    const RPL_STATSCLINE = '213';
-
-    /**
-     * N <host> * <name> <port> <class>
-     */
-    const RPL_STATSNLINE = '214';
-
-    /**
-     * I <host> * <host> <port> <class>
-     */
-    const RPL_STATSILINE = '215';
-
-    /**
-     * K <host> * <username> <port> <class>
-     */
-    const RPL_STATSKLINE = '216';
-
-    /**
-     * Y <class> <ping frequency> <connect frequency> <max sendq>
-     */
-    const RPL_STATSYLINE = '218';
-
-    /**
-     * <stats letter> End of /STATS report
-     */
-    const RPL_ENDOFSTATS = '219';
-
-    /**
-     * L <hostmask> * <servername> <maxdepth>
-     */
-    const RPL_STATSLLINE = '241';
-
-    /**
-     * Server Up %d days %d%02d%02d
-     */
-    const RPL_STATSUPTIME = '242';
-
-    /**
-     * O <hostmask> * <name>
-     */
-    const RPL_STATSOLINE = '243';
-
-    /**
-     * H <hostmask> * <servername>
-     */
-    const RPL_STATSHLINE = '244';
-
-    /**
-     * <user mode string>
-     *
-     * To answer a query about a client's own mode, RPL_UMODEIS is sent back.
-     */
-    const RPL_UMODEIS = '221';
-
-    /**
-     * There are <integer> users and <integer> invisible on <integer> servers
-     */
-    const RPL_LUSERCLIENT = '251';
-
-    /**
-     * <integer> operator(s) online
-     */
-    const RPL_LUSEROP = '252';
-
-    /**
-     * <integer> unknown connection(s)
-     */
-    const RPL_LUSERUNKNOWN = '253';
-
-    /**
-     * <integer> channels formed
-     */
-    const RPL_LUSERCHANNELS = '254';
-
-    /**
-     * I have <integer> clients and <integer> servers
-     *
-     * In processing an LUSERS message, the server sends a set of replies from
-     * RPL_LUSERCLIENT, RPL_LUSEROP, RPL_USERUNKNOWN, RPL_LUSERCHANNELS and
-     * RPL_LUSERME. When replying, a server must send back RPL_LUSERCLIENT and
-     * RPL_LUSERME. The other replies are only sent back if a non-zero count is found
-     * for them.
-     */
-    const RPL_LUSERME = '255';
-
-    /**
-     * <server> Administrative info
-     */
-    const RPL_ADMINME = '256';
-
-    /**
-     * <admin info>
-     */
-    const RPL_ADMINLOC1 = '257';
-
-    /**
-     * <admin info>
-     */
-    const RPL_ADMINLOC2 = '258';
-
-    /**
-     * <admin info>
-     *
-     * When replying to an ADMIN message, a server is expected to use replies
-     * RLP_ADMINME through to RPL_ADMINEMAIL and provide a text message with each.
-     * For RPL_ADMINLOC1 a description of what city, state and country the server is
-     * in is expected, followed by details of the university and department
-     * (RPL_ADMINLOC2) and finally the administrative contact for the server (an
-     * email address here is required) in RPL_ADMINEMAIL.
-     */
-    const RPL_ADMINEMAIL = '259';
-
-    /**
-     * Reply code sent by the server, which can be compared to the ERR_* and
-     * RPL_* constants
-     *
-     * @var string
-     */
-    protected $code;
-
-    /**
-     * Reply code description sent by the server.
-     *
-     * @var string
-     */
-    protected $description;
-
-    /**
-     * Raw data sent by the server
-     *
-     * @var string
-     */
-    protected $rawData;
-
-    /**
-     * Event type
-     *
-     * @var string
-     */
-    protected $type = 'response';
-
-    /**
-     * Sets the reply code sent by the server.
-     *
-     * @param string $code Reply code
-     *
-     * @return Phergie_Event_Response Provides a fluent interface
-     */
-    public function setCode($code)
-    {
-        $this->code = $code;
-        return $this;
-    }
-
-    /**
-     * Returns the reply code sent by the server.
-     *
-     * @return string
-     */
-    public function getCode()
-    {
-        return $this->code;
-    }
-
-    /**
-     * Sets the reply code description sent by the server.
-     *
-     * @param string $description Reply code description
-     *
-     * @return Phergie_Event_Response Provides a fluent interface
-     */
-    public function setDescription($description)
-    {
-        $this->description = $description;
-        return $this;
-    }
-
-    /**
-     * Returns the reply code description sent by the server.
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        return $this->description;
-    }
-
-    /**
-     * Sets the raw buffer for the given event
-     *
-     * @param string $buffer Raw event buffer
-     *
-     * @return Phergie_Event_Response Provides a fluent interface
-     */
-    public function setRawData($buffer)
-    {
-        $this->rawData = $buffer;
-        return $this;
-    }
-
-    /**
-     * Returns the raw buffer that was sent from the server for that event
-     *
-     * @return string
-     */
-    public function getRawData()
-    {
-        return $this->rawData;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Exception.php
deleted file mode 100644 (file)
index f4d71e5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for all Phergie-related exceptions.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Exception extends Exception
-{
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Hostmask.php b/plugins/Irc/extlib/phergie/Phergie/Hostmask.php
deleted file mode 100644 (file)
index b13842f..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Data structure for a hostmask.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Hostmask
-{
-    /**
-     * Host
-     *
-     * @var string
-     */
-    protected $host;
-
-    /**
-     * Nick
-     *
-     * @var string
-     */
-    protected $nick;
-
-    /**
-     * Username
-     *
-     * @var string
-     */
-    protected $username;
-
-    /**
-     * Regular expression used to parse a hostmask
-     *
-     * @var string
-     */
-    protected static $regex = '/^([^!@]+)!(?:[ni]=)?([^@]+)@([^ ]+)/';
-
-    /**
-     * Constructor to initialize components of the hostmask.
-     *
-     * @param string $nick     Nick component
-     * @param string $username Username component
-     * @param string $host     Host component
-     *
-     * @return void
-     */
-    public function __construct($nick, $username, $host)
-    {
-        $this->nick = $nick;
-        $this->username = $username;
-        $this->host = $host;
-    }
-
-    /**
-     * Returns whether a given string appears to be a valid hostmask.
-     *
-     * @param string $string Alleged hostmask string
-     *
-     * @return bool TRUE if the string appears to be a valid hostmask, FALSE 
-     *         otherwise
-     */
-    public static function isValid($string)
-    {
-        return (preg_match(self::$regex, $string) > 0);
-    }
-
-    /**
-     * Parses a string containing the entire hostmask into a new instance of 
-     * this class.
-     *
-     * @param string $hostmask Entire hostmask including the nick, username, 
-     *        and host components
-     *
-     * @return Phergie_Hostmask New instance populated with data parsed from 
-     *         the provided hostmask string
-     * @throws Phergie_Hostmask_Exception
-     */
-    public static function fromString($hostmask)
-    {
-        if (preg_match(self::$regex, $hostmask, $match)) {
-            list(, $nick, $username, $host) = $match; 
-            return new self($nick, $username, $host);
-        }
-
-        throw new Phergie_Hostmask_Exception(
-            'Invalid hostmask specified: "' . $hostmask . '"',
-            Phergie_Hostmask_Exception::ERR_INVALID_HOSTMASK
-        );
-    }
-
-    /**
-     * Sets the hostname.
-     *
-     * @param string $host Hostname
-     *
-     * @return Phergie_Hostmask Provides a fluent interface
-     */
-    public function setHost($host)
-    {
-        $this->host = $host;
-
-        return $this;
-    }
-
-    /**
-     * Returns the hostname.
-     *
-     * @return string
-     */
-    public function getHost()
-    {
-        return $this->host;
-    }
-
-    /**
-     * Sets the username of the user.
-     *
-     * @param string $username Username
-     *
-     * @return Phergie_Hostmask Provides a fluent interface
-     */
-    public function setUsername($username)
-    {
-        $this->username = $username;
-
-        return $this;
-    }
-
-    /**
-     * Returns the username of the user.
-     *
-     * @return string
-     */
-    public function getUsername()
-    {
-        return $this->username;
-    }
-
-    /**
-     * Sets the nick of the user.
-     *
-     * @param string $nick User nick
-     *
-     * @return Phergie_Hostmask Provides a fluent interface
-     */
-    public function setNick($nick)
-    {
-        $this->nick = $nick;
-
-        return $this;
-    }
-
-    /**
-     * Returns the nick of the user.
-     *
-     * @return string
-     */
-    public function getNick()
-    {
-        return $this->nick;
-    }
-
-    /**
-     * Returns the hostmask for the originating server or user.
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        return $this->nick . '!' . $this->username . '@' . $this->host;
-    }
-
-    /**
-     * Returns whether a given hostmask matches a given pattern.
-     *
-     * @param string $pattern  Pattern using conventions of a ban mask where 
-     *        represents a wildcard
-     * @param string $hostmask Optional hostmask to match against, if not 
-     *        the current hostmask instance
-     *
-     * @return bool TRUE if the hostmask matches the pattern, FALSE otherwise
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_3 Examples
-     */
-    public function matches($pattern, $hostmask = null)
-    {
-        if (!$hostmask) {
-            $hostmask = (string) $this;
-        }
-
-        $pattern = str_replace('*', '.*', $pattern);
-
-        return (preg_match('#^' . $pattern . '$#', $hostmask) > 0);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Hostmask/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Hostmask/Exception.php
deleted file mode 100644 (file)
index 590f020..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to hostmask handling.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Hostmask_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that an invalid hostmask string was specified
-     */
-    const ERR_INVALID_HOSTMASK = 1;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php
deleted file mode 100644 (file)
index b7105ec..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for plugins to provide event handler stubs and commonly needed
- * functionality.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-abstract class Phergie_Plugin_Abstract
-{
-    /**
-     * Current configuration handler
-     *
-     * @var Phergie_Config
-     */
-    protected $config;
-
-    /**
-     * Plugin handler used to provide access to other plugins
-     *
-     * @var Phergie_Plugin_Handler
-     */
-    protected $plugins;
-
-    /**
-     * Current event handler instance for outgoing events
-     *
-     * @var Phergie_Event_Handler
-     */
-    protected $events;
-
-    /**
-     * Current connection instance
-     *
-     * @var Phergie_Connection
-     */
-    protected $connection;
-
-    /**
-     * Current incoming event being handled
-     *
-     * @var Phergie_Event_Request|Phergie_Event_Response
-     */
-    protected $event;
-
-    /**
-     * Plugin short name
-     *
-     * @var string
-     */
-    protected $name;
-
-    /**
-     * Returns the short name for the plugin based on its class name.
-     *
-     * @return string
-     */
-    public function getName()
-    {
-        if (empty($this->name)) {
-            $this->name = substr(strrchr(get_class($this), '_'), 1);
-        }
-        return $this->name;
-    }
-
-    /**
-     * Sets the short name for the plugin.
-     *
-     * @param string $name Plugin short name
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setName($name)
-    {
-        $this->name = (string) $name;
-        return $this;
-    }
-
-    /**
-     * Indicates that the plugin failed to load due to an unsatisfied
-     * runtime requirement, such as a missing dependency.
-     *
-     * @param string $message Error message to provide more information
-     *        about the reason for the failure
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     * @throws Phergie_Plugin_Exception Always
-     */
-    protected function fail($message)
-    {
-        throw new Phergie_Plugin_Exception(
-            $message,
-            Phergie_Plugin_Exception::ERR_REQUIREMENT_UNSATISFIED
-        );
-    }
-
-    /**
-     * Sets the current configuration handler.
-     *
-     * @param Phergie_Config $config Configuration handler
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setConfig(Phergie_Config $config)
-    {
-        $this->config = $config;
-        return $this;
-    }
-
-    /**
-     * Returns the current configuration handler or the value of a single
-     * setting from it.
-     *
-     * @param string $name    Optional name of a setting for which the value
-     *        should be returned instead of the entire configuration handler
-     * @param mixed  $default Optional default value to return if no value
-     *        is set for the setting indicated by $name
-     *
-     * @return Phergie_Config|mixed Configuration handler or value of the
-     *         setting specified by $name
-     * @throws Phergie_Plugin_Exception No configuration handler has been set
-     */
-    public function getConfig($name = null, $default = null)
-    {
-        if (empty($this->config)) {
-            throw new Phergie_Plugin_Exception(
-                'Configuration handler cannot be accessed before one is set',
-                Phergie_Plugin_Exception::ERR_NO_CONFIG_HANDLER
-            );
-        }
-        if (!is_null($name)) {
-            if (!isset($this->config[$name])) {
-                return $default;
-            }
-            return $this->config[$name];
-        }
-        return $this->config;
-    }
-
-    /**
-     * Sets the current plugin handler.
-     *
-     * @param Phergie_Plugin_Handler $handler Plugin handler
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setPluginHandler(Phergie_Plugin_Handler $handler)
-    {
-        $this->plugins = $handler;
-        return $this;
-    }
-
-    /**
-     * Returns the current plugin handler.
-     *
-     * @return Phergie_Plugin_Handler
-     * @throws Phergie_Plugin_Exception No plugin handler has been set
-     */
-    public function getPluginHandler()
-    {
-        if (empty($this->plugins)) {
-            throw new Phergie_Plugin_Exception(
-                'Plugin handler cannot be accessed before one is set',
-                Phergie_Plugin_Exception::ERR_NO_PLUGIN_HANDLER
-            );
-        }
-        return $this->plugins;
-    }
-
-    /**
-     * Sets the current event handler.
-     *
-     * @param Phergie_Event_Handler $handler Event handler
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setEventHandler(Phergie_Event_Handler $handler)
-    {
-        $this->events = $handler;
-        return $this;
-    }
-
-    /**
-     * Returns the current event handler.
-     *
-     * @return Phergie_Event_Handler
-     * @throws Phergie_Plugin_Exception No event handler has been set
-     */
-    public function getEventHandler()
-    {
-        if (empty($this->events)) {
-            throw new Phergie_Plugin_Exception(
-                'Event handler cannot be accessed before one is set',
-                Phergie_Plugin_Exception::ERR_NO_EVENT_HANDLER
-            );
-        }
-        return $this->events;
-    }
-
-    /**
-     * Sets the current connection.
-     *
-     * @param Phergie_Connection $connection Connection
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setConnection(Phergie_Connection $connection)
-    {
-        $this->connection = $connection;
-        return $this;
-    }
-
-    /**
-     * Returns the current event connection.
-     *
-     * @return Phergie_Connection
-     * @throws Phergie_Plugin_Exception No connection has been set
-     */
-    public function getConnection()
-    {
-        if (empty($this->connection)) {
-            throw new Phergie_Plugin_Exception(
-                'Connection cannot be accessed before one is set',
-                Phergie_Plugin_Exception::ERR_NO_CONNECTION
-            );
-        }
-        return $this->connection;
-    }
-
-    /**
-     * Sets the current incoming event to be handled.
-     *
-     * @param Phergie_Event_Request|Phergie_Event_Response $event Event
-     *
-     * @return Phergie_Plugin_Abstract Provides a fluent interface
-     */
-    public function setEvent($event)
-    {
-        $this->event = $event;
-        return $this;
-    }
-
-    /**
-     * Returns the current incoming event to be handled.
-     *
-     * @return Phergie_Event_Request|Phergie_Event_Response
-     */
-    public function getEvent()
-    {
-        if (empty($this->event)) {
-            throw new Phergie_Plugin_Exception(
-                'Event cannot be accessed before one is set',
-                Phergie_Plugin_Exception::ERR_NO_EVENT
-            );
-        }
-        return $this->event;
-    }
-
-    /**
-     * Provides do* methods with signatures identical to those of
-     * Phergie_Driver_Abstract but that queue up events to be dispatched
-     * later.
-     *
-     * @param string $name Name of the method called
-     * @param array  $args Arguments passed in the call
-     *
-     * @return mixed
-     */
-    public function __call($name, array $args)
-    {
-        $subcmd = substr($name, 0, 2);
-        if ($subcmd == 'do') {
-            $type = strtolower(substr($name, 2));
-            $this->getEventHandler()->addEvent($this, $type, $args);
-        } else if ($subcmd != 'on') {
-            throw new Phergie_Plugin_Exception(
-                'Called invalid method ' . $name . ' in ' . get_class($this),
-                Phergie_Plugin_Exception::ERR_INVALID_CALL
-            );
-        }
-    }
-
-    /**
-     * Handler for when the plugin is initially loaded - useful for checking
-     * runtime dependencies or performing any setup necessary for the plugin
-     * to function properly such as initializing a database.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-    }
-
-    /**
-     * Handler for when the bot initially connects to a server.
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-    }
-
-    /**
-     * Handler for each tick, a single iteration of the continuous loop
-     * executed by the bot to receive, handle, and send events - useful for
-     * repeated execution of tasks on a time interval.
-     *
-     * @return void
-     */
-    public function onTick()
-    {
-    }
-
-    /**
-     * Handler for when any event is received but has not yet been dispatched
-     * to the plugin handler method specific to its event type.
-     *
-     * @return bool|null|void FALSE to short-circuit further event
-     *         processing, TRUE or NULL otherwise
-     */
-    public function preEvent()
-    {
-    }
-
-    /**
-     * Handler for after plugin processing of an event has concluded but
-     * before any events triggered in response by plugins are sent to the
-     * server - useful for modifying outgoing events before they are sent.
-     *
-     * @return void
-     */
-    public function preDispatch()
-    {
-    }
-
-    /**
-     * Handler for after any events triggered by plugins in response to a
-     * received event are sent to the server.
-     *
-     * @return void
-     */
-    public function postDispatch()
-    {
-    }
-
-    /**
-     * Handler for when the server prompts the client for a nick.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_2
-     */
-    public function onNick()
-    {
-    }
-
-    /**
-     * Handler for when a user obtains operator privileges.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_5
-     */
-    public function onOper()
-    {
-    }
-
-    /**
-     * Handler for when the client session is about to be terminated.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_6
-     */
-    public function onQuit()
-    {
-    }
-
-    /**
-     * Handler for when a user joins a channel.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_1
-     */
-    public function onJoin()
-    {
-    }
-
-    /**
-     * Handler for when a user leaves a channel.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_2
-     */
-    public function onPart()
-    {
-    }
-
-    /**
-     * Handler for when a user or channel mode is changed.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_3
-     */
-    public function onMode()
-    {
-    }
-
-    /**
-     * Handler for when a channel topic is viewed or changed.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_4
-     */
-    public function onTopic()
-    {
-    }
-
-    /**
-     * Handler for when a message is received from a channel or user.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_4_1
-     */
-    public function onPrivmsg()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a CTCP ACTION request.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.4
-     */
-    public function onAction()
-    {
-    }
-
-    /**
-     * Handler for when a notice is received.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_4_2
-     */
-    public function onNotice()
-    {
-    }
-
-    /**
-     * Handler for when a user is kicked from a channel.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_8
-     */
-    public function onKick()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a ping event from a server, at
-     * which point it is expected to respond with a pong request within
-     * a short period else the server may terminate its connection.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_2
-     */
-    public function onPing()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a CTCP TIME request.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.6
-     */
-    public function onTime()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a CTCP VERSION request.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.1
-     */
-    public function onVersion()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a CTCP PING request.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.2
-     */
-    public function onCtcpPing()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a CTCP request of an unknown type.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html
-     */
-    public function onCtcp()
-    {
-    }
-
-    /**
-     * Handler for when a reply is received for a CTCP PING request sent by
-     * the bot.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.2
-     */
-    public function onPingReply()
-    {
-    }
-
-    /**
-     * Handler for when a reply is received for a CTCP TIME request sent by
-     * the bot.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.6
-     */
-    public function onTimeReply()
-    {
-    }
-
-    /**
-     * Handler for when a reply is received for a CTCP VERSION request sent
-     * by the bot.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html#4.1
-     */
-    public function onVersionReply()
-    {
-    }
-
-    /**
-     * Handler for when a reply received for a CTCP request of an unknown
-     * type.
-     *
-     * @return void
-     * @link http://www.invlogic.com/irc/ctcp.html
-     */
-    public function onCtcpReply()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives a kill request from a server.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_1
-     */
-    public function onKill()
-    {
-    }
-
-    /**
-     * Handler for when the bot receives an invitation to join a channel.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_7
-     */
-    public function onInvite()
-    {
-    }
-
-    /**
-     * Handler for when a server response is received to a command issued by
-     * the bot.
-     *
-     * @return void
-     * @link http://irchelp.org/irchelp/rfc/chapter6.html
-     */
-    public function onResponse()
-    {
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Acl.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Acl.php
deleted file mode 100644 (file)
index e209e32..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Acl
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Acl
- */
-
-/**
- * Provides an access control system to limit reponses to events based on
- * the users who originate them.
- *
- * Configuration settings:
- * acl.whitelist - mapping of user hostmask patterns (optionally by host) to
- *                 plugins and methods where those plugins and methods will
- *                 only be accessible to those users (i.e. and inaccessible
- *                 to other users)
- * acl.blacklist - mapping of user hostmasks (optionally by host) to plugins
- *                 and methods where where those plugins and methods will be
- *                 inaccessible to those users but accessible to other users
- * acl.ops       - TRUE to automatically give access to whitelisted plugins
- *                 and methods to users with ops for events they initiate in
- *                 channels where they have ops
- *
- * The whitelist and blacklist settings are formatted like so:
- * <code>
- * 'acl.whitelist' => array(
- *     'hostname1' => array(
- *         'pattern1' => array(
- *             'plugins' => array(
- *                 'ShortPluginName'
- *             ),
- *             'methods' => array(
- *                 'methodName'
- *             )
- *         ),
- *     )
- * ),
- * </code>
- *
- * The hostname array dimension is optional; if not used, rules will be
- * applied across all connections. The pattern is a user hostmask pattern
- * where asterisks (*) are used for wildcards. Plugins and methods do not
- * need to be set to empty arrays if they are not used; simply exclude them.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Acl
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Acl
- * @uses     Phergie_Plugin_UserInfo pear.phergie.org
- */
-class Phergie_Plugin_Acl extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for permission settings and removes the plugin if none are set.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->plugins->getPlugin('UserInfo');
-
-        if (!$this->getConfig('acl.blacklist')
-            && !$this->getConfig('acl.whitelist')
-        ) {
-            $this->plugins->removePlugin($this);
-        }
-    }
-
-    /**
-     * Applies a set of rules to a plugin handler iterator.
-     *
-     * @param Phergie_Plugin_Iterator $iterator Iterator to receive rules
-     * @param array                   $rules    Associate array containing
-     *        either a 'plugins' key pointing to an array containing plugin
-     *        short names to filter, a 'methods' key pointing to an array
-     *        containing method names to filter, or both
-     *
-     * @return void
-     */
-    protected function applyRules(Phergie_Plugin_Iterator $iterator, array $rules)
-    {
-        if (!empty($rules['plugins'])) {
-            $iterator->addPluginFilter($rules['plugins']);
-        }
-        if (!empty($rules['methods'])) {
-            $iterator->addMethodFilter($rules['methods']);
-        }
-    }
-
-    /**
-     * Checks permission settings and short-circuits event processing for
-     * blacklisted users.
-     *
-     * @return void
-     */
-    public function preEvent()
-    {
-        // Ignore server responses
-        if ($this->event instanceof Phergie_Event_Response) {
-            return;
-        }
-
-        // Ignore server-initiated events
-        if (!$this->event->isFromUser()) {
-            return;
-        }
-
-        // Get the iterator used to filter plugins when processing events
-        $iterator = $this->plugins->getIterator();
-
-        // Get configuration setting values
-        $whitelist = $this->getConfig('acl.whitelist', array());
-        $blacklist = $this->getConfig('acl.blacklist', array());
-        $ops = $this->getConfig('acl.ops', false);
-
-        // Support host-specific lists
-        $host = $this->connection->getHost();
-        foreach (array('whitelist', 'blacklist') as $var) {
-            foreach ($$var as $pattern => $rules) {
-                $regex = '/^' . str_replace('*', '.*', $pattern) . '$/i';
-                if (preg_match($regex, $host)) {
-                    ${$var} = ${$var}[$pattern];
-                    break;
-                }
-            }
-        }
-
-        // Get information on the user initiating the current event
-        $hostmask = $this->event->getHostmask();
-        $isOp = $ops
-              && $this->event->isInChannel()
-              && $this->plugins->userInfo->isOp(
-                $this->event->getNick(),
-                $this->event->getSource()
-              );
-
-        // Filter whitelisted commands if the user is not on the whitelist
-        if (!$isOp) {
-            $whitelisted = false;
-            foreach ($whitelist as $pattern => $rules) {
-                if ($hostmask->matches($pattern)) {
-                    $whitelisted = true;
-                }
-            }
-            if (!$whitelisted) {
-                foreach ($whitelist as $pattern => $rules) {
-                    $this->applyRules($iterator, $rules);
-                }
-            }
-        }
-
-        // Filter blacklisted commands if the user is on the blacklist
-        $blacklisted = false;
-        foreach ($blacklist as $pattern => $rules) {
-            if ($hostmask->matches($pattern)) {
-                $this->applyRules($iterator, $rules);
-                break;
-            }
-        }
-    }
-
-    /**
-     * Clears filters on the plugin handler iterator.
-     *
-     * @return void
-     */
-    public function postDispatch()
-    {
-        $this->plugins->getIterator()->clearFilters();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/AltNick.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/AltNick.php
deleted file mode 100644 (file)
index 16d5f9b..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_AltNick
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_AltNick
- */
-
-/**
- * Handles switching to alternate nicks in cases where the primary nick is 
- * not available for use.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_AltNick
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_AltNick
- * @uses     extension spl 
- */
-class Phergie_Plugin_AltNick extends Phergie_Plugin_Abstract
-{
-    /**
-     * Iterator for the alternate nick list
-     *
-     * @var ArrayIterator 
-     */
-    protected $iterator;
-
-    /**
-     * Initializes instance variables.
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-        if ($this->config['altnick.nicks']) {
-            if (is_string($this->config['altnick.nicks'])) {
-                $this->config['altnick.nicks'] 
-                    = array($this->config['altnick.nicks']);
-            }
-            $this->iterator = new ArrayIterator($this->config['altnick.nicks']);
-        }
-    }
-
-    /**
-     * Switches to alternate nicks as needed when nick collisions occur.
-     *
-     * @return void
-     */
-    public function onResponse()
-    {
-        // If no alternate nick list was found, return
-        if (empty($this->iterator)) {
-            return;
-        }
-
-        // If the response event indicates that the nick set is in use...
-        $code = $this->getEvent()->getCode();
-        if ($code == Phergie_Event_Response::ERR_NICKNAMEINUSE) {
-
-            // Attempt to move to the next nick in the alternate nick list
-            $this->iterator->next();
-
-            // If another nick is available...
-            if ($this->iterator->valid()) {
-                
-                // Switch to the new nick
-                $altNick = $this->iterator->current();
-                $this->doNick($altNick);
-
-                // Update the connection to reflect the nick change
-                $this->getConnection()->setNick($altNick);
-
-            } else {
-                // If no other nicks are available...
-
-                // Terminate the connection
-                $this->doQuit('All specified alternate nicks are in use');
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/AudioScrobbler.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/AudioScrobbler.php
deleted file mode 100644 (file)
index ed4030a..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_AudioScrobbler
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_AudioScrobbler
- */
-
-/**
- * Provides commands to look up information on tracks played by specific 
- * users on the Last.fm and Libre.fm services.
- *
- * TODO: Make the "nick-binding" use an SQLite database instead of having them
- *       hard-coded in to the config file.
- * 
- * Configuration settings:
- * "audioscrobbler.lastfm_api_key":  API given by last.fm (string).
- * "audioscrobbler.librefm_api_key": API key given by libre.fm (string).
- * 
- * @category Phergie
- * @package  Phergie_Plugin_AudioScrobbler
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_AudioScrobbler
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- * @uses     extension simplexml
- */
-class Phergie_Plugin_AudioScrobbler extends Phergie_Plugin_Abstract
-{
-    /**
-     * Last.FM API entry point
-     *
-     * @var string
-     */
-    protected $lastfmUrl = 'http://ws.audioscrobbler.com/2.0/';
-    
-    /**
-     * Libre.FM API entry point
-     *
-     * @var string
-     */
-    protected $librefmUrl = 'http://alpha.dev.libre.fm/2.0/';
-    
-    /**
-     * Scrobbler query string for user.getRecentTracks
-     *
-     * @var string
-     */
-    protected $query = '?method=user.getrecenttracks&user=%s&api_key=%s';
-
-    /**
-     * HTTP plugin
-     *
-     * @var Phergie_Plugin_Http
-     */
-    protected $http;
-    
-    /**
-     * Check for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('simplexml')) {
-            $this->fail('SimpleXML php extension is required');
-        }
-        
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $this->http = $plugins->getPlugin('Http');
-    }
-    
-    /**
-     * Command function to get a user's status on last.fm.
-     * 
-     * @param string $user User identifier
-     *
-     * @return void
-     */
-    public function onCommandLastfm($user = null)
-    {
-        if ($key = $this->config['audioscrobbler.lastfm_api_key']) {
-            $scrobbled = $this->getScrobbled($user, $this->lastfmUrl, $key);
-            if ($scrobbled) {
-                $this->doPrivmsg($this->getEvent()->getSource(), $scrobbled);
-            }
-        }
-    }
-
-    /**
-     * Command function to get a user's status on libre.fm.
-     * 
-     * @param string $user User identifier
-     *
-     * @return void
-     */
-    public function onCommandLibrefm($user = null)
-    {
-        if ($key = $this->config['audioscrobbler.librefm_api_key']) {
-            $scrobbled = $this->getScrobbled($user, $this->librefmUrl, $key);
-            if ($scrobbled) {
-                $this->doPrivmsg($this->getEvent()->getSource(), $scrobbled);
-            }
-        }
-    }
-
-    /**
-     * Simple Scrobbler API function to get a formatted string of the most 
-     * recent track played by a user.
-     * 
-     * @param string $user Username to look up
-     * @param string $url  Base URL of the scrobbler service
-     * @param string $key  Scrobbler service API key
-     *
-     * @return string Formatted string of the most recent track played
-     */
-    public function getScrobbled($user, $url, $key)
-    {
-        $event = $this->getEvent();
-        $user = $user ? $user : $event->getNick();
-        $url = sprintf($url . $this->query, urlencode($user), urlencode($key));
-
-        $response = $this->http->get($url);
-        if ($response->isError()) {
-            $this->doNotice(
-                $event->getNick(),
-                'Can\'t find status for ' . $user . ': HTTP ' . 
-                $response->getCode() . ' ' . $response->getMessage()
-            );
-            return false; 
-        }
-        
-        $xml = $response->getContent();
-        if ($xml->error) {
-            $this->doNotice(
-                $event->getNick(),
-                'Can\'t find status for ' . $user . ': API ' . $xml->error
-            );
-            return false; 
-        }
-        
-        $recenttracks = $xml->recenttracks;
-        $track = $recenttracks->track[0];
-        
-        // If the user exists but has not scrobbled anything, the result will
-        // be empty.
-        if (empty($track->name) && empty($track->artist)) {
-            $this->doNotice(
-                $event->getNick(),
-                'Can\'t find track information for ' . $recenttracks['user']
-            );
-            return false;
-        }
-        
-        if (isset($track['nowplaying'])) {
-            $msg = sprintf(
-                '%s is listening to %s by %s',
-                $recenttracks['user'],
-                $track->name,
-                $track->artist
-            );
-        } else {
-            $msg = sprintf(
-                '%s, %s was listening to %s by %s',
-                date('j M Y, H:i', (int) $track->date['uts']),
-                $recenttracks['user'],
-                $track->name,
-                $track->artist
-            );
-        }
-        if ($track->streamable == 1) {
-            $msg .= ' - ' . $track->url;
-        }
-        return $msg;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/AutoJoin.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/AutoJoin.php
deleted file mode 100644 (file)
index a6d1adf..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_AutoJoin
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_AutoJoin
- */
-
-/**
- * Automates the process of having the bot join one or more channels upon
- * connection to the server.
- *
- * The configuration setting autojoin.channels is used to determine which 
- * channels to join. This setting can point to a comma-delimited string or 
- * enumerated array containing a single list of channels or an associative 
- * array keyed by hostname where each value is a comma-delimited string or  
- * enumerated array containing a list of channels to join on the server  
- * corresponding to that hostname.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_AutoJoin
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_AutoJoin
- */
-class Phergie_Plugin_AutoJoin extends Phergie_Plugin_Abstract
-{
-    /**
-     * Intercepts the end of the "message of the day" response and responds by
-     * joining the channels specified in the configuration file.
-     *
-     * @return void
-     */
-    public function onResponse()
-    {
-        switch ($this->getEvent()->getCode()) {
-        case Phergie_Event_Response::RPL_ENDOFMOTD:
-        case Phergie_Event_Response::ERR_NOMOTD:
-            if ($channels = $this->config['autojoin.channels']) {
-                if (is_array($channels)) {
-                    // Support autojoin.channels being in these formats:
-                    // 'hostname' => array('#channel1', '#channel2', ... )
-                    $host = $this->getConnection()->getHost();
-                    if (isset($channels[$host])) {
-                        $channels = $channels[$host];
-                    }
-                    if (is_array($channels)) {
-                        $channels = implode(',', $channels);
-                    }
-                }
-                $this->doJoin($channels);
-            }
-            $this->getPluginHandler()->removePlugin($this);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Beer.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Beer.php
deleted file mode 100644 (file)
index 7213cde..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Beer
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Beer
- */
-
-/**
- * Processes requests to serve users beer.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Beer
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Beer
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Beer extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user a beer.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what beer to serve
-     *
-     * @return void
-     */
-    public function onCommandBeer($request)
-    {
-        $format = $this->getConfig(
-            'beer.format',
-            'throws %target% %article% %item%.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Beer/beer.db',
-            'beer',
-            $format,
-            $request
-        );
-    }
-
-    /**
-     * Adds a "booze" alias for the "beer" command.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what beer to serve
-     *
-     * @return void
-     */
-    public function onCommandBooze($request)
-    {
-        $this->onCommandBeer($request);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Beer/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Beer/db.php
deleted file mode 100644 (file)
index c7921e5..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-if (!defined('__DIR__')) {
-    define('__DIR__', dirname(__FILE__));
-}
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/beer.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE beer (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX beer_name ON beer (name)');
-$insert = $db->prepare('INSERT INTO beer (name, link) VALUES (:name, :link)');
-
-// Get raw beerme.com data set
-echo 'Downloading beerme.com data set', PHP_EOL;
-$file = __DIR__ . '/beerlist.txt';
-if (!file_exists($file)) {
-    copy('http://beerme.com/beerlist.php', $file);
-}
-$contents = file_get_contents($file);
-
-// Extract data from data set
-echo 'Processing beerme.com data', PHP_EOL;
-$contents = tidy_repair_string($contents);
-libxml_use_internal_errors(true);
-$doc = new DOMDocument;
-$doc->loadHTML($contents);
-libxml_clear_errors();
-$xpath = new DOMXPath($doc);
-$beers = $xpath->query('//table[@class="beerlist"]/tr/td[1]');
-$db->beginTransaction();
-foreach ($beers as $beer) {
-    $name = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $beer->textContent);
-    $name = preg_replace('/\h*\v+\h*/', '', $name);
-    $link = 'http://beerme.com' . $beer->childNodes->item(1)->getAttribute('href');
-    $insert->execute(array($name, $link));
-}
-$db->commit();
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unlink($file);
-
-// Get and decompress openbeerdb.com data set
-$archive = __DIR__ . '/beers.zip';
-if (!file_exists($archive)) {
-    echo 'Downloading openbeerdb.com data set', PHP_EOL;
-    copy('http://openbeerdb.googlecode.com/files/beers.zip', $archive);
-}
-
-echo 'Decompressing openbeerdb.com data set', PHP_EOL;
-$zip = new ZipArchive;
-$zip->open($archive);
-$zip->extractTo(__DIR__, 'beers/beers.csv');
-$zip->close();
-$file = __DIR__ . '/beers/beers.csv';
-
-// Extract data from data set
-echo 'Processing openbeerdb.com data', PHP_EOL;
-$fp = fopen($file, 'r');
-$columns = fgetcsv($fp, 0, '|');
-$db->beginTransaction();
-while ($line = fgetcsv($fp, 0, '|')) {
-    $line = array_combine($columns, $line);
-    $name = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $line['name']);
-    $name = preg_replace('/\h*\v+\h*/', '', $name);
-    $link = null;
-    $insert->execute(array($name, $link));
-}
-$db->commit();
-fclose($fp);
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unlink($file);
-unlink($archive);
-rmdir(__DIR__ . '/beers');
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/BeerScore.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/BeerScore.php
deleted file mode 100644 (file)
index 16c671f..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_BeerScore
- * @author    Phergie Development Team <team@phergie.org> 
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_BeerScore
- */
-
-/**
- * Handles incoming requests for beer scores.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_BeerScore
- * @author   Phergie Development Team <team@phergie.org> 
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_BeerScore
- * @uses     Phergie_Plugin_Http pear.phergie.org
- */
-class Phergie_Plugin_BeerScore extends Phergie_Plugin_Abstract
-{
-    /**
-     * Score result type
-     *
-     * @const string
-     */
-    const TYPE_SCORE = 'SCORE';
-
-    /**
-     * Search result type
-     *
-     * @const string
-     */
-    const TYPE_SEARCH = 'SEARCH';
-
-    /**
-     * Refine result type
-     *
-     * @const type
-     */
-    const TYPE_REFINE = 'REFINE';
-
-    /**
-     * Base API URL
-     *
-     * @const string
-     */
-    const API_BASE_URL = 'http://caedmon.net/beerscore/';
-
-    /**
-     * HTTP plugin
-     *
-     * @var Phergie_Plugin_Http
-     */
-    protected $http;
-
-    /** 
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->http = $this->getPluginHandler()->getPlugin('Http');
-    }
-
-    /**
-     * Handles beerscore commands.
-     *
-     * @param string $searchstring String to use in seaching for beer scores
-     *
-     * @return void
-     */
-    public function onCommandBeerscore($searchstring)
-    {
-        $event = $this->getEvent();
-        $target = $event->getNick();
-        $source = $event->getSource();
-
-        $apiurl = self::API_BASE_URL . rawurlencode($searchstring);
-        $response = $this->http->get($apiurl);
-
-        if ($response->isError()) {
-            $this->doNotice($target, 'Score not found (or failed to contact API)');
-            return;
-        }
-
-        $result = $response->getContent();
-        switch ($result->type) {
-        case self::TYPE_SCORE:
-            // small enough number to get scores
-            foreach ($result->beer as $beer) {
-                if ($beer->score === -1) {
-                    $score = '(not rated)';
-                } else {
-                    $score = $beer->score;
-                }
-                $str 
-                    = "{$target}: rating for {$beer->name}" . 
-                    " = {$score} ({$beer->url})";
-                $this->doPrivmsg($source, $str);
-            }
-            break;
-
-        case self::TYPE_SEARCH:
-            // only beer names, no scores
-            $str = '';
-            $found = 0;
-            foreach ($result->beer as $beer) {
-                if (isset($beer->score)) {
-                    ++$found;
-                    if ($beer->score === -1) {
-                        $score = '(not rated)';
-                    } else {
-                        $score = $beer->score;
-                    }
-                    $str 
-                        = "{$target}: rating for {$beer->name}" . 
-                        " = {$score} ({$beer->url})";
-                    $this->doPrivmsg($source, $str);
-                } else {
-                    $str .= "({$beer->name} -> {$beer->url}) ";
-                }
-            }
-            $foundnum = $result->num - $found;
-            $more = $found ? 'more ' : '';
-            $str = "{$target}: {$foundnum} {$more}results... {$str}";
-            $this->doPrivmsg($source, $str);
-            break;
-
-        case self::TYPE_REFINE:
-            // Too many results; only output search URL
-            if ($result->num < 100) {
-                $num = $result->num;
-            } else {
-                $num = 'at least 100';
-            }
-            $resultsword = (($result->num > 1) ? 'results' : 'result');
-            $str = "{$target}: {$num} {$resultsword}; {$result->searchurl}";
-            $this->doPrivmsg($source, $str);
-            break;
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cache.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cache.php
deleted file mode 100644 (file)
index 2b54fab..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Cache
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Cache
- */
-
-/**
- * Implements a generic cache to be used by other plugins.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Cache
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Cache
- */
-class Phergie_Plugin_Cache extends Phergie_Plugin_Abstract
-{
-    /**
-     * Key-value data storage for the cache 
-     * 
-     * @var array 
-     */
-    protected $cache = array();
-
-    /**
-     * Stores a value in the cache. 
-     *
-     * @param string   $key       Key to associate with the value 
-     * @param mixed    $data      Data to be stored
-     * @param int|null $ttl       Time to live in seconds or NULL for forever
-     * @param bool     $overwrite TRUE to overwrite any existing value 
-     *        associated with the specified key
-     *
-     * @return bool
-     */
-    public function store($key, $data, $ttl = 3600, $overwrite = true)
-    {
-        if (!$overwrite && isset($this->cache[$key])) {
-            return false;
-        }
-
-        if ($ttl) {
-            $expires = time()+$ttl;
-        } else {
-            $expires = null;
-        }
-
-        $this->cache[$key] = array('data' => $data, 'expires' => $expires);
-        return true;
-
-    }
-
-    /**
-     * Fetches a previously stored value. 
-     *
-     * @param string $key Key associated with the value 
-     *
-     * @return mixed Stored value or FALSE if no value or an expired value 
-     *         is associated with the specified key 
-     */
-    public function fetch($key)
-    {
-        if (!isset($this->cache[$key])) {
-            return false;
-        }
-
-        $item = $this->cache[$key];
-        if (!is_null($item['expires']) && $item['expires'] < time()) {
-            $this->expire($key);
-            return false;
-        }
-
-        return $item['data'];
-    }
-
-    /**
-     * Expires a value that has exceeded its time to live.
-     *
-     * @param string $key Key associated with the value to expire 
-     *
-     * @return bool
-     */
-    protected function expire($key)
-    {
-        if (!isset($this->cache[$key])) {
-            return false;
-        }
-        unset($this->cache[$key]);
-        return true;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine.php
deleted file mode 100644 (file)
index 2b76bd3..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Caffeine
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Caffeine
- */
-
-/**
- * Processes requests to serve users caffeinated beverages.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Caffeine
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Caffeine
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Caffeine extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user a caffeinated beverage.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what caffeinated beverage to serve
-     *
-     * @return void
-     */
-    public function onCommandCaffeine($request)
-    {
-        $format = $this->getConfig(
-            'beer.format',
-            'throws %target% %article% %item%.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Caffeine/caffeine.db',
-            'caffeine',
-            $format,
-            $request
-        );
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Caffeine/db.php
deleted file mode 100644 (file)
index cdff52f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-if (!defined('__DIR__')) {
-    define('__DIR__', dirname(__FILE__));
-}
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/caffeine.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE caffeine (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX caffeine_name ON caffeine (name)');
-$insert = $db->prepare('INSERT INTO caffeine (name, link) VALUES (:name, :link)');
-
-// Get raw energyfiend.com data set
-echo 'Downloading energyfiend.com data set', PHP_EOL;
-$file = __DIR__ . '/the-caffeine-database.html';
-if (!file_exists($file)) {
-    copy('http://www.energyfiend.com/the-caffeine-database', $file);
-}
-$contents = file_get_contents($file);
-
-// Extract data from data set
-echo 'Processing energyfiend.com data', PHP_EOL;
-$contents = tidy_repair_string($contents);
-libxml_use_internal_errors(true);
-$doc = new DOMDocument;
-$doc->loadHTML($contents);
-libxml_clear_errors();
-$xpath = new DOMXPath($doc);
-$caffeine = $xpath->query('//table[@id="caffeinedb"]//tr/td[1]');
-$db->beginTransaction();
-foreach ($caffeine as $drink) {
-    $name = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $drink->textContent);
-    $name = preg_replace('/\s*\v+\s*/', ' ', $name);
-    if ($drink->firstChild->nodeName == 'a') {
-        $link = 'http://energyfiend.com'
-              . $drink->firstChild->getAttribute('href');
-    } else {
-        $link = null;
-    }
-    $insert->execute(array($name, $link));
-}
-$db->commit();
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unlink($file);
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
deleted file mode 100644 (file)
index 99c69d8..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Censor
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Censor
- */
-
-/**
- * Facilitates censoring of event content or discardment of events
- * containing potentially offensive phrases depending on the value of the
- * configuration setting censor.mode ('off', 'censor', 'discard'). Also
- * provides access to a web service for detecting censored words so that
- * other plugins may optionally integrate and adjust behavior accordingly to
- * prevent discardment of events.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Censor
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Censor
- * @uses     extension soap
- */
-class Phergie_Plugin_Censor extends Phergie_Plugin_Abstract
-{
-    /**
-     * SOAP client to interact with the CDYNE Profanity Filter API
-     *
-     * @var SoapClient
-     */
-    protected $soap;
-
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('soap')) {
-            $this->fail('The PHP soap extension is required');
-        }
-
-        if (!in_array($this->config['censor.mode'], array('censor', 'discard'))) {
-            $this->plugins->removePlugin($this);
-        }
-    }
-
-    /**
-     * Returns a "clean" version of a given string.
-     *
-     * @param string $string String to clean
-     *
-     * @return string Cleaned string
-     */
-    public function cleanString($string)
-    {
-        if (empty($this->soap)) {
-            $this->soap = new SoapClient('http://ws.cdyne.com/ProfanityWS/Profanity.asmx?wsdl');
-        }
-        $params = array('Text' => $string);
-        $attempts = 0;
-        while ($attempts < 3) {
-            try {
-                $response = $this->soap->SimpleProfanityFilter($params);
-                break;
-            } catch (SoapFault $e) {
-                $attempts++;
-                sleep(1);
-            }
-        }
-        if ($attempts == 3) {
-            return $string;
-        }
-        return $response->SimpleProfanityFilterResult->CleanText;
-    }
-
-    /**
-     * Processes events before they are dispatched and either censors their
-     * content or discards them if they contain potentially offensive
-     * content.
-     *
-     * @return void
-     */
-    public function preDispatch()
-    {
-        $events = $this->events->getEvents();
-
-        foreach ($events as $event) {
-            switch ($event->getType()) {
-                case Phergie_Event_Request::TYPE_PRIVMSG:
-                case Phergie_Event_Request::TYPE_ACTION:
-                case Phergie_Event_Request::TYPE_NOTICE:
-                    $text = $event->getArgument(1);
-                    $clean = $this->cleanString($text);
-                    if ($text != $clean) {
-                        if ($this->config['censor.mode'] == 'censor') {
-                            $event->setArgument(1, $clean);
-                        } else {
-                            $this->events->removeEvent($event);
-                        }
-                    }
-                    break;
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail.php
deleted file mode 100644 (file)
index eafeb65..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Cocktail
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Cocktail
- */
-
-/**
- * Processes requests to serve users cocktail.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Cocktail
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Cocktail
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Cocktail extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user a cocktail.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what cocktail to serve
-     *
-     * @return void
-     */
-    public function onCommandCocktail($request)
-    {
-        $format = $this->getConfig(
-            'cocktail.format',
-            'throws %target% %article% %item%.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Cocktail/cocktail.db',
-            'cocktail',
-            $format,
-            $request,
-            true
-        );
-    }
-}
-
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cocktail/db.php
deleted file mode 100644 (file)
index 2e61dd0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-if (!defined('__DIR__')) {
-    define('__DIR__', dirname(__FILE__));
-}
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/cocktail.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE cocktail (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX cocktail_name ON cocktail (name)');
-$insert = $db->prepare('INSERT INTO cocktail (name, link) VALUES (:name, :link)');
-
-// Get raw webtender.com data set
-echo 'Downloading webtender.com data set', PHP_EOL;
-$start = 1;
-do {
-    $file = __DIR__ . '/' . $start . '.html';
-    if (file_exists($file)) {
-        continue;
-    }
-    copy(
-        'http://www.webtender.com/db/browse?level=2&dir=drinks&char=%2A&start=' . $start,
-        $file
-    );
-    if (!isset($limit)) {
-        $contents = file_get_contents($file);
-        preg_match('/([0-9]+) found/', $contents, $match);
-        $limit = $match[1] + (150 - ($match[1] % 150));
-    }
-    echo 'Got records ', $start, ' - ', min($start + 150, $limit), ' of ', $limit, PHP_EOL;
-    $start += 150;
-} while ($start < $limit);
-
-// Extract data from data set
-$start = 1;
-while ($start < $limit) {
-    echo 'Processing ', $start, ' - ', min($start + 150, $limit), ' of ', $limit, PHP_EOL;
-
-    $file = __DIR__ . '/' . $start . '.html';
-    $contents = file_get_contents($file);
-    $contents = tidy_repair_string($contents);
-    libxml_use_internal_errors(true);
-    $doc = new DOMDocument;
-    $doc->loadHTML($contents);
-    libxml_clear_errors();
-    $xpath = new DOMXPath($doc);
-
-    $cocktails = $xpath->query('//li/a');
-    $db->beginTransaction();
-    foreach ($cocktails as $cocktail) {
-        $name = $cocktail->nodeValue;
-        $name = preg_replace('/ The$|^The |\s*\([^)]+\)\s*| #[0-9]+$/', '', $name);
-        $name = html_entity_decode($name);
-        $link = 'http://www.webtender.com' . $cocktail->getAttribute('href');
-        $insert->execute(array($name, $link));
-    }
-    $db->commit();
-
-    $start += 150;
-}
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-$start = 1;
-while ($start < $limit) {
-    $file = __DIR__ . '/' . $start . '.html';
-    unlink($file);
-    $start += 150;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php
deleted file mode 100644 (file)
index 2058977..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Command
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Command
- */
-
-/**
- * Handles parsing and execution of commands sent by users via messages sent
- * to channels in which the bot is present or directly to the bot.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Command
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Command
- * @uses     extension reflection
- * @uses     Phergie_Plugin_Message pear.phergie.org
- */
-class Phergie_Plugin_Command extends Phergie_Plugin_Abstract
-{
-    /**
-     * Prefix for command method names
-     *
-     * @var string
-     */
-    const METHOD_PREFIX = 'onCommand';
-
-    /**
-     * Cache for command lookups used to confirm that methods exist and
-     * parameter counts match
-     *
-     * @var array
-     */
-    protected $methods = array();
-
-    /**
-     * Load the Message plugin
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Message');
-    }
-
-    /**
-     * Populates the methods cache.
-     *
-     * @return void
-     */
-    public function populateMethodCache()
-    {
-        foreach ($this->getPluginHandler()->getPlugins() as $plugin) {
-            $reflector = new ReflectionClass($plugin);
-            foreach ($reflector->getMethods() as $method) {
-                $name = $method->getName();
-                if (strpos($name, self::METHOD_PREFIX) === 0
-                    && !isset($this->methods[$name])
-                ) {
-                    $this->methods[$name] = array(
-                        'total' => $method->getNumberOfParameters(),
-                        'required' => $method->getNumberOfRequiredParameters()
-                    );
-                }
-            }
-        }
-    }
-
-    /**
-     * Parses a given message and, if its format corresponds to that of a
-     * defined command, calls the handler method for that command with any
-     * provided parameters.
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        // Populate the methods cache if needed
-        if (empty($this->methods)) {
-            $this->populateMethodCache();
-        }
-
-        // Check for a prefixed message
-        $msg = $this->plugins->message->getMessage();
-        if ($msg === false) {
-            return;
-        }
-
-        // Separate the command and arguments
-        $parsed = preg_split('/\s+/', $msg, 2);
-        $command = strtolower(array_shift($parsed));
-        $args = count($parsed) ? array_shift($parsed) : '';
-
-        // Resolve aliases to their corresponding commands
-        $aliases = $this->getConfig('command.aliases', array());
-        $result = preg_grep('/^' . preg_quote($command, '/') . '$/i', array_keys($aliases));
-        if ($result) {
-            $command = $aliases[array_shift($result)];
-        }
-
-        // Check to ensure the command exists
-        $method = self::METHOD_PREFIX . ucfirst($command);
-        if (empty($this->methods[$method])) {
-            return;
-        }
-
-        // If no arguments are passed...
-        if (empty($args)) {
-
-            // If the method requires no arguments, call it
-            if (empty($this->methods[$method]['required'])) {
-                $this->getPluginHandler()->$method();
-            }
-
-        } else {
-            // If arguments are passed...
-
-            // Parse the arguments
-            $args = preg_split('/\s+/', $args, $this->methods[$method]['total']);
-
-            // If the minimum arguments are passed, call the method
-            if ($this->methods[$method]['required'] <= count($args)) {
-                call_user_func_array(
-                    array($this->getPluginHandler(), $method),
-                    $args
-                );
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie.php
deleted file mode 100644 (file)
index 4bc2cee..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Cookie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Cookie
- */
-
-/**
- * Processes requests to serve users cookies.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Cookie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Cookie
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Cookie extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user a cookie.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what cookie to serve
-     *
-     * @return void
-     */
-    public function onCommandCookie($request)
-    {
-        $format = $this->getConfig(
-            'cookie.format',
-            'throws %target% %article% %item%.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Cookie/cookie.db',
-            'cookies',
-            $format,
-            $request
-        );
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cookie/db.php
deleted file mode 100644 (file)
index 2776315..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-if (!defined('__DIR__')) {
-    define('__DIR__', dirname(__FILE__));
-}
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/cookie.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE cookies (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX cookie_name ON cookies (name)');
-$insert = $db->prepare('INSERT INTO cookies (name, link) VALUES (:name, :link)');
-
-// Get Cookies list from http://en.wikipedia.org/wiki/List_of_cookies
-echo 'Downloading data from Wikipedia', PHP_EOL;
-$file = __DIR__ . '/cookieslist.txt';
-if (!file_exists($file)) {
-    copy('http://en.wikipedia.org/wiki/List_of_cookies', $file);
-}
-$contents = file_get_contents($file);
-
-// Extract data from data set
-echo 'Processing Wikipedia\'s cookies list', PHP_EOL;
-$contents = tidy_repair_string($contents);
-libxml_use_internal_errors(true);
-$doc = new DOMDocument;
-$doc->loadHTML($contents);
-libxml_clear_errors();
-$xpath = new DOMXPath($doc);
-
-$cookies = $xpath->query('//table[@width="90%"]/tr/td[1]/a');
-
-foreach ($cookies as $cookie) {
-    $name = $cookie->textContent;
-    $name = str_replace(
-        array('(',')',"\n", 'cookies'),
-        array('','', ' ', 'cookie'),
-        $name
-    );
-    $name = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $name);
-    $name = trim($name);
-    $name = rtrim($name, 's');
-
-    $link =  'http://en.wikipedia.org' . $cookie->getAttribute('href');
-    $insert->execute(array($name, $link));
-    echo 'added [' . $name . '] -> '. $link . PHP_EOL;
-}
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unlink($file);
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Cron.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Cron.php
deleted file mode 100644 (file)
index d24910f..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Cron
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Cron
- */
-
-/**
- * Allows callbacks to be registered for asynchronous execution.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Cron
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Cron
- */
-class Phergie_Plugin_Cron extends Phergie_Plugin_Abstract
-{
-    /**
-     * Array of all registered callbacks with delays and arguments
-     *
-     * @var array
-     */
-    protected $callbacks;
-
-    /**
-     * Returns a human-readable representation of a callback for debugging
-     * purposes.
-     *
-     * @param callback $callback Callback to analyze
-     *
-     * @return string|boolean String representation of the callback or FALSE
-     *         if the specified value is not a valid callback
-     */
-    protected function getCallbackString($callback)
-    {
-        if (!is_callable($callback)) {
-            return false;
-        }
-
-        if (is_array($callback)) {
-            $class = is_string($callback[0]) ?
-                $callback[0] : get_class($callback[0]);
-            $method = $class . '::' . $callback[1];
-            return $method;
-        }
-
-        return $callback;
-    }
-
-    /**
-     * Registers a callback for execution sometime after a given delay
-     * relative to now.
-     *
-     * @param callback $callback  Callback to be registered
-     * @param int      $delay     Delay in seconds from now when the callback
-     *        will be executed
-     * @param array    $arguments Arguments to pass to the callback when
-     *        it's executed
-     * @param bool     $repeat    TRUE to automatically re-register the
-     *        callback for the same delay after it's executed, FALSE
-     *        otherwise
-     *
-     * @return void
-     */
-    public function registerCallback($callback, $delay,
-        array $arguments = array(), $repeat = false)
-    {
-        $callbackString = $this->getCallbackString($callback);
-        if ($callbackString === false) {
-            echo 'DEBUG(Cron): Invalid callback specified - ',
-                var_export($callback, true), PHP_EOL;
-            return;
-        }
-
-        $registered = time();
-        $scheduled = $registered + $delay;
-
-        $this->callbacks[] = array(
-            'callback'   => $callback,
-            'delay'      => $delay,
-            'arguments'  => $arguments,
-            'registered' => $registered,
-            'scheduled'  => $scheduled,
-            'repeat'     => $repeat,
-        );
-
-        echo 'DEBUG(Cron): Callback ', $callbackString,
-            ' scheduled for ', date('H:i:s', $scheduled), PHP_EOL;
-    }
-
-    /**
-     * Handles callback execution.
-     *
-     * @return void
-     */
-    public function onTick()
-    {
-        $time = time();
-        foreach ($this->callbacks as $key => &$callback) {
-            $callbackString = $this->getCallbackString($callback);
-
-            $scheduled = $callback['scheduled'];
-            if ($time < $scheduled) {
-                continue;
-            }
-
-            if (empty($callback['arguments'])) {
-                call_user_func($callback['callback']);
-            } else {
-                call_user_func_array(
-                    $callback['callback'],
-                    $callback['arguments']
-                );
-            }
-
-            echo 'DEBUG(Cron): Callback ', $callbackString,
-                ' scheduled for ', date('H:i:s', $scheduled), ',',
-                ' executed at ', date('H:i:s', $now), PHP_EOL;
-
-            if ($callback['repeat']) {
-                $callback['scheduled'] = $time + $callback['delay'];
-                echo 'DEBUG(Cron): Callback ', $callbackString,
-                    ' scheduled for ', date('H:i:s', $callback['scheduled']),
-                    PHP_EOL;
-            } else {
-                echo 'DEBUG(Cron): Callback ', $callbackString,
-                    ' removed from callback list', PHP_EOL;
-                unset($this->callbacks[$key]);
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Ctcp.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Ctcp.php
deleted file mode 100644 (file)
index e79fcf1..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Ctcp
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Ctcp
- */
-
-/**
- * Responds to various CTCP requests sent by the server and users.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Ctcp
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Ctcp
- * @link     http://www.irchelp.org/irchelp/rfc/ctcpspec.html
- */
-class Phergie_Plugin_Ctcp extends Phergie_Plugin_Abstract
-{
-    /**
-     * Responds to a CTCP TIME request from a user with the current local
-     * time.
-     *
-     * @return void
-     */
-    public function onTime()
-    {
-        $source = $this->getEvent()->getSource();
-        $this->doTime($source, strftime('%c %z'));
-    }
-
-    /**
-     * Responds to a CTCP VERSION request from a user with the codebase
-     * version.
-     *
-     * @return void
-     */
-    public function onVersion()
-    {
-        $source = $this->getEvent()->getSource();
-        $msg = 'Phergie ' . Phergie_Bot::VERSION . ' (http://phergie.org)';
-        $this->doVersion($source, $msg);
-    }
-
-    /**
-     * Responds to a CTCP PING request from a user.
-     *
-     * @return void
-     */
-    public function onCtcpPing()
-    {
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $handshake = $event->getArgument(1);
-        $this->doPing($source, $handshake);
-    }
-
-    /**
-     * Responds to a CTCP FINGER request from a user.
-     *
-     * @return void
-     */
-    public function onFinger()
-    {
-        $connection = $this->getConnection();
-        $name = $connection->getNick();
-        $realname = $connection->getRealname();
-        $username = $connection->getUsername();
-
-        $finger
-            = (empty($realname) ? $realname : $name) .
-            ' (' . (!empty($username) ? $username : $name) . ')';
-
-        $this->doFinger($source, $finger);
-    }
-}
-?>
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Daddy.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Daddy.php
deleted file mode 100644 (file)
index ed258e1..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Daddy
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Daddy
- */
-
-/**
- * Simply responds to messages addressed to the bot that contain the phrase
- * "Who's your daddy?" and related variations.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Daddy
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Daddy
- */
-class Phergie_Plugin_Daddy extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks messages for the question to which it should respond and sends a
-     * response when appropriate
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $config = $this->getConfig();
-        $prefix = $config['command.prefix'];
-        $event = $this->getEvent();
-        $text = $event->getArgument(1);
-        $target = $event->getNick();
-        $source = $event->getSource();
-        $pattern
-            = '/' . preg_quote($prefix) .
-            '\s*?who\'?s y(?:our|a) ([^?]+)\??/iAD';
-        if (preg_match($pattern, $text, $m)) {
-            $msg = 'You\'re my ' . $m[1] . ', ' . $target . '!';
-            $this->doPrivmsg($source, $msg);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Encoding.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Encoding.php
deleted file mode 100644 (file)
index 419322b..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Encoding
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Encoding
- */
-
-/**
- * Handles decoding markup entities and converting text between character
- * encodings.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Encoding
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Encoding
- */
-class Phergie_Plugin_Encoding extends Phergie_Plugin_Abstract
-{
-    /**
-     * Lookup table for entity conversions not supported by
-     * html_entity_decode()
-     *
-     * @var array
-     * @link http://us.php.net/manual/en/function.get-html-translation-table.php#73409
-     * @link http://us.php.net/manual/en/function.get-html-translation-table.php#73410
-     */
-    protected static $entities = array(
-        '&alpha;' => 913,
-        '&apos;' => 39,
-        '&beta;' => 914,
-        '&bull;' => 149,
-        '&chi;' => 935,
-        '&circ;' => 94,
-        '&delta;' => 916,
-        '&epsilon;' => 917,
-        '&eta;' => 919,
-        '&fnof;' => 402,
-        '&gamma;' => 915,
-        '&iota;' => 921,
-        '&kappa;' => 922,
-        '&lambda;' => 923,
-        '&ldquo;' => 147,
-        '&lsaquo;' => 139,
-        '&lsquo;' => 145,
-        '&mdash;' => 151,
-        '&minus;' => 45,
-        '&mu;' => 924,
-        '&ndash;' => 150,
-        '&nu;' => 925,
-        '&oelig;' => 140,
-        '&omega;' => 937,
-        '&omicron;' => 927,
-        '&phi;' => 934,
-        '&pi;' => 928,
-        '&piv;' => 982,
-        '&psi;' => 936,
-        '&rdquo;' => 148,
-        '&rho;' => 929,
-        '&rsaquo;' => 155,
-        '&rsquo;' => 146,
-        '&scaron;' => 138,
-        '&sigma;' => 931,
-        '&sigmaf;' => 962,
-        '&tau;' => 932,
-        '&theta;' => 920,
-        '&thetasym;' => 977,
-        '&tilde;' => 126,
-        '&trade;' => 153,
-        '&upsih;' => 978,
-        '&upsilon;' => 933,
-        '&xi;' => 926,
-        '&yuml;' => 159,
-        '&zeta;' => 918,
-    );
-
-    /**
-     * Decodes markup entities in a given string.
-     *
-     * @param string $string  String containing markup entities
-     * @param string $charset Optional character set name to use in decoding
-     *        entities, defaults to UTF-8
-     *
-     * @return string String with markup entities decoded
-     */
-    public function decodeEntities($string, $charset = 'UTF-8')
-    {
-        $string = str_ireplace(
-            array_keys(self::$entities),
-            array_map('chr', self::$entities),
-            $string
-        );
-        $string = html_entity_decode($string, ENT_QUOTES, $charset);
-        $string = preg_replace(
-            array('/&#0*([0-9]+);/me', '/&#x0*([a-f0-9]+);/mei'),
-            array('$this->codeToUtf(\\1)', '$this->codeToUtf(hexdec(\\1))'),
-            $string
-        );
-        return $string;
-    }
-
-    /**
-     * Converts a given unicode to its UTF-8 equivalent.
-     *
-     * @param int $code Code to convert
-     * @return string Character corresponding to code
-     */
-    public function codeToUtf8($code)
-    {
-        $code = (int) $code;
-        switch ($code) {
-            // 1 byte, 7 bits
-            case 0:
-                return chr(0);
-            case ($code & 0x7F):
-                return chr($code);
-
-            // 2 bytes, 11 bits
-            case ($code & 0x7FF):
-                return chr(0xC0 | (($code >> 6) & 0x1F)) .
-                       chr(0x80 | ($code & 0x3F));
-
-            // 3 bytes, 16 bits
-            case ($code & 0xFFFF):
-                return chr(0xE0 | (($code >> 12) & 0x0F)) .
-                       chr(0x80 | (($code >> 6) & 0x3F)) .
-                       chr(0x80 | ($code & 0x3F));
-
-            // 4 bytes, 21 bits
-            case ($code & 0x1FFFFF):
-                return chr(0xF0 | ($code >> 18)) .
-                       chr(0x80 | (($code >> 12) & 0x3F)) .
-                       chr(0x80 | (($code >> 6) & 0x3F)) .
-                       chr(0x80 | ($code & 0x3F));
-        }
-    }
-
-    /**
-     * Transliterates characters in a given string where possible.
-     *
-     * @param string $string      String containing characters to
-     *        transliterate
-     * @param string $charsetFrom Optional character set of the string,
-     *        defaults to UTF-8
-     * @param string $charsetTo   Optional character set to which the string
-     *        should be converted, defaults to ISO-8859-1
-     *
-     * @return string String with characters transliterated or the original
-     *         string if transliteration was not possible
-     */
-    public function transliterate($string, $charsetFrom = 'UTF-8', $charsetTo = 'ISO-8859-1')
-    {
-        // @link http://pecl.php.net/package/translit
-        if (function_exists('transliterate')) {
-            $string = transliterate($string, array('han_transliterate', 'diacritical_remove'), $charsetFrom, $charsetTo);
-        } elseif (function_exists('iconv')) {
-            $string = iconv($charsetFrom, $charsetTo . '//TRANSLIT', $string);
-        } else {
-            // @link http://stackoverflow.com/questions/1284535/php-transliteration/1285491#1285491
-            $string = preg_replace(
-                '~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i',
-                '$1',
-                htmlentities($string, ENT_COMPAT, $charsetFrom)
-            );
-        }
-        return $string;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Exception.php
deleted file mode 100644 (file)
index ca4d53f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to plugin handling.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Plugin_Exception extends Phergie_Exception
-{
-    /**
-     * Error indicating that a path containing plugins was specified, but
-     * did not reference a readable directory
-     */
-    const ERR_DIRECTORY_NOT_READABLE = 1;
-
-    /**
-     * Error indicating that an attempt was made to locate the class for a
-     * specified plugin, but the class could not be found
-     */
-    const ERR_CLASS_NOT_FOUND = 2;
-
-    /**
-     * Error indicating that an attempt was made to locate the class for a
-     * specified plugin, but that the found class did not extend the base
-     * plugin class
-     */
-    const ERR_INCORRECT_BASE_CLASS = 3;
-
-    /**
-     * Error indicating that an attempt was made to locate the class for a
-     * specified plugin, but that the found class cannot be instantiated
-     */
-    const ERR_CLASS_NOT_INSTANTIABLE = 4;
-
-    /**
-     * Error indicating that an attempt was made to access a plugin that had
-     * not been loaded and autoloading was not enabled to load it
-     */
-    const ERR_PLUGIN_NOT_LOADED = 5;
-
-    /**
-     * Error indicating that an attempt was made to access the configuration
-     * handler before one had been set
-     */
-    const ERR_NO_CONFIG_HANDLER = 6;
-
-    /**
-     * Error indicating that an attempt was made to access the plugin
-     * handler before one had been set
-     */
-    const ERR_NO_PLUGIN_HANDLER = 7;
-
-    /**
-     * Error indicating that an attempt was made to access the event
-     * handler before one had been set
-     */
-    const ERR_NO_EVENT_HANDLER = 8;
-
-    /**
-     * Error indicating that an attempt was made to access the connection
-     * before one had been set
-     */
-    const ERR_NO_CONNECTION = 9;
-
-    /**
-     * Error indicating that an attempt was made to access the current
-     * incoming event before one had been set
-     */
-    const ERR_NO_EVENT = 10;
-
-    /**
-     * Error indicating that a dependency of the plugin was unavailable at
-     * the time that an attempt was made to load it
-     */
-    const ERR_REQUIREMENT_UNSATISFIED = 11;
-
-    /**
-     * Error indicating that a call was made to a nonexistent plugin method
-     * and that its __call() implementation did not process that call as an
-     * attempt to trigger an event - this is intended to aid in debugging of
-     * such situations
-     */
-    const ERR_INVALID_CALL = 12;
-
-    /**
-     * Error indicating that a fatal runtime issue was encountered within a
-     * plugin
-     */
-    const ERR_FATAL_ERROR = 13;
-
-    /**
-     * Error indicating that a class specified to be used for iterating
-     * plugins cannot be found by the autoloader or does not extend
-     * FilterIterator
-     */
-    const ERR_INVALID_ITERATOR_CLASS = 14;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Google.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Google.php
deleted file mode 100644 (file)
index d2a9d4d..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Google
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Google
- */
-
-/**
- * Provides commands used to access several services offered by Google
- * including search, translation, weather, maps, and currency and general
- * value unit conversion.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Google
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Google
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- * @uses     Phergie_Plugin_Temperature pear.phergie.org
- */
-class Phergie_Plugin_Google extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Http');
-        $plugins->getPlugin('Weather');
-    }
-
-    /**
-     * Returns the first result of a Google search.
-     *
-     * @param string $query Search term
-     *
-     * @return void
-     * @todo Implement use of URL shortening here
-     */
-    public function onCommandG($query)
-    {
-        $url = 'http://ajax.googleapis.com/ajax/services/search/web';
-        $params = array(
-            'v' => '1.0',
-            'q' => $query
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $json = $response->getContent()->responseData;
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-        if ($json->cursor->estimatedResultCount > 0) {
-            $msg
-                = $nick
-                . ': [ '
-                . $json->results[0]->titleNoFormatting
-                . ' ] - '
-                . $json->results[0]->url
-                . ' - More results: '
-                . $json->cursor->moreResultsUrl;
-            $this->doPrivmsg($source, $msg);
-        } else {
-            $msg = $nick . ': No results for this query.';
-            $this->doPrivmsg($source, $msg);
-        }
-    }
-
-    /**
-     * Performs a Google Count search for the given term.
-     *
-     * @param string $query Search term
-     *
-     * @return void
-     */
-    public function onCommandGc($query)
-    {
-        $url = 'http://ajax.googleapis.com/ajax/services/search/web';
-        $params = array(
-            'v' => '1.0',
-            'q' => $query
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $json = $response->getContent()->responseData->cursor;
-        $count = $json->estimatedResultCount;
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-        if ($count) {
-            $msg
-                = $nick . ': ' .
-                number_format($count, 0) .
-                ' estimated results for ' . $query;
-            $this->doPrivmsg($source, $msg);
-        } else {
-            $this->doPrivmsg($source, $nick . ': No results for this query.');
-        }
-    }
-
-    /**
-     * Performs a Google Translate search for the given term.
-     *
-     * @param string $from  Language of the search term
-     * @param string $to    Language to which the search term should be
-     *        translated
-     * @param string $query Term to translate
-     *
-     * @return void
-     */
-    public function onCommandGt($from, $to, $query)
-    {
-        $url = 'http://ajax.googleapis.com/ajax/services/language/translate';
-        $params = array(
-            'v' => '1.0',
-            'q' => $query,
-            'langpair' => $from . '|' . $to
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $json = $response->getContent();
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-        if (empty($json->responseData->translatedText)) {
-            $this->doPrivmsg($source, $nick . ': ' . $json->responseDetails);
-        } else {
-            $this->doPrivmsg(
-                $source,
-                $nick . ': ' . $json->responseData->translatedText
-            );
-        }
-    }
-
-    /**
-     * Performs a Google Weather search for the given term.
-     *
-     * @param string $location Location to search for
-     * @param int    $offset   Optional day offset from the current date
-     *        between 0 and 3 to get the forecast
-     *
-     * @return void
-     */
-    public function onCommandGw($location, $offset = null)
-    {
-        $url = 'http://www.google.com/ig/api';
-        $params = array(
-            'weather' => $location,
-            'hl' => $this->getConfig('google.lang', 'en'),
-            'oe' => 'UTF-8'
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $xml = $response->getContent()->weather;
-
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $msg = '';
-        if ($event->isInChannel()) {
-            $msg .= $event->getNick() . ': ';
-        }
-
-        if (isset($xml->problem_cause)) {
-            $msg .= $xml->problem_cause->attributes()->data[0];
-            $this->doPrivmsg($source, $msg);
-            return;
-        }
-
-        $temperature = $this->plugins->getPlugin('Temperature');
-
-        $forecast = $xml->forecast_information;
-        $city = $forecast->city->attributes()->data[0];
-        $zip = $forecast->postal_code->attributes()->data[0];
-
-        if ($offset !== null) {
-            $offset = (int) $offset;
-            if ($offset < 0) {
-                $this->doNotice($source, 'Past weather data is not available');
-                return;
-            } elseif ($offset > 3) {
-                $this->doNotice($source, 'Future weather data is limited to 3 days from today');
-                return;
-            }
-
-            $linha = $xml->forecast_conditions[$offset];
-            $low = $linha->low->attributes()->data[0];
-            $high = $linha->high->attributes()->data[0];
-            $units = $forecast->unit_system->attributes()->data[0];
-            $condition = $linha->condition->attributes()->data[0];
-            $day = $linha->day_of_week->attributes()->data[0];
-
-            $date = ($offset == 0) ? time() : strtotime('next ' . $day);
-            $day = ucfirst($day) . ' ' . date('n/j/y', $date);
-
-            if ($units == 'US') {
-                $lowF = $low;
-                $lowC = $temperature->convertFahrenheitToCelsius($low);
-                $highF = $high;
-                $highC = $temperature->convertFahrenheitToCelsius($high);
-            } else {
-                $lowC = $low;
-                $lowF = $temperature->convertCelsiusToFahrenheit($lowC);
-                $highC = $high;
-                $highF = $temperature->convertCelsiusToFahrenheit($high);
-            }
-
-            $msg .= 'Forecast for ' . $city . ' (' . $zip . ')'
-                . ' on ' . $day . ' ::'
-                . ' Low: ' . $lowF . 'F/' . $lowC . 'C,'
-                . ' High: ' . $highF . 'F/' . $highC . 'C,'
-                . ' Conditions: ' . $condition;
-        } else {
-            $conditions = $xml->current_conditions;
-            $condition = $conditions->condition->attributes()->data[0];
-            $tempF = $conditions->temp_f->attributes()->data[0];
-            $tempC = $conditions->temp_c->attributes()->data[0];
-            $humidity = $conditions->humidity->attributes()->data[0];
-            $wind = $conditions->wind_condition->attributes()->data[0];
-            $time = $forecast->current_date_time->attributes()->data[0];
-            $time = date('n/j/y g:i A', strtotime($time)) . ' +0000';
-
-            $hiF = $temperature->getHeatIndex($tempF, $humidity);
-            $hiC = $temperature->convertFahrenheitToCelsius($hiF);
-
-            $msg .= 'Weather for ' . $city . ' (' . $zip . ') -'
-                . ' Temperature: ' . $tempF . 'F/' . $tempC . 'C,'
-                . ' ' . $humidity . ','
-                . ' Heat Index: ' . $hiF . 'F/' . $hiC . 'C,'
-                . ' Conditions: ' . $condition . ','
-                . ' Updated: ' . $time;
-        }
-
-        $this->doPrivmsg($source, $msg);
-    }
-
-    /**
-     * Performs a Google Maps search for the given term.
-     *
-     * @param string $location Location to search for
-     *
-     * @return void
-     */
-    public function onCommandGmap($location)
-    {
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-
-        $location = utf8_encode($location);
-        $url = 'http://maps.google.com/maps/geo';
-        $params = array(
-            'q' => $location,
-            'output' => 'json',
-            'gl' => $this->getConfig('google.lang', 'en'),
-            'sensor' => 'false',
-            'oe' => 'utf8',
-            'mrt' => 'all',
-            'key' => $this->getConfig('google.key')
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $json =  $response->getContent();
-        if (!empty($json)) {
-            $qtd = count($json->Placemark);
-            if ($qtd > 1) {
-                if ($qtd <= 3) {
-                    foreach ($json->Placemark as $places) {
-                        $xy = $places->Point->coordinates;
-                        $address = utf8_decode($places->address);
-                        $url = 'http://maps.google.com/maps?sll=' . $xy[1] . ','
-                            . $xy[0] . '&z=15';
-                        $msg = $nick . ' -> ' . $address . ' - ' . $url;
-                        $this->doPrivmsg($source, $msg);
-                    }
-                } else {
-                    $msg
-                        = $nick .
-                        ', there are a lot of places with that query.' .
-                        ' Try to be more specific!';
-                    $this->doPrivmsg($source, $msg);
-                }
-            } elseif ($qtd == 1) {
-                $xy = $json->Placemark[0]->Point->coordinates;
-                $address = utf8_decode($json->Placemark[0]->address);
-                $url = 'http://maps.google.com/maps?sll=' . $xy[1] . ',' . $xy[0]
-                    . '&z=15';
-                $msg = $nick . ' -> ' . $address . ' - ' . $url;
-                $this->doPrivmsg($source, $msg);
-            } else {
-                $this->doPrivmsg($source, $nick . ', I found nothing.');
-            }
-        } else {
-            $this->doPrivmsg($source, $nick . ', we have a problem.');
-        }
-    }
-
-    /**
-     * Perform a Google Convert query to convert a value from one metric to
-     * another.
-     *
-     * @param string $value Value to convert
-     * @param string $from  Source metric
-     * @param string $to    Destination metric
-     *
-     * @return void
-     */
-    public function onCommandGconvert($value, $from, $to)
-    {
-        $url = 'http://www.google.com/finance/converter';
-        $params = array(
-            'a' => $value,
-            'from' => $from,
-            'to' => $to
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $contents = $response->getContent();
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-        if ($contents) {
-            libxml_use_internal_errors(true);
-            $doc = new DOMDocument;
-            $doc->loadHTML($contents);
-            libxml_clear_errors();
-            $xpath = new DOMXPath($doc);
-            $result = $xpath->query('//div[@id="currency_converter_result"]');
-            $div = $result->item(0);
-            $text = rtrim($div->textContent);
-            $this->doPrivmsg($source, $text);
-        }
-    }
-
-    /**
-     * Performs a Google search to convert a value from one unit to another.
-     *
-     * @param string $query Query of the form "[quantity] [unit] to [unit2]"
-     *
-     * @return void
-     *
-     * @pluginCmd [quantity] [unit] to [unit2] Convert a value from one
-     *            metric to another
-     */
-    public function onCommandConvert($query)
-    {
-        $url = 'http://www.google.com/search?q=' . urlencode($query);
-        $response = $this->plugins->http->get($url);
-        $contents = $response->getContent();
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-
-        if ($response->isError()) {
-            $code = $response->getCode();
-            $message = $response->getMessage();
-            $this->doNotice($nick, 'ERROR: ' . $code . ' ' . $message);
-            return;
-        }
-
-        $start = strpos($contents, '<h3 class=r>');
-        if ($start !== false) {
-            $end = strpos($contents, '</b>', $start);
-            $text = strip_tags(substr($contents, $start, $end - $start));
-            $text = str_replace(
-                array(chr(195), chr(151), chr(160)),
-                array('x', '', ' '),
-                $text
-            );
-        }
-
-        if (isset($text)) {
-            $this->doPrivmsg($source, $nick . ': ' . $text);
-        } else {
-            $this->doNotice($nick, 'Sorry I couldn\'t find an answer.');
-        }
-    }
-
-
-    /**
-     * Returns the first definition of a Google Dictionary search.
-     *
-     * @param string $query Word to get the definition
-     *
-     * @return void
-     * @todo Implement use of URL shortening here
-     */
-    public function onCommandDefine($query)
-    {
-        $lang = $this->getConfig('google.lang', 'en');
-        $url = 'http://www.google.com/dictionary/json';
-        $params = array(
-            'callback' => 'result',
-            'q' => $query,
-            'sl' => $lang,
-            'tl' => $lang,
-            'restrict' => 'pr,de'
-        );
-        $response = $this->plugins->http->get($url, $params);
-        $json = $response->getContent();
-
-        // Remove some garbage from the JSON and decode it
-        $json = str_replace(array('result(', ',200,null)'), '', $json);
-        $json = str_replace('"', '¿?¿', $json);
-        $json = strip_tags(stripcslashes($json));
-        $json = str_replace('"', "'", $json);
-        $json = str_replace('¿?¿', '"', $json);
-        $json = json_decode($json);
-
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $nick = $event->getNick();
-        if (!empty($json->webDefinitions)) {
-            $results = 0;
-            foreach ($json->primaries[0]->entries as $entry) {
-                if ($entry->type == 'meaning') {
-                    $results++;
-                    if (empty($text)) {
-                        foreach ($entry->terms as $term) {
-                            if ($term->type == 'text') {
-                                $text = trim($term->text);
-                            }
-                        }
-                    }
-                }
-            }
-            $more = $results > 1 ? ($results - 1) . ' ' : '';
-            $lang_code = substr($lang, 0, 2);
-            $msg = $nick . ': ' . $text
-                 . ' - You can find ' . $more . 'more results at '
-                 . 'http://www.google.com/dictionary'
-                 . '?aq=f'
-                 . '&langpair=' . $lang_code . '%7C' . $lang_code
-                 . '&q=' . $query
-                 . '&hl=' . $lang_code;
-            $this->doPrivmsg($source, $msg);
-        } else {
-            if ($lang != 'en'){
-               $lang = 'en';
-               $this->onCommandDefine($query);
-            } else {
-               $msg = $nick . ': No results for this query.';
-               $this->doPrivmsg($source, $msg);
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Handler.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Handler.php
deleted file mode 100644 (file)
index c308658..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Handles on-demand loading of, iteration over, and access to plugins.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Plugin_Handler implements IteratorAggregate, Countable
-{
-    /**
-     * Current list of plugin instances
-     *
-     * @var array
-     */
-    protected $plugins;
-
-    /**
-     * Paths in which to search for plugin class files
-     *
-     * @var array
-     */
-    protected $paths;
-
-    /**
-     * Flag indicating whether plugin classes should be instantiated on
-     * demand if they are requested but no instance currently exists
-     *
-     * @var bool
-     */
-    protected $autoload;
-
-    /**
-     * Phergie_Config instance that should be passed in to any plugin
-     * instantiated within the handler
-     *
-     * @var Phergie_Config
-     */
-    protected $config;
-
-    /**
-     * Phergie_Event_Handler instance that should be passed in to any plugin
-     * instantiated within the handler
-     *
-     * @var Phergie_Event_Handler
-     */
-    protected $events;
-
-    /**
-     * Name of the class to use for iterating over all currently loaded
-     * plugins
-     *
-     * @var string
-     */
-    protected $iteratorClass = 'Phergie_Plugin_Iterator';
-
-    /**
-     * Constructor to initialize class properties and add the path for core
-     * plugins.
-     *
-     * @param Phergie_Config        $config configuration to pass to any
-     *        instantiated plugin
-     * @param Phergie_Event_Handler $events event handler to pass to any
-     *        instantiated plugin
-     *
-     * @return void
-     */
-    public function __construct(
-        Phergie_Config $config,
-        Phergie_Event_Handler $events
-    ) {
-        $this->config = $config;
-        $this->events = $events;
-
-        $this->plugins = array();
-        $this->paths = array();
-        $this->autoload = false;
-
-        if (!empty($config['plugins.paths'])) {
-            foreach ($config['plugins.paths'] as $dir => $prefix) {
-                $this->addPath($dir, $prefix);
-            }
-        }
-
-        $this->addPath(dirname(__FILE__), 'Phergie_Plugin_');
-    }
-
-
-    /**
-     * Adds a path to search for plugin class files. Paths are searched in
-     * the reverse order in which they are added.
-     *
-     * @param string $path   Filesystem directory path
-     * @param string $prefix Optional class name prefix corresponding to the
-     *        path
-     *
-     * @return Phergie_Plugin_Handler Provides a fluent interface
-     * @throws Phergie_Plugin_Exception
-     */
-    public function addPath($path, $prefix = '')
-    {
-        if (!is_readable($path)) {
-            throw new Phergie_Plugin_Exception(
-                'Path "' . $path . '" does not reference a readable directory',
-                Phergie_Plugin_Exception::ERR_DIRECTORY_NOT_READABLE
-            );
-        }
-
-        $this->paths[] = array(
-            'path' => rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR,
-            'prefix' => $prefix
-        );
-
-        return $this;
-    }
-
-    /**
-     * Returns metadata corresponding to a specified plugin.
-     *
-     * @param string $plugin Short name of the plugin class
-     *
-     * @throws Phergie_Plugin_Exception Class file can't be found
-     *
-     * @return array|boolean Associative array containing the path to the
-     *         class file and its containing directory as well as the full
-     *         class name
-     */
-    public function getPluginInfo($plugin)
-    {
-        foreach (array_reverse($this->paths) as $path) {
-            $file = $path['path'] . $plugin . '.php';
-            if (file_exists($file)) {
-                $path = array(
-                    'dir' => $path['path'],
-                    'file' => $file,
-                    'class' => $path['prefix'] . $plugin,
-                );
-                return $path;
-            }
-        }
-
-        // If the class can't be found, display an error
-        throw new Phergie_Plugin_Exception(
-            'Class file for plugin "' . $plugin . '" cannot be found',
-            Phergie_Plugin_Exception::ERR_CLASS_NOT_FOUND
-        );
-    }
-
-    /**
-     * Adds a plugin instance to the handler.
-     *
-     * @param string|Phergie_Plugin_Abstract $plugin Short name of the
-     *        plugin class or a plugin object
-     * @param array                          $args   Optional array of
-     *        arguments to pass to the plugin constructor if a short name is
-     *        passed for $plugin
-     *
-     * @return Phergie_Plugin_Abstract New plugin instance
-     */
-    public function addPlugin($plugin, array $args = null)
-    {
-        // If a short plugin name is specified...
-        if (is_string($plugin)) {
-            $index = strtolower($plugin);
-            if (isset($this->plugins[$index])) {
-                return $this->plugins[$index];
-            }
-
-            // Attempt to locate and load the class
-            $info = $this->getPluginInfo($plugin);
-            $file = $info['file'];
-            $class = $info['class'];
-            include_once $file;
-            if (!class_exists($class, false)) {
-                throw new Phergie_Plugin_Exception(
-                    'File "' . $file . '" does not contain class "' . $class . '"',
-                    Phergie_Plugin_Exception::ERR_CLASS_NOT_FOUND
-                );
-            }
-
-            // Check to ensure the class is a plugin class
-            if (!is_subclass_of($class, 'Phergie_Plugin_Abstract')) {
-                $msg
-                    = 'Class for plugin "' . $plugin .
-                    '" does not extend Phergie_Plugin_Abstract';
-                throw new Phergie_Plugin_Exception(
-                    $msg,
-                    Phergie_Plugin_Exception::ERR_INCORRECT_BASE_CLASS
-                );
-            }
-
-            // Check to ensure the class can be instantiated
-            $reflection = new ReflectionClass($class);
-            if (!$reflection->isInstantiable()) {
-                throw new Phergie_Plugin_Exception(
-                    'Class for plugin "' . $plugin . '" cannot be instantiated',
-                    Phergie_Plugin_Exception::ERR_CLASS_NOT_INSTANTIABLE
-                );
-            }
-
-            // If the class is found, instantiate it
-            if (!empty($args)) {
-                $instance = $reflection->newInstanceArgs($args);
-            } else {
-                $instance = new $class;
-            }
-
-            // Store the instance
-            $this->plugins[$index] = $instance;
-            $plugin = $instance;
-
-        } elseif ($plugin instanceof Phergie_Plugin_Abstract) {
-            // If a plugin instance is specified...
-
-            // Add the plugin instance to the list of plugins
-            $this->plugins[strtolower($plugin->getName())] = $plugin;
-        }
-
-        // Configure and initialize the instance
-        $plugin->setPluginHandler($this);
-        $plugin->setConfig($this->config);
-        $plugin->setEventHandler($this->events);
-        $plugin->onLoad();
-
-        return $plugin;
-    }
-
-    /**
-     * Adds multiple plugin instances to the handler.
-     *
-     * @param array $plugins List of elements where each is of the form
-     *        'ShortPluginName' or array('ShortPluginName', array($arg1,
-     *        ..., $argN))
-     *
-     * @return Phergie_Plugin_Handler Provides a fluent interface
-     */
-    public function addPlugins(array $plugins)
-    {
-        foreach ($plugins as $plugin) {
-            if (is_array($plugin)) {
-                $this->addPlugin($plugin[0], $plugin[1]);
-            } else {
-                $this->addPlugin($plugin);
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Removes a plugin instance from the handler.
-     *
-     * @param string|Phergie_Plugin_Abstract $plugin Short name of the
-     *        plugin class or a plugin object
-     *
-     * @return Phergie_Plugin_Handler Provides a fluent interface
-     */
-    public function removePlugin($plugin)
-    {
-        if ($plugin instanceof Phergie_Plugin_Abstract) {
-            $plugin = $plugin->getName();
-        }
-        $plugin = strtolower($plugin);
-
-        unset($this->plugins[$plugin]);
-
-        return $this;
-    }
-
-    /**
-     * Returns the corresponding instance for a specified plugin, loading it
-     * if it is not already loaded and autoloading is enabled.
-     *
-     * @param string $name Short name of the plugin class
-     *
-     * @return Phergie_Plugin_Abstract Plugin instance
-     */
-    public function getPlugin($name)
-    {
-        // If the plugin is loaded, return the instance
-        $lower = strtolower($name);
-        if (isset($this->plugins[$lower])) {
-            return $this->plugins[$lower];
-        }
-
-        // If autoloading is disabled, display an error
-        if (!$this->autoload) {
-            $msg
-                = 'Plugin "' . $name . '" has been requested, ' .
-                'is not loaded, and autoload is disabled';
-            throw new Phergie_Plugin_Exception(
-                $msg,
-                Phergie_Plugin_Exception::ERR_PLUGIN_NOT_LOADED
-            );
-        }
-
-        // If autoloading is enabled, attempt to load the plugin
-        $plugin = $this->addPlugin($name);
-
-        // Return the added plugin
-        return $plugin;
-    }
-
-    /**
-     * Returns the corresponding instances for multiple specified plugins,
-     * loading them if they are not already loaded and autoloading is
-     * enabled.
-     *
-     * @param array $names Optional list of short names of the plugin
-     *        classes to which the returned plugin list will be limited,
-     *        defaults to all presently loaded plugins
-     *
-     * @return array Associative array mapping lowercased plugin class short
-     *         names to corresponding plugin instances
-     */
-    public function getPlugins(array $names = array())
-    {
-        if (empty($names)) {
-            return $this->plugins;
-        }
-
-        $plugins = array();
-        foreach ($names as $name) {
-            $plugins[strtolower($name)] = $this->getPlugin($name);
-        }
-        return $plugins;
-    }
-
-    /**
-     * Returns whether or not at least one instance of a specified plugin
-     * class is loaded.
-     *
-     * @param string $name Short name of the plugin class
-     *
-     * @return bool TRUE if an instance exists, FALSE otherwise
-     */
-    public function hasPlugin($name)
-    {
-        return isset($this->plugins[strtolower($name)]);
-    }
-
-    /**
-     * Sets a flag used to determine whether plugins should be loaded
-     * automatically if they have not been explicitly loaded.
-     *
-     * @param bool $flag TRUE to have plugins autoload (default), FALSE
-     *        otherwise
-     *
-     * @return Phergie_Plugin_Handler Provides a fluent interface.
-     */
-    public function setAutoload($flag = true)
-    {
-        $this->autoload = $flag;
-
-        return $this;
-    }
-
-    /**
-     * Returns the value of a flag used to determine whether plugins should
-     * be loaded automatically if they have not been explicitly loaded.
-     *
-     * @return bool TRUE if autoloading is enabled, FALSE otherwise
-     */
-    public function getAutoload()
-    {
-        return $this->autoload;
-    }
-
-    /**
-     * Allows plugin instances to be accessed as properties of the handler.
-     *
-     * @param string $name Short name of the plugin
-     *
-     * @return Phergie_Plugin_Abstract Requested plugin instance
-     */
-    public function __get($name)
-    {
-        return $this->getPlugin($name);
-    }
-
-    /**
-     * Allows plugin instances to be detected as properties of the handler.
-     *
-     * @param string $name Short name of the plugin
-     *
-     * @return bool TRUE if the plugin is loaded, FALSE otherwise
-     */
-    public function __isset($name)
-    {
-        return $this->hasPlugin($name);
-    }
-
-    /**
-     * Allows plugin instances to be removed as properties of handler.
-     *
-     * @param string $name Short name of the plugin
-     *
-     * @return void
-     */
-    public function __unset($name)
-    {
-        $this->removePlugin($name);
-    }
-
-    /**
-     * Returns an iterator for all currently loaded plugin instances.
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        return new $this->iteratorClass(
-            new ArrayIterator($this->plugins)
-        );
-    }
-
-    /**
-     * Sets the iterator class used for all currently loaded plugin
-     * instances.
-     *
-     * @param string $class Name of a class that extends FilterIterator
-     *
-     * @return Phergie_Plugin_Handler Provides a fluent API
-     * @throws Phergie_Plugin_Exception Class cannot be found or is not an
-     *         FilterIterator-based class
-     */
-    public function setIteratorClass($class)
-    {
-        $valid = true;
-
-        try {
-            $error_reporting = error_reporting(0); // ignore autoloader errors
-            $r = new ReflectionClass($class);
-            error_reporting($error_reporting);
-            if (!$r->isSubclassOf('FilterIterator')) {
-                $message = 'Class ' . $class . ' is not a subclass of FilterIterator';
-                $valid = false;
-            }
-        } catch (ReflectionException $e) {
-            $message = $e->getMessage();
-            $valid = false;
-        }
-
-        if (!$valid) {
-            throw new Phergie_Plugin_Exception(
-                $message,
-                Phergie_Plugin_Exception::ERR_INVALID_ITERATOR_CLASS
-            );
-        }
-
-        $this->iteratorClass = $class;
-    }
-
-    /**
-     * Proxies method calls to all plugins containing the called method.
-     *
-     * @param string $name Name of the method called
-     * @param array  $args Arguments passed in the method call
-     *
-     * @return void
-     */
-    public function __call($name, array $args)
-    {
-        foreach ($this->getIterator() as $plugin) {
-            call_user_func_array(array($plugin, $name), $args);
-        }
-        return true;
-    }
-
-    /**
-     * Returns the number of plugins contained within the handler.
-     *
-     * @return int Plugin count
-     */
-    public function count()
-    {
-        return count($this->plugins);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Help.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Help.php
deleted file mode 100644 (file)
index 4c2c49b..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Help
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Help
- */
-
-/**
- * Provides access to descriptions of plugins and the commands they provide.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Help
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Help
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Help extends Phergie_Plugin_Abstract
-{
-    /**
-     * Registry of help data indexed by plugin name
-     *
-     * @var array
-     */
-    protected $registry;
-
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Creates a registry of plugin metadata on connect.
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-        $this->populateRegistry();
-    }
-
-    /**
-     * Creates a registry of plugin metadata.
-     *
-     * @return void
-     */
-    public function populateRegistry()
-    {
-        $this->registry = array();
-
-        foreach ($this->plugins as $plugin) {
-            $class = new ReflectionClass($plugin);
-            $pluginName = strtolower($plugin->getName());
-
-            // Parse the plugin description
-            $docblock = $class->getDocComment();
-            $annotations = $this->getAnnotations($docblock);
-            if (isset($annotations['pluginDesc'])) {
-                $pluginDesc = implode(' ', $annotations['pluginDesc']);
-            } else {
-                $pluginDesc = $this->parseShortDescription($docblock);
-            }
-            $this->registry[$pluginName] = array(
-                'desc' => $pluginDesc,
-                'cmds' => array()
-            );
-
-            // Parse command method descriptions
-            $methodPrefix = Phergie_Plugin_Command::METHOD_PREFIX;
-            $methodPrefixLength = strlen($methodPrefix);
-            foreach ($class->getMethods() as $method) {
-                if (strpos($method->getName(), $methodPrefix) !== 0) {
-                    continue;
-                }
-
-                $cmd = strtolower(substr($method->getName(), $methodPrefixLength));
-                $docblock = $method->getDocComment();
-                $annotations = $this->getAnnotations($docblock);
-
-                if (isset($annotations['pluginCmd'])) {
-                    $cmdDesc = implode(' ', $annotations['pluginCmd']);
-                } else {
-                    $cmdDesc = $this->parseShortDescription($docblock);
-                }
-
-                $cmdParams = array();
-                if (!empty($annotations['param'])) {
-                    foreach ($annotations['param'] as $param) {
-                        $match = null;
-                        if (preg_match('/\h+\$([^\h]+)\h+/', $param, $match)) {
-                            $cmdParams[] = $match[1];
-                        }
-                    }
-                }
-
-                $this->registry[$pluginName]['cmds'][$cmd] = array(
-                    'desc' => $cmdDesc,
-                    'params' => $cmdParams
-                );
-            }
-
-            if (empty($this->registry[$pluginName]['cmds'])) {
-                unset($this->registry[$pluginName]);
-            }
-        }
-    }
-
-    /**
-     * Displays a list of plugins with help information available or
-     * commands available for a specific plugin.
-     *
-     * @param string $query Optional short name of a plugin for which commands
-     *        should be returned or a command; if unspecified, a list of
-     *        plugins with help information available is returned
-     *
-     * @return void
-     */
-    public function onCommandHelp($query = null)
-    {
-        if ($query == 'refresh') {
-            $this->populateRegistry();
-        }
-
-        $nick = $this->getEvent()->getNick();
-        $delay = $this->getConfig('help.delay', 2);
-
-        // Handle requests for a plugin list
-        if (!$query) {
-            $msg = 'These plugins have help information available: '
-                 . implode(', ', array_keys($this->registry));
-            $this->doPrivmsg($nick, $msg);
-            return;
-        }
-
-        // Handle requests for plugin information
-        $query = strtolower($query);
-        if (isset($this->registry[$query])
-            && empty($this->registry[$query]['cmds'][$query])) {
-            $msg = $query . ' - ' . $this->registry[$query]['desc'];
-            $this->doPrivmsg($nick, $msg);
-
-            $msg = 'Available commands - '
-                 . implode(', ', array_keys($this->registry[$query]['cmds']));
-            $this->doPrivmsg($nick, $msg);
-
-            if ($this->getConfig('command.prefix')) {
-                $msg
-                    = 'Note that these commands must be prefixed with "'
-                    . $this->getConfig('command.prefix')
-                    . '" (without quotes) when issued in a public channel.';
-                $this->doPrivmsg($nick, $msg);
-            }
-
-            return;
-        }
-
-        // Handle requests for command information
-        foreach ($this->registry as $plugin => $data) {
-            if (empty($data['cmds'])) {
-                continue;
-            }
-
-            $result = preg_grep('/^' . $query . '$/i', array_keys($data['cmds']));
-            if (!$result) {
-                continue;
-            }
-
-            $cmd = $data['cmds'][array_shift($result)];
-            $msg = $query;
-            if (!empty($cmd['params'])) {
-                $msg .= ' [' . implode('] [', $cmd['params']) . ']';
-            }
-            $msg .= ' - ' . $cmd['desc'];
-            $this->doPrivmsg($nick, $msg);
-        }
-    }
-
-    /**
-     * Parses and returns the short description from a docblock.
-     *
-     * @param string $docblock Docblock comment code
-     *
-     * @return string Short description (i.e. content from the start of the
-     *         docblock up to the first double-newline)
-     */
-    protected function parseShortDescription($docblock)
-    {
-        $desc = preg_replace(
-            array('#^\h*\*\h*#m', '#^/\*\*\h*\v+\h*#', '#(?:\r?\n){2,}.*#s', '#\s*\v+\s*#'),
-            array('', '', '', ' '),
-            $docblock
-        );
-        return $desc;
-    }
-
-    /**
-     * Taken from PHPUnit/Util/Test.php and modified to fix an issue with
-     * tag content spanning multiple lines.
-     *
-     * PHPUnit
-     *
-     * Copyright (c) 2002-2010, Sebastian Bergmann <sb@sebastian-bergmann.de>.
-     * All rights reserved.
-     *
-     * Redistribution and use in source and binary forms, with or without
-     * modification, are permitted provided that the following conditions
-     * are met:
-     *
-     *   * Redistributions of source code must retain the above copyright
-     *     notice, this list of conditions and the following disclaimer.
-     *
-     *   * Redistributions in binary form must reproduce the above copyright
-     *     notice, this list of conditions and the following disclaimer in
-     *     the documentation and/or other materials provided with the
-     *     distribution.
-     *
-     *   * Neither the name of Sebastian Bergmann nor the names of his
-     *     contributors may be used to endorse or promote products derived
-     *     from this software without specific prior written permission.
-     *
-     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-     * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-     * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-     * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-     * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 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.
-     *
-     * @param string $docblock docblock to parse
-     *
-     * @return array
-     */
-    protected function getAnnotations($docblock)
-    {
-        $annotations = array();
-
-        $regex = '/@(?P<name>[A-Za-z_-]+)(?:[ \t]+(?P<value>.*?))?(?:\*\/|\* @)/ms';
-
-        if (preg_match_all($regex, $docblock, $matches)) {
-            $numMatches = count($matches[0]);
-
-            for ($i = 0; $i < $numMatches; ++$i) {
-                $annotation = $matches['value'][$i];
-                $annotation = preg_replace('/\s*\v+\s*\*\s*/', ' ', $annotation);
-                $annotation = rtrim($annotation);
-                $annotations[$matches['name'][$i]][] = $annotation;
-            }
-        }
-
-        return $annotations;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Http.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Http.php
deleted file mode 100644 (file)
index 7c5c870..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Http
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Http
- */
-
-/**
- * Provides an HTTP client for plugins to use in contacting web services or
- * retrieving feeds or web pages.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Http
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Http
- * @uses     extension simplexml optional
- * @uses     extension json optional
- */
-class Phergie_Plugin_Http extends Phergie_Plugin_Abstract
-{
-    /**
-     * Response to the last executed HTTP request
-     *
-     * @var Phergie_Plugin_Http_Response
-     */
-    protected $response;
-
-    /**
-     * Mapping of content types to handlers for them
-     *
-     * @var array
-     */
-    protected $handlers;
-
-    /**
-     * Initializes the handler lookup table.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->handlers = array(
-            '(?:application|text)/xml(?:;.*)?'
-                => 'simplexml_load_string',
-            '(?:(?:application|text)/(?:x-)?json)|text/javascript.*'
-                => 'json_decode',
-        );
-
-        if (is_array($this->config['http.handlers'])) {
-            $this->handlers = array_merge(
-                $this->handlers,
-                $this->config['http.handlers']
-            );
-        }
-    }
-
-    /**
-     * Sets a handler callback for a content type, which is called when a
-     * response of that content type is received to perform any needed
-     * transformations on the response body content before storing it in the
-     * response object. Note that the calling plugin is responsible for
-     * indicating any dependencies related to specified handler callbacks.
-     *
-     * @param string   $type     PCRE regular expression (without delimiters) that
-     *        matches one or more MIME types
-     * @param callback $callback Callback to execute when a response of a content
-     *        type matched by $type is encountered
-     *
-     * @return Phergie_Plugin_Http Provides a fluent interface
-     */
-    public function setHandler($type, $callback)
-    {
-        if (!is_callable($callback)) {
-            throw new Phergie_Plugin_Exception(
-                'Invalid callback specified',
-                Phergie_Plugin_Exception::ERR_FATAL_ERROR
-            );
-        }
-
-        $this->handlers[$type] = $callback;
-
-        return $this;
-    }
-
-    /**
-     * Supporting method that parses the status line of an HTTP response
-     * message.
-     *
-     * @param string $status Status line
-     *
-     * @return array Associative array containing the HTTP version, response
-     *         code, and response description
-     */
-    protected function parseStatusLine($status)
-    {
-        $parts = explode(' ', $status, 3);
-        $parsed = array(
-            'version' => str_replace('HTTP/', '', $parts[0]),
-            'code' => $parts[1],
-            'message' => rtrim($parts[2])
-        );
-        return $parsed;
-    }
-
-    /**
-     * Supporting method that acts as an error handler to intercept HTTP
-     * responses resulting in PHP-level errors.
-     *
-     * @param int    $errno   Level of the error raised
-     * @param string $errstr  Error message
-     * @param string $errfile Name of the file in which the error was raised
-     * @param string $errline Line number on which the error was raised
-     *
-     * @return bool Always returns TRUE to allow normal execution to
-     *         continue once this method terminates
-     */
-    public function handleError($errno, $errstr, $errfile, $errline)
-    {
-        if ($httperr = strstr($errstr, 'HTTP/')) {
-            $parts = $this->parseStatusLine($httperr);
-            $this->response
-                ->setCode($parts['code'])
-                ->setMessage($parts['message']);
-        }
-
-        return true;
-    }
-
-    /**
-     * Supporting method that executes a request and handles the response.
-     *
-     * @param string $url     URL to request
-     * @param array  $context Associative array of stream context parameters
-     *
-     * @return Phergie_Plugin_Http_Response Object representing the response
-     *         resulting from the request
-     */
-    public function request($url, array $context)
-    {
-        $this->response = new Phergie_Plugin_Http_Response;
-
-        $url = (string) $url;
-        $context = stream_context_create(array('http' => $context));
-
-        set_error_handler(array($this, 'handleError'), E_WARNING);
-        $stream = fopen($url, 'r', false, $context);
-        if ($stream) {
-            $meta = stream_get_meta_data($stream);
-            $status = $this->parseStatusLine($meta['wrapper_data'][0]);
-            $code = $status['code'];
-            $message = $status['message'];
-            $headers = array();
-            foreach (array_slice($meta['wrapper_data'], 1) as $header) {
-                if (!strpos($header, ':')) {
-                    continue;
-                }
-                list($name, $value) = explode(': ', $header, 2);
-                $headers[$name] = $value;
-            }
-            unset($meta['wrapper_data']);
-
-            $this->response
-                ->setCode($code)
-                ->setMessage($message)
-                ->setHeaders($headers)
-                ->setMeta($meta);
-
-            $body = stream_get_contents($stream);
-            $type = $this->response->getHeaders('content-type');
-            foreach ($this->handlers as $expr => $handler) {
-                if (preg_match('#^' . $expr . '$#i', $type)) {
-                    $handled = call_user_func($handler, $body);
-                    if (!empty($handled)) {
-                        $body = $handled;
-                    }
-                }
-            }
-
-            $this->response->setContent($body);
-        }
-        restore_error_handler();
-
-        return $this->response;
-    }
-
-    /**
-     * Performs a GET request.
-     *
-     * @param string $url     URL for the request
-     * @param array  $query   Optional associative array of parameters
-     *        constituting the URL query string if $url has none
-     * @param array  $context Optional associative array of additional stream
-     *        context parameters
-     *
-     * @return Phergie_Plugin_Http_Response Received response data
-     */
-    public function get($url, array $query = array(), array $context = array())
-    {
-        if (!empty($query)) {
-            $url .= '?' . http_build_query($query);
-        }
-
-        $context['method'] = 'GET';
-
-        return $this->request($url, $context);
-    }
-
-    /**
-     * Performs a HEAD request.
-     *
-     * @param string $url     URL for the request
-     * @param array  $query   Optional associative array of parameters
-     *        constituting the URL query string if $url has none
-     * @param array  $context Optional associative array of additional stream
-     *        context parameters
-     *
-     * @return Phergie_Plugin_Http_Response Received response data
-     */
-    public function head($url, array $query = array(), array $context = array())
-    {
-        if (!empty($query)) {
-            $url .= '?' . http_build_query($query);
-        }
-
-        $context['method'] = 'HEAD';
-
-        return $this->request($url, $context);
-    }
-
-    /**
-     * Performs a POST request.
-     *
-     * @param string $url     URL for the request
-     * @param array  $query   Optional associative array of parameters
-     *        constituting the URL query string if $url has none
-     * @param array  $post    Optional associative array of parameters
-     *        constituting the POST request body if it is using the
-     *        traditional URL-encoded format
-     * @param array  $context Optional associative array of additional stream
-     *        context parameters
-     *
-     * @return Phergie_Plugin_Http_Response Received response data
-     */
-    public function post($url, array $query = array(),
-        array $post = array(), array $context = array()
-    ) {
-        if (!empty($query)) {
-            $url .= '?' . http_build_query($query);
-        }
-
-        $context['method'] = 'POST';
-
-        if (!empty($post)
-            && (!empty($context['header'])
-            xor stripos($context['header'], 'Content-Type'))
-        ) {
-            if (!empty($context['header'])) {
-                $context['header'] .= "\r\n";
-            } else {
-                $context['header'] = '';
-            }
-            $context['header'] .=
-                'Content-Type: application/x-www-form-urlencoded';
-            $context['content'] = http_build_query($post);
-        }
-
-        return $this->request($url, $context);
-    }
-}
\ No newline at end of file
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Http/Response.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Http/Response.php
deleted file mode 100644 (file)
index b9e377c..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Http
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Http
- */
-
-/**
- * Data structure for HTTP response information.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Http
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Http
- */
-class Phergie_Plugin_Http_Response
-{
-    /**
-     * HTTP response code or 0 if no HTTP response was received
-     *
-     * @var string
-     */
-    protected $code;
-
-    /**
-     * HTTP response strings
-     *
-     * @var array
-     */
-    protected static $codeStrings = array(
-        0   => 'No Response',
-        100 => 'Continue',
-        200 => 'OK',
-        201 => 'Created',
-        204 => 'No Content',
-        206 => 'Partial Content',
-        300 => 'Multiple Choices',
-        301 => 'Moved Permanently',
-        302 => 'Found',
-        303 => 'See Other',
-        304 => 'Not Modified',
-        307 => 'Temporary Redirect',
-        400 => 'Bad Request',
-        401 => 'Unauthorized',
-        403 => 'Forbidden',
-        404 => 'Not Found',
-        405 => 'Method Not Allowed',
-        406 => 'Not Acceptable',
-        408 => 'Request Timeout',
-        410 => 'Gone',
-        413 => 'Request Entity Too Large',
-        414 => 'Request URI Too Long',
-        415 => 'Unsupported Media Type',
-        416 => 'Requested Range Not Satisfiable',
-        417 => 'Expectation Failed',
-        500 => 'Internal Server Error',
-        501 => 'Method Not Implemented',
-        503 => 'Service Unavailable',
-        506 => 'Variant Also Negotiates'
-    );
-
-    /**
-     * Description of the HTTP response code or the error message if no HTTP
-     * response was received
-     *
-     * @var string
-     */
-    protected $message;
-
-    /**
-     * Content of the response body, decoded for supported content types
-     *
-     * @var mixed
-     */
-    protected $content;
-
-    /**
-     * Associative array mapping response header names to their values
-     *
-     * @var array
-     */
-    protected $headers;
-
-    /**
-     * Associative array containing other metadata about the response
-     *
-     * @var array
-     */
-    protected $meta;
-
-    /**
-     * Sets the HTTP response code.
-     *
-     * @param string $code Response code
-     *
-     * @return Phergie_Plugin_Http_Response Provides a fluent interface
-     */
-    public function setCode($code)
-    {
-        $this->code = $code;
-        return $this;
-    }
-
-    /**
-     * Returns the HTTP response code.
-     *
-     * @return string Response code
-     */
-    public function getCode()
-    {
-        return $this->code;
-    }
-
-    /**
-     * Returns the HTTP response code text.
-     *
-     * @return string Response code text
-     */
-    public function getCodeAsString()
-    {
-        $code = $this->code;
-
-        if (!isset(self::$codeStrings[$code])) {
-            return 'Unkown HTTP Status';
-        }
-
-        return self::$codeStrings[$code];
-    }
-
-    /**
-     * Returns whether the response indicates a client- or server-side error.
-     *
-     * @return bool TRUE if the response indicates an error, FALSE otherwise
-     */
-    public function isError()
-    {
-        switch (substr($this->code, 0, 1)) {
-        case '0':
-        case '4':
-        case '5':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    /**
-     * Sets the HTTP response description.
-     *
-     * @param string $message Response description
-     *
-     * @return Phergie_Plugin_Http_Response Provides a fluent interface
-     */
-    public function setMessage($message)
-    {
-        $this->message = $message;
-        return $this;
-    }
-
-    /**
-     * Returns the HTTP response description.
-     *
-     * @return string
-     */
-    public function getMessage()
-    {
-        return $this->message;
-    }
-
-    /**
-     * Sets the content of the response body.
-     *
-     * @param mixed $content Response body content
-     *
-     * @return Phergie_Plugin_Http_Response Provides a fluent interface
-     */
-    public function setContent($content)
-    {
-        $this->content = $content;
-        return $this;
-    }
-
-    /**
-     * Returns the content of the response body.
-     *
-     * @return mixed Response body content, decoded for supported content
-     *         types
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * Sets the response headers.
-     *
-     * @param array $headers Associative array of response headers indexed
-     *        by header name
-     *
-     * @return Phergie_Plugin_Http_Response Provides a fluent interface
-     */
-    public function setHeaders(array $headers)
-    {
-        $names = array_map('strtolower', array_keys($headers));
-        $values = array_values($headers);
-        $this->headers = array_combine($names, $values);
-        return $this;
-    }
-
-    /**
-     * Returns all response headers or the value of a single specified
-     * response header.
-     *
-     * @param string $name Optional name of a single header for which the
-     *        associated value should be returned
-     *
-     * @return array|string Associative array of all header values, a string
-     *         containing the value of the header indicated by $name if one
-     *         is set, or null if one is not
-     */
-    public function getHeaders($name = null)
-    {
-        if ($name) {
-            $name = strtolower($name);
-            if (empty($this->headers[$name])) {
-                return null;
-            }
-            return $this->headers[$name];
-        }
-        return $this->headers;
-    }
-
-    /**
-     * Sets the response metadata.
-     *
-     * @param array $meta Associative array of response metadata
-     *
-     * @return Phergie_Plugin_Http_Response Provides a fluent interface
-     */
-    public function setMeta(array $meta)
-    {
-        $this->meta = $meta;
-        return $this;
-    }
-
-    /**
-     * Returns all metadata or the value of a single specified metadatum.
-     *
-     * @param string $name Optional name of a single metadatum for which the
-     *        associated value should be returned
-     *
-     * @return array|string|null Associative array of all metadata values, a
-     *         string containing the value of the metadatum indicated by
-     *         $name if one is set, or null if one is not
-     */
-    public function getMeta($name = null)
-    {
-        if ($name) {
-            if (empty($this->meta[$name])) {
-                return null;
-            }
-            return $this->meta[$name];
-        }
-        return $this->meta;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Ideone.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Ideone.php
deleted file mode 100644 (file)
index 3af88dd..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Ideone
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Ideone
- */
-
-/**
- * Interfaces with ideone.com to execute code and return the result.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Ideone
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Ideone
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Ideone extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->plugins->getPlugin('Command');
-    }
-
-    /**
-     * Checks a service response for an error, sends a notice to the event
-     * source if an error has occurred, and returns whether an error was found.
-     *
-     * @param array $result Associative array representing the service response
-     *
-     * @return boolean TRUE if an error is found, FALSE otherwise
-     */
-    protected function isError($result)
-    {
-        if ($result['error'] != 'OK') {
-            $this->doNotice($this->event->getNick(), 'ideone error: ' . $result['error']);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Executes a source code sequence in a specified language and returns
-     * the result.
-     *
-     * @param string $language Programming language the source code is in
-     * @param string $code     Source code to execute
-     *
-     * @return void
-     */
-    public function onCommandIdeone($language, $code)
-    {
-        $source = $this->event->getSource();
-        $nick = $this->event->getNick();
-
-        // Get authentication credentials
-        $user = $this->getConfig('ideone.user', 'test');
-        $pass = $this->getConfig('ideone.pass', 'test');
-
-        // Normalize the command parameters
-        $language = strtolower($language);
-
-        // Massage PHP code to allow for convenient shorthand
-        if ($language == 'php') {
-            if (!preg_match('/^<\?(?:php)?/', $code)) {
-                $code = '<?php ' . $code;
-            }
-            switch (substr($code, -1)) {
-                case '}':
-                case ';':
-                    break;
-                default:
-                    $code .= ';';
-                    break;
-            }
-        }
-
-        // Identify the language to use
-        $client = new SoapClient('http://ideone.com/api/1/service.wsdl');
-        $response = $client->getLanguages($user, $pass);
-        if ($this->isError($response)) {
-            return;
-        }
-        $languageLength = strlen($language);
-        foreach ($response['languages'] as $languageId => $languageName) {
-            if (strncasecmp($language, $languageName, $languageLength) == 0) {
-                break;
-            }
-        }
-
-        // Send the paste data
-        $response = $client->createSubmission(
-            $user,
-            $pass,
-            $code,
-            $languageId,
-            null, // string input - data from stdin
-            true, // boolean run - TRUE to execute the code
-            false // boolean private - FALSE to make the paste public
-        );
-        if ($this->isError($response)) {
-            return;
-        }
-        $link = $response['link'];
-
-        // Wait until the paste data is processed or the service fails
-        $attempts = $this->getConfig('ideone.attempts', 10);
-        foreach (range(1, $attempts) as $attempt) {
-            $response = $client->getSubmissionStatus($user, $pass, $link);
-            if ($this->isError($response)) {
-                return;
-            }
-            if ($response['status'] == 0) {
-                $result = $response['result'];
-                break;
-            } else {
-                $result = null;
-                sleep(1);
-            }
-        }
-        if ($result == null) {
-            $this->doNotice($nick, 'ideone error: Timed out');
-            return;
-        }
-        if ($result != 15) {
-            $this->doNotice($nick, 'ideone error: Status code ' . $result);
-            return;
-        }
-
-        // Get details for the created paste
-        $response = $client->getSubmissionDetails(
-            $user,
-            $pass,
-            $link,
-            false, // boolean withSource - FALSE to not return the source code
-            false, // boolean withInput - FALSE to not return stdin data
-            true,  // boolean withOutput - TRUE to include output
-            true,  // boolean withStderr - TRUE to return stderr data
-            false  // boolean withCmpinfo - TRUE to return compilation info
-        );
-        if ($this->isError($response)) {
-            return;
-        }
-
-        // Replace the output if it exceeds a specified maximum length
-        $outputLimit = $this->getConfig('ideone.output_limit', 100);
-        var_dump($response);
-        if ($outputLimit && strlen($response['output']) > $outputLimit) {
-            $response['output'] = 'Output is too long to post';
-        }
-
-        // Format the message
-        $msg = $this->getConfig('ideone.format', '%nick%: [ %link% ] %output%');
-        $response['nick'] = $nick;
-        $response['link'] = 'http://ideone.com/' . $link;
-        foreach ($response as $key => $value) {
-            $msg = str_replace('%' . $key . '%', $value, $msg);
-        }
-        $this->doPrivmsg($source, $msg);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Invisible.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Invisible.php
deleted file mode 100644 (file)
index 622f7d3..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Invisible
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Invisible
- */
-
-/**
- * Marks the bot as invisible when it connects to the server.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Invisible
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Invisible
- * @link     http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_3_2
- */
-class Phergie_Plugin_Invisible extends Phergie_Plugin_Abstract
-{
-    /**
-     * Marks the bot as invisible when it connects to the server.
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-        $this->doMode($this->getConnection()->getNick(), '+i');
-        $this->getPluginHandler()->removePlugin($this);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Iterator.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Iterator.php
deleted file mode 100644 (file)
index d610962..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Implements a filtering iterator for limiting executing of methods across
- * a group of plugins.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Plugin_Iterator extends FilterIterator
-{
-    /**
-     * List of short names of plugins to exclude when iterating
-     *
-     * @var array
-     */
-    protected $plugins = array();
-
-    /**
-     * List of method names where plugins with these methods will be
-     * excluded when iterating
-     *
-     * @var array
-     */
-    protected $methods = array();
-
-    /**
-     * Overrides the parent constructor to reset the internal iterator's
-     * pointer to the current item, which the parent class errantly does not
-     * do.
-     *
-     * @param Iterator $iterator Iterator to filter
-     *
-     * @return void
-     * @link http://bugs.php.net/bug.php?id=52560
-     */
-    public function __construct(Iterator $iterator)
-    {
-        parent::__construct($iterator);
-        $this->rewind();
-    }
-
-    /**
-     * Adds to a list of plugins to exclude when iterating.
-     *
-     * @param mixed $plugins String containing the short name of a single
-     *        plugin to exclude or an array of short names of multiple
-     *        plugins to exclude
-     *
-     * @return Phergie_Plugin_Iterator Provides a fluent interface
-     */
-    public function addPluginFilter($plugins)
-    {
-        if (is_array($plugins)) {
-            $this->plugins = array_unique(
-                array_merge($this->plugins, $plugins)
-            );
-        } else {
-            $this->plugins[] = $plugins;
-        }
-        return $this;
-    }
-
-    /**
-     * Adds to a list of method names where plugins defining these methods
-     * will be excluded when iterating.
-     *
-     * @param mixed $methods String containing the name of a single method
-     *        or an array containing the name of multiple methods
-     *
-     * @return Phergie_Plugin_Iterator Provides a fluent interface
-     */
-    public function addMethodFilter($methods)
-    {
-        if (is_array($methods)) {
-            $this->methods = array_merge($this->methods, $methods);
-        } else {
-            $this->methods[]= $methods;
-        }
-        return $this;
-    }
-
-    /**
-     * Clears any existing plugin and methods filters.
-     *
-     * @return Phergie_Plugin_Iterator Provides a fluent interface
-     */
-    public function clearFilters()
-    {
-        $this->plugins = array();
-        $this->methods = array();
-    }
-
-    /**
-     * Implements FilterIterator::accept().
-     *
-     * @return boolean TRUE to include the current item in those by returned
-     *         during iteration, FALSE otherwise
-     */
-    public function accept()
-    {
-        if (!$this->plugins && !$this->methods) {
-            return true;
-        }
-
-        $current = $this->current();
-
-        if (in_array($current->getName(), $this->plugins)) {
-            return false;
-        }
-
-        foreach ($this->methods as $method) {
-            if (method_exists($current, $method)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Join.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Join.php
deleted file mode 100644 (file)
index 50c3ad8..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Join
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Join
- */
-
-/**
- * Joins a specified channel on command from a user.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Join
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Join
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Join extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Joins a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to join
-     * @param string $keys     Optional comma-delimited list of channel keys
-     *
-     * @return void
-     */
-    public function onCommandJoin($channels, $keys = null)
-    {
-        $this->doJoin($channels, $keys);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Karma.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Karma.php
deleted file mode 100644 (file)
index 27b4a08..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Karma
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Karma
- */
-
-/**
- * Handles requests for incrementation or decrementation of a maintained list
- * of counters for specified terms.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Karma
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Karma
- * @uses     extension PDO
- * @uses     extension pdo_sqlite
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Karma extends Phergie_Plugin_Abstract
-{
-    /**
-     * SQLite object
-     *
-     * @var resource
-     */
-    protected $db = null;
-
-    /**
-     * Prepared statement to add a new karma record
-     *
-     * @var PDOStatement
-     */
-    protected $insertKarma;
-
-    /**
-     * Prepared statement to update an existing karma record
-     *
-     * @var PDOStatement
-     */
-    protected $updateKarma;
-
-    /**
-     * Retrieves an existing karma record
-     *
-     * @var PDOStatement
-     */
-    protected $fetchKarma;
-
-    /**
-     * Retrieves an existing fixed karma record
-     *
-     * @var PDOStatement
-     */
-    protected $fetchFixedKarma;
-
-    /**
-     * Retrieves a positive answer for a karma comparison
-     *
-     * @var PDOStatement
-     */
-    protected $fetchPositiveAnswer;
-
-    /**
-     * Retrieves a negative answer for a karma comparison
-     *
-     * @var PDOStatement
-     */
-    protected $fetchNegativeAnswer;
-
-    /**
-     * Check for dependencies and initializes a database connection and
-     * prepared statements.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $this->getDb();
-    }
-
-    /**
-     * Initializes prepared statements used by the plugin.
-     *
-     * @return void
-     */
-    protected function initializePreparedStatements()
-    {
-        $this->fetchKarma = $this->db->prepare('
-            SELECT karma
-            FROM karmas
-            WHERE term = :term
-            LIMIT 1
-        ');
-
-        $this->insertKarma = $this->db->prepare('
-            INSERT INTO karmas (term, karma)
-            VALUES (:term, :karma)
-        ');
-
-        $this->updateKarma = $this->db->prepare('
-            UPDATE karmas
-            SET karma = :karma
-            WHERE term = :term
-        ');
-
-        $this->fetchFixedKarma = $this->db->prepare('
-            SELECT karma
-            FROM fixed_karmas
-            WHERE term = :term
-            LIMIT 1
-        ');
-
-        $this->fetchPositiveAnswer = $this->db->prepare('
-            SELECT answer
-            FROM positive_answers
-            ORDER BY RANDOM()
-            LIMIT 1
-        ');
-
-        $this->fetchNegativeAnswer = $this->db->prepare('
-            SELECT answer
-            FROM negative_answers
-            ORDER BY RANDOM()
-            LIMIT 1
-        ');
-    }
-
-    /**
-     * Returns a connection to the plugin database, initializing one if none
-     * is explicitly set.
-     *
-     * @return PDO Database connection
-     */
-    public function getDb()
-    {
-        if (empty($this->db)) {
-            $this->db = new PDO('sqlite:' . dirname(__FILE__) . '/Karma/karma.db');
-            $this->initializePreparedStatements();
-        }
-        return $this->db;
-    }
-
-    /**
-     * Sets the connection to the plugin database, mainly intended for unit
-     * testing.
-     *
-     * @param PDO $db Database connection
-     *
-     * @return Phergie_Plugin_Karma Provides a fluent interface
-     */
-    public function setDb(PDO $db)
-    {
-        $this->db = $db;
-        $this->initializePreparedStatements();
-        return $this;
-    }
-
-    /**
-     * Get the canonical form of a given term.
-     *
-     * In the canonical form all sequences of whitespace
-     * are replaced by a single space and all characters
-     * are lowercased.
-     *
-     * @param string $term Term for which a canonical form is required
-     *
-     * @return string Canonical term
-     */
-    protected function getCanonicalTerm($term)
-    {
-        $canonicalTerm = strtolower(preg_replace('|\s+|', ' ', trim($term, '()')));
-        switch ($canonicalTerm) {
-            case 'me':
-                $canonicalTerm = strtolower($this->event->getNick());
-                break;
-            case 'all':
-            case '*':
-            case 'everything':
-                $canonicalTerm = 'everything';
-                break;
-        }
-        return $canonicalTerm;
-    }
-
-    /**
-     * Intercepts a message and processes any contained recognized commands.
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $message = $this->getEvent()->getText();
-
-        $termPattern = '\S+?|\([^<>]+?\)+';
-        $actionPattern = '(?P<action>\+\+|--)';
-
-        $modifyPattern = <<<REGEX
-               {^
-               (?J) # allow overwriting capture names
-               \s*  # ignore leading whitespace
-
-               (?:  # start with ++ or -- before the term
-            $actionPattern
-            (?P<term>$termPattern)
-               |   # follow the term with ++ or --
-            (?P<term>$termPattern)
-                       $actionPattern # allow no whitespace between the term and the action
-               )
-               $}ix
-REGEX;
-
-        $versusPattern = <<<REGEX
-        {^
-               (?P<term0>$termPattern)
-                       \s+(?P<method><|>)\s+
-               (?P<term1>$termPattern)$#
-        $}ix
-REGEX;
-
-        $match = null;
-
-        if (preg_match($modifyPattern, $message, $match)) {
-            $action = $match['action'];
-            $term = $this->getCanonicalTerm($match['term']);
-            $this->modifyKarma($term, $action);
-        } elseif (preg_match($versusPattern, $message, $match)) {
-            $term0 = trim($match['term0']);
-            $term1 = trim($match['term1']);
-            $method = $match['method'];
-            $this->compareKarma($term0, $term1, $method);
-        }
-    }
-
-    /**
-     * Get the karma rating for a given term.
-     *
-     * @param string $term Term for which the karma rating needs to be
-     *        retrieved
-     *
-     * @return void
-     */
-    public function onCommandKarma($term)
-    {
-        $source = $this->getEvent()->getSource();
-        $nick = $this->getEvent()->getNick();
-
-        $canonicalTerm = $this->getCanonicalTerm($term);
-
-        $fixedKarma = $this->fetchFixedKarma($canonicalTerm);
-        if ($fixedKarma) {
-            $message = $nick . ': ' . $term . ' ' . $fixedKarma;
-            $this->doPrivmsg($source, $message);
-            return;
-        }
-
-        $karma = $this->fetchKarma($canonicalTerm);
-
-        $message = $nick . ': ';
-
-        if ($term == 'me') {
-            $message .= 'You have';
-        } else {
-            $message .= $term . ' has';
-        }
-
-        $message .= ' ';
-
-        if ($karma) {
-            $message .= 'karma of ' . $karma;
-        } else {
-            $message .= 'neutral karma';
-        }
-
-        $message .= '.';
-
-        $this->doPrivmsg($source, $message);
-    }
-
-    /**
-     * Resets the karma for a term to 0.
-     *
-     * @param string $term Term for which to reset the karma rating
-     *
-     * @return void
-     */
-    public function onCommandReincarnate($term)
-    {
-        $data = array(
-            ':term' => $term,
-            ':karma' => 0
-        );
-        $this->updateKarma->execute($data);
-    }
-
-    /**
-     * Compares the karma between two terms. Optionally increases/decreases
-     * the karma of either term.
-     *
-     * @param string $term0  First term
-     * @param string $term1  Second term
-     * @param string $method Comparison method (< or >)
-     *
-     * @return void
-     */
-    protected function compareKarma($term0, $term1, $method)
-    {
-        $event = $this->getEvent();
-        $nick = $event->getNick();
-        $source = $event->getSource();
-
-        $canonicalTerm0 = $this->getCanonicalTerm($term0);
-        $canonicalTerm1 = $this->getCanonicalTerm($term1);
-
-        $fixedKarma0 = $this->fetchFixedKarma($canonicalTerm0);
-        $fixedKarma1 = $this->fetchFixedKarma($canonicalTerm1);
-
-        if ($fixedKarma0 || $fixedKarma1) {
-            return;
-        }
-
-        if ($canonicalTerm0 == 'everything') {
-            $change = $method == '<' ? '++' : '--';
-            $karma0 = 0;
-            $karma1 = $this->modifyKarma($canonicalTerm1, $change);
-        } elseif ($canonicalTerm1 == 'everything') {
-            $change = $method == '<' ? '--' : '++';
-            $karma0 = $this->modifyKarma($canonicalTerm0, $change);
-            $karma1 = 0;
-        } else {
-            $karma0 = $this->fetchKarma($canonicalTerm0);
-            $karma1 = $this->fetchKarma($canonicalTerm1);
-        }
-
-        // Combining the first and second branches here causes an odd
-        // single-line lapse in code coverage, but the lapse disappears if
-        // they're separated
-        if ($method == '<' && $karma0 < $karma1) {
-            $replies = $this->fetchPositiveAnswer;
-        } elseif ($method == '>' && $karma0 > $karma1) {
-            $replies = $this->fetchPositiveAnswer;
-        } else {
-            $replies = $this->fetchNegativeAnswer;
-        }
-        $replies->execute();
-        $reply = $replies->fetchColumn();
-
-        if (max($karma0, $karma1) == $karma1) {
-            list($canonicalTerm0, $canonicalTerm1) =
-                array($canonicalTerm1, $canonicalTerm0);
-        }
-
-        $message = str_replace(
-            array('%owner%','%owned%'),
-            array($canonicalTerm0, $canonicalTerm1),
-            $reply
-        );
-
-        $this->doPrivmsg($source, $message);
-    }
-
-    /**
-     * Modifes a term's karma.
-     *
-     * @param string $term   Term to modify
-     * @param string $action Karma action (either ++ or --)
-     *
-     * @return int Modified karma rating
-     */
-    protected function modifyKarma($term, $action)
-    {
-        $karma = $this->fetchKarma($term);
-        if ($karma !== false) {
-            $statement = $this->updateKarma;
-        } else {
-            $statement = $this->insertKarma;
-        }
-
-        $karma += ($action == '++') ? 1 : -1;
-
-        $args = array(
-            ':term'  => $term,
-            ':karma' => $karma
-        );
-        $statement->execute($args);
-
-        return $karma;
-    }
-
-    /**
-     * Returns the karma rating for a specified term for which the karma
-     * rating can be modified.
-     *
-     * @param string $term Term for which to fetch the corresponding karma
-     *        rating
-     *
-     * @return integer|boolean Integer value denoting the term's karma or
-     *         FALSE if there is the specified term has no associated karma
-     *         rating
-     */
-    protected function fetchKarma($term)
-    {
-        $this->fetchKarma->execute(array(':term' => $term));
-        $result = $this->fetchKarma->fetch(PDO::FETCH_ASSOC);
-
-        if ($result === false) {
-            return false;
-        }
-
-        return (int) $result['karma'];
-    }
-
-    /**
-     * Returns a phrase describing the karma rating for a specified term for
-     * which the karma rating is fixed.
-     *
-     * @param string $term Term for which to fetch the corresponding karma
-     *        rating
-     *
-     * @return string Phrase describing the karma rating, which may be append
-     *         to the term to form a complete response
-     */
-    protected function fetchFixedKarma($term)
-    {
-        $this->fetchFixedKarma->execute(array(':term' => $term));
-        $result = $this->fetchFixedKarma->fetch(PDO::FETCH_ASSOC);
-
-        if ($result === false) {
-            return false;
-        }
-
-        return $result['karma'];
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Lart.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Lart.php
deleted file mode 100644 (file)
index d00cae0..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Lart
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Lart
- */
-
-/**
- * Accepts terms and corresponding definitions for storage to a local data
- * source and performs and returns the result of lookups for term definitions
- * as they are requested.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Lart
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Lart
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     extension PDO
- * @uses     extension pdo_sqlite
- */
-class Phergie_Plugin_Lart extends Phergie_Plugin_Abstract
-{
-    /**
-     * PDO instance for the database
-     *
-     * @var PDO
-     */
-    protected $db;
-
-    /**
-     * Prepared statement for inserting a new definition
-     *
-     * @var PDOStatement
-     */
-    protected $save;
-
-    /**
-     * Prepared statement for deleting the definition for a given term
-     *
-     * @var PDOStatement
-     */
-    protected $delete;
-
-    /**
-     * Prepared statement for searching for a definition for which the term
-     * matches as a regular expression against a given search string
-     *
-     * @var PDOStatement
-     */
-    protected $process;
-
-    /**
-     * Prepared statement for searching for a definition by its exact term
-     *
-     * @var PDOStatement
-     */
-    protected $select;
-
-    /**
-     * Checks for dependencies and initializes the database.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->fail('PDO and pdo_sqlite extensions must be installed');
-        }
-
-        $this->plugins->getPlugin('Command');
-
-        $dir = dirname(__FILE__) . '/' . $this->getName();
-        $path = $dir . '/lart.db';
-        $exists = file_exists($path);
-        if (!$exists) {
-            mkdir($dir);
-        }
-
-        try {
-            $this->db = new PDO('sqlite:' . $path);
-        } catch (PDO_Exception $e) {
-            throw new Phergie_Plugin_Exception($e->getMessage());
-        }
-
-        $this->db->sqliteCreateFunction('preg_match', 'preg_match');
-
-        if (!$exists) {
-            $this->db->exec('
-                CREATE TABLE lart (
-                    name VARCHAR(255),
-                    definition TEXT,
-                    hostmask VARCHAR(50),
-                    tstamp VARCHAR(19)
-                )
-            ');
-            $this->db->exec('
-                CREATE UNIQUE INDEX lart_name ON lart (name)
-            ');
-        }
-
-        $this->save = $this->db->prepare('
-            REPLACE INTO lart (name, definition, hostmask, tstamp)
-            VALUES (:name, :definition, :hostmask, :tstamp)
-        ');
-
-        $this->process = $this->db->prepare('
-            SELECT *
-            FROM lart
-            WHERE preg_match(name, :name)
-        ');
-
-        $this->select = $this->db->prepare('
-            SELECT *
-            FROM lart
-            WHERE name = :name
-        ');
-
-        $this->delete = $this->db->prepare('
-            DELETE FROM lart
-            WHERE name = :name
-        ');
-    }
-
-    /**
-     * Retrieves the definition for a given term if it exists.
-     *
-     * @param string $term Term to search for
-     *
-     * @return mixed String containing the definition or FALSE if no definition
-     *               exists
-     */
-    protected function getLart($term)
-    {
-        $this->process->execute(array(':name' => $term));
-        $row = $this->process->fetchObject();
-        if ($row === false) {
-            return false;
-        }
-        preg_match($row->name, $term, $match);
-        $definition = preg_replace(
-            "/(?:\\\\|\\$)([0-9]+)/e",
-            '$match[\1]',
-            $row->definition
-        );
-        $event = $this->getEvent();
-        $definition = str_replace(
-            array('$source', '$nick'),
-            array($event->getSource(), $event->getNick()),
-            $definition
-        );
-        return $definition;
-    }
-
-    /**
-     * Deletes a given definition.
-     *
-     * @param string $term Term for which the definition should be deleted
-     *
-     * @return boolean TRUE if the definition was found and deleted, FALSE
-     *         otherwise
-     */
-    protected function deleteLart($term)
-    {
-        $this->delete->execute(array(':name' => $term));
-        return ($this->delete->rowCount() > 0);
-    }
-
-    /**
-     * Saves a given definition.
-     *
-     * @param string $term       Term to trigger a response containing the
-     *        corresponding definition, may be a regular expression
-     * @param string $definition Definition corresponding to the term
-     *
-     * @return boolean TRUE if the definition was saved successfully, FALSE
-     *         otherwise
-     */
-    protected function saveLart($term, $definition)
-    {
-        $data = array(
-            ':name' => $term,
-            ':definition' => $definition,
-            ':hostmask' => (string) $this->getEvent()->getHostmask(),
-            ':tstamp' => time()
-        );
-        $this->save->execute($data);
-        return ($this->save->rowCount() > 0);
-    }
-
-    /**
-     * Returns information about a definition.
-     *
-     * @param string $term Term about which to return information
-     *
-     * @return void
-     */
-    public function onCommandLartinfo($term)
-    {
-        $this->select->execute(array(':name' => $term));
-        $row = $this->select->fetchObject();
-        $msg = $this->getEvent()->getNick() . ': ';
-        if (!$row) {
-            $msg .= 'Lart not found';
-        } else {
-            $msg .= 'Term: ' . $row->name
-                . ', Definition: ' . $row->definition
-                . ', User: ' . $row->hostmask
-                . ', Added: ' . date('n/j/y g:i A', $row->tstamp);
-        }
-        $this->doNotice($this->getEvent()->getSource(), $msg);
-    }
-
-    /**
-     * Creates a new definition.
-     *
-     * @param string $term       Term to add
-     * @param string $definition Definition to add
-     *
-     * @return void
-     */
-    public function onCommandAddlart($term, $definition)
-    {
-        $result = $this->saveLart($term, $definition);
-        if ($result) {
-            $msg = 'Lart saved successfully';
-        } else {
-            $msg = 'Lart could not be saved';
-        }
-        $this->doNotice($this->getEvent()->getSource(), $msg);
-    }
-
-    /**
-     * Removes an existing definition.
-     *
-     * @param string $term Term for which the definition should be removed
-     *
-     * @return void
-     */
-    public function onCommandDeletelart($term)
-    {
-        $source = $this->getEvent()->getSource();
-        if ($this->deleteLart($term)) {
-            $msg = 'Lart deleted successfully';
-        } else {
-            $msg = 'Lart not found';
-        }
-        $this->doNotice($source, $msg);
-    }
-
-    /**
-     * Processes definition triggers in the text of the current event.
-     *
-     * @return void
-     */
-    protected function processLart()
-    {
-        $lart = $this->getLart($this->getEvent()->getText());
-        if ($lart) {
-            if (strpos($lart, '/me') === 0) {
-                $lart = substr($lart, 4);
-                $method = 'doAction';
-            } else {
-                $method = 'doPrivmsg';
-            }
-            $this->$method($this->getEvent()->getSource(), $lart);
-        }
-    }
-
-    /**
-     * Processes definition triggers in messages.
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $this->processLart();
-    }
-
-    /**
-     * Processes definition triggers in CTCP actions.
-     *
-     * @return void
-     */
-    public function onAction()
-    {
-        $this->processLart();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php
deleted file mode 100644 (file)
index af8fc72..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Message
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Message
- */
-
-/**
- * Generalized plugin providing utility methods for
- * prefix and bot named based message extraction.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Message
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Message
- */
-class Phergie_Plugin_Message extends Phergie_Plugin_Abstract
-{
-
-    /**
-     * Check whether a message is specifically targeted at the bot.
-     * This is the case when the message starts with the bot's name
-     * followed by [,:>] or when it is a private message.
-     *
-     * @return boolean true when the message is specifically targeted at the bot,
-     *                 false otherwise.
-     */
-    public function isTargetedMessage()
-    {
-        $event = $this->getEvent();
-
-        $self = preg_quote($this->connection->getNick());
-
-        $targetPattern = <<<REGEX
-        {^
-        \s*{$self}\s*[:>,].* # expect the bots name, followed by a [:>,]
-        $}ix
-REGEX;
-
-        return !$event->isInChannel() 
-            || preg_match($targetPattern, $event->getText()) > 0;
-    }
-
-    /**
-     * Allow for prefix and bot name aware extraction of a message
-     *
-     * @return string|bool $message The message, which is possibly targeted at the 
-     *                              bot or false if a prefix requirement failed
-     */
-    public function getMessage()
-    {
-        $event = $this->getEvent();
-
-        $prefix = preg_quote($this->getConfig('command.prefix'));
-        $self = preg_quote($this->connection->getNick());
-        $message = $event->getText();
-
-        // $prefixPattern matches : Phergie, do command <parameters>
-        // where $prefix = 'do'   : do command <parameters>
-        //                        : Phergie, command <parameters>
-        $prefixPattern = <<<REGEX
-        {^
-        (?:
-               \s*{$self}\s*[:>,]\s* # start with bot name
-                       (?:{$prefix})?        # which is optionally followed by the prefix
-        |
-               \s*{$prefix}          # or start with the prefix
-        )
-        \s*(.*)                   # always end with the message
-        $}ix
-REGEX;
-
-        // $noPrefixPattern matches : Phergie, command <parameters>
-        //                          : command <parameters>
-        $noPrefixPattern = <<<REGEX
-        {^
-        \s*(?:{$self}\s*[:>,]\s*)? # optionally start with the bot name
-        (.*?)                      # always end with the message
-        $}ix
-REGEX;
-
-        $pattern = $noPrefixPattern;
-
-        // If a prefix is set, force it as a requirement
-        if ($prefix && $event->isInChannel()) {
-            $pattern = $prefixPattern;
-        }
-
-        $match = null;
-
-        if (!preg_match($pattern, $message, $match)) {
-            return false;
-        }
-
-        return $match[1];
-    }
-}
\ No newline at end of file
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php
deleted file mode 100644 (file)
index e97abec..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php\r
-/**\r
- * Phergie\r
- *\r
- * PHP version 5\r
- *\r
- * LICENSE\r
- *\r
- * This source file is subject to the new BSD license that is bundled\r
- * with this package in the file LICENSE.\r
- * It is also available through the world-wide-web at this URL:\r
- * http://phergie.org/license\r
- *\r
- * @category  Phergie\r
- * @package   Phergie_Plugin_NickServ\r
- * @author    Phergie Development Team <team@phergie.org>\r
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)\r
- * @license   http://phergie.org/license New BSD License\r
- * @link      http://pear.phergie.org/package/Phergie_Plugin_NickServ\r
- */\r
-\r
-/**\r
- * Intercepts and responds to messages from the NickServ agent requesting that\r
- * the bot authenticate its identify.\r
- *\r
- * The password configuration setting should contain the password registered\r
- * with NickServ for the nick used by the bot.\r
- *\r
- * @category Phergie\r
- * @package  Phergie_Plugin_NickServ\r
- * @author   Phergie Development Team <team@phergie.org>\r
- * @license  http://phergie.org/license New BSD License\r
- * @link     http://pear.phergie.org/package/Phergie_Plugin_NickServ\r
- * @uses     Phergie_Plugin_Command pear.phergie.org\r
- */\r
-class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract\r
-{\r
-    /**\r
-     * Nick of the NickServ bot\r
-     *\r
-     * @var string\r
-     */\r
-    protected $botNick;\r
-\r
-    /**\r
-    * Identify message\r
-    */\r
-    protected $identifyMessage;\r
-\r
-    /**\r
-     * Checks for dependencies and required configuration settings.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onLoad()\r
-    {\r
-        $this->getPluginHandler()->getPlugin('Command');\r
-\r
-        // Get the name of the NickServ bot, defaults to NickServ\r
-        $this->botNick = $this->getConfig('nickserv.botnick', 'NickServ');\r
-\r
-        // Get the identify message\r
-        $this->identifyMessage = $this->getConfig(\r
-            'nickserv.identify_message',\r
-            '/This nickname is registered./'\r
-        );\r
-    }\r
-\r
-    /**\r
-     * Checks for a notice from NickServ and responds accordingly if it is an\r
-     * authentication request or a notice that a ghost connection has been\r
-     * killed.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onNotice()\r
-    {\r
-        $event = $this->event;\r
-        if (strtolower($event->getNick()) == strtolower($this->botNick)) {\r
-            $message = $event->getArgument(1);\r
-            $nick = $this->connection->getNick();\r
-            if (preg_match($this->identifyMessage, $message)) {\r
-                $password = $this->config['nickserv.password'];\r
-                if (!empty($password)) {\r
-                    $this->doPrivmsg($this->botNick, 'IDENTIFY ' . $password);\r
-                }\r
-                unset($password);\r
-            } elseif (preg_match('/^.*' . $nick . '.* has been killed/', $message)) {\r
-                $this->doNick($nick);\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Checks to see if the original nick has quit; if so, take the name back.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onQuit()\r
-    {\r
-        $eventNick = $this->event->getNick();\r
-        $nick = $this->connection->getNick();\r
-        if ($eventNick == $nick) {\r
-            $this->doNick($nick);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Changes the in-memory configuration setting for the bot nick if it is\r
-     * successfully changed.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onNick()\r
-    {\r
-        $event = $this->event;\r
-        $connection = $this->connection;\r
-        if ($event->getNick() == $connection->getNick()) {\r
-            $connection->setNick($event->getArgument(0));\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Provides a command to terminate ghost connections.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onCommandGhostbust()\r
-    {\r
-        $event = $this->event;\r
-        $user = $event->getNick();\r
-        $conn = $this->connection;\r
-        $nick = $conn->getNick();\r
-\r
-        if ($nick != $this->config['connections'][$conn->getHost()]['nick']) {\r
-            $password = $this->config['nickserv.password'];\r
-            if (!empty($password)) {\r
-                $this->doPrivmsg(\r
-                    $this->event->getSource(),\r
-                    $user . ': Attempting to ghost ' . $nick .'.'\r
-                );\r
-                $this->doPrivmsg(\r
-                    $this->botNick,\r
-                    'GHOST ' . $nick . ' ' . $password,\r
-                    true\r
-                );\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Automatically send the GHOST command if the bot's nick is in use.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onResponse()\r
-    {\r
-        if ($this->event->getCode() == Phergie_Event_Response::ERR_NICKNAMEINUSE) {\r
-            $password = $this->config['nickserv.password'];\r
-            if (!empty($password)) {\r
-                $this->doPrivmsg(\r
-                    $this->botNick,\r
-                    'GHOST ' . $this->connection->getNick() . ' ' . $password\r
-                );\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Handle the server sending a KILL request.\r
-     *\r
-     * @return void\r
-     */\r
-    public function onKill()\r
-    {\r
-        $this->doQuit($this->event->getArgument(1));\r
-    }\r
-}\r
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Part.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Part.php
deleted file mode 100644 (file)
index c07cdd9..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Part
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Part
- */
-
-/**
- * Parts a specified channel on command from a user.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Part
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Part
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Part extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Parts a channel.
-     *
-     * @param string $channels Comma-delimited list of channels to leave
-     *
-     * @return void
-     */
-    public function onCommandPart($channels)
-    {
-        $this->doPart($channels);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Php.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Php.php
deleted file mode 100644 (file)
index e10d101..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Php
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Php
- */
-
-/**
- * Returns information on PHP functions as requested. 
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Php
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Php
- * @uses     extension pdo 
- * @uses     extension pdo_sqlite 
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Php extends Phergie_Plugin_Abstract
-{
-    /**
-     * Data source to use
-     *
-     * @var Phergie_Plugin_Php_Source
-     */
-    protected $source;
-
-    /**
-     * Check for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        // @todo find a way to move this to Phergie_Plugin_Php_Source_Local
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->fail('PDO and pdo_sqlite extensions must be installed');
-        }
-
-        $this->getPluginHandler()->getPlugin('Command');
-
-        $this->source = new Phergie_Plugin_Php_Source_Local;
-    }
-
-    /**
-     * Searches the data source for the requested function.
-     * 
-     * @param string $functionName Name of the function to search for
-     *
-     * @return void
-     */
-    public function onCommandPhp($functionName)
-    {
-        $nick = $this->event->getNick();
-        if ($function = $this->source->findFunction($functionName)) {
-            $msg = $nick . ': ' . $function['description'];
-            $this->doPrivmsg($this->event->getSource(), $msg);
-        } else {
-            $msg = 'Search for function ' . $functionName . ' returned no results.';
-            $this->doNotice($nick, $msg);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source.php
deleted file mode 100644 (file)
index c6cf326..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Php
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Php
- */
-
-/**
- * Data source interface for the Php plugin.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Php
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Php
- * @uses     extension pdo 
- * @uses     extension pdo_sqlite 
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-interface Phergie_Plugin_Php_Source
-{
-    /**
-     * Searches for a description of the function.
-     * 
-     * @param string $function Search pattern to match against the function 
-     *        name, wildcards supported using %
-     *
-     * @return array|null Associative array containing the function name and 
-     *         description or NULL if no results are found
-     */
-    public function findFunction($function);
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source/Local.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Php/Source/Local.php
deleted file mode 100644 (file)
index 9292bea..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Php
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Php
- */
-
-/**
- * Data source for {@see Phergie_Plugin_Php}. This source reads function 
- * descriptions from a file and stores them in a SQLite database. When a 
- * function description is requested, the function is retrieved from the 
- * local database.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Php
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Php
- * @uses     extension pdo 
- * @uses     extension pdo_sqlite 
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Php_Source_Local implements Phergie_Plugin_Php_Source
-{
-    /**
-     * Local database for storage
-     *
-     * @var PDO 
-     */
-    protected $database;
-
-    /**
-     * Source of the PHP function summary
-     *
-     * @var string
-     */
-    protected $url = 'http://cvs.php.net/viewvc.cgi/phpdoc/funcsummary.txt?revision=HEAD';
-
-    /**
-     * Constructor to initialize the data source.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $path = dirname(__FILE__);
-
-        try {
-            $this->database = new PDO('sqlite:' . $path . '/functions.db');
-            $this->buildDatabase();
-            // @todo Modify this to be rethrown as an appropriate 
-            //       Phergie_Plugin_Exception and handled in Phergie_Plugin_Php
-        } catch (PDOException $e) {
-            echo 'PDO failure: '.$e->getMessage();
-        } 
-    }
-
-    /**
-     * Searches for a description of the function.
-     * 
-     * @param string $function Search pattern to match against the function 
-     *        name, wildcards supported using %
-     *
-     * @return array|null Associative array containing the function name and 
-     *         description or NULL if no results are found
-     */
-    public function findFunction($function)
-    {
-        // Remove possible parentheses
-        $split = preg_split('{\(|\)}', $function);
-        $function = (count($split)) ? array_shift($split) : $function;
-
-        // Prepare the database statement
-        $stmt = $this->database->prepare('SELECT `name`, `description` FROM `functions` WHERE `name` LIKE :function');
-        $stmt->execute(array(':function' => $function));
-
-        // Check the results
-        if (count($stmt) > 0) {
-            $result = $stmt->fetch(PDO::FETCH_ASSOC);
-            /**
-             * @todo add class and function URLS
-             * class methods: http://php.net/manual/en/classname.methodname.php
-             * functions: http://php.net/manual/en/function.functionname.php
-             * where '_' is replaced with '-'
-             */
-            return $result;
-        }
-
-        // No results found, return
-        return null;
-    }
-
-    /**
-     * Build the database and parses the function summary file into it.
-     *
-     * @param bool $rebuild TRUE to force a rebuild of the table used to 
-     *        house function information, FALSE otherwise, defaults to FALSE
-     *
-     * @return void
-     */
-    protected function buildDatabase($rebuild = false)
-    {
-        // Check to see if the functions table exists
-        $checkstmt = $this->database->query("SELECT COUNT(*) FROM `sqlite_master` WHERE `name` = 'functions'");
-        $checkstmt->execute();
-        $result = $checkstmt->fetch(PDO::FETCH_ASSOC);
-        unset( $checkstmt );
-        $table = $result['COUNT(*)'];
-        unset( $result );
-        // If the table doesn't exist, create it
-        if (!$table) {
-                $this->database->exec('CREATE TABLE `functions` (`name` VARCHAR(255), `description` TEXT)');
-                $this->database->exec('CREATE UNIQUE INDEX `functions_name` ON `functions` (`name`)');
-        }
-
-        // If we created a new table, fill it with data
-        if (!$table || $rebuild) {
-            // Get the contents of the source file
-            // @todo Handle possible error cases better here; the @ operator 
-            //       shouldn't be needed
-            $contents = @file($this->url, FILE_IGNORE_NEW_LINES + FILE_SKIP_EMPTY_LINES);
-
-            if (!$contents) {
-                return;
-            }
-
-            // Parse the contents
-            $valid = array();
-            $firstPart = '';
-            $lineNumber = 0;
-            foreach ($contents as $line) {
-                // Clean the current line
-                $line = trim($line);
-
-                // Skip comment lines
-                if (0 === strpos($line, '#')) {
-                    // reset the line if the current line is odd
-                    if (($lineNumber % 2) !== 0) {
-                        $lineNumber--;
-                    }
-                    continue;
-                }
-
-                /*
-                 * If the current line is even, it's the first part of the
-                 * complete function description ...
-                 */
-                if (($lineNumber % 2) === 0) {
-                    $firstPart = $line;
-                } else {
-                    // ... it's the last part of the complete function description
-                    $completeLine = $firstPart . ' ' . $line;
-                    $firstPart = '';
-                    if (preg_match('{^([^\s]*)[\s]?([^)]*)\(([^\)]*)\)[\sU]+([\sa-zA-Z0-9\.,\-_()]*)$}', $completeLine, $matches)) {
-                        $valid[] = $matches;
-                    }
-                }
-                // Up the line number before going to the next line
-                $lineNumber++;
-            }
-            // free up some memory
-            unset($contents);
-
-            // Process the valid matches
-            if (count($valid) > 0) {
-                // Clear the database
-                $this->database->exec('DELETE * FROM `functions`');
-
-                // Prepare the sql statement
-                $stmt = $this->database->prepare('INSERT INTO `functions` (`name`, `description`) VALUES (:name, :description)');
-                $this->database->beginTransaction();
-
-                // Insert the data
-                foreach ($valid as $function) {
-                    // Extract function values
-                    list( , $retval, $name, $params, $desc) = $function;
-                    if (empty($name)) {
-                        $name = $retval;
-                        $retval = '';
-                    }
-                    // Reconstruct the complete function line
-                    $line = trim($retval . ' ' . $name . '(' . $params . ') - ' . $desc);
-                    // Execute the statement
-                    $stmt->execute(array(':name' => $name, ':description' => $line));
-                }
-                
-                // Commit the changes to the database
-                $this->database->commit();
-            }
-            // free up some more memory
-            unset($valid);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Ping.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Ping.php
deleted file mode 100644 (file)
index 021670d..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Ping
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Ping
- */
-
-/**
- * Uses a self CTCP PING to ensure that the client connection has not been
- * dropped.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Ping
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Ping
- */
-class Phergie_Plugin_Ping extends Phergie_Plugin_Abstract
-{
-    /**
-     * Timestamp for the last instance in which an event was received
-     *
-     * @var int
-     */
-    protected $lastEvent;
-
-    /**
-     * Timestamp for the last instance in which a PING was sent
-     *
-     * @var int
-     */
-    protected $lastPing;
-
-    /**
-     * Initialize event timestamps upon connecting to the server.
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-        $this->lastEvent = time();
-        $this->lastPing = null;
-    }
-
-    /**
-     * Updates the timestamp since the last received event when a new event
-     * arrives.
-     *
-     * @return void
-     */
-    public function preEvent()
-    {
-        $this->lastEvent = time();
-    }
-
-    /**
-     * Clears the ping time if a reply is received.
-     *
-     * @return void
-     */
-    public function onPingResponse()
-    {
-        $this->lastPing = null;
-    }
-
-    /**
-     * Performs a self ping if the event threshold has been exceeded or
-     * issues a termination command if the ping threshold has been exceeded.
-     *
-     * @return void
-     */
-    public function onTick()
-    {
-        $time = time();
-        if (!empty($this->lastPing)) {
-            if ($time - $this->lastPing > $this->getConfig('ping.ping', 20)) {
-                $this->doQuit();
-            }
-        } elseif (
-            $time - $this->lastEvent > $this->getConfig('ping.event', 300)
-        ) {
-            $this->lastPing = $time;
-            $this->doPing($this->getConnection()->getNick(), $this->lastPing);
-        }
-    }
-
-    /**
-     * Gets the last ping time
-     * lastPing needs exposing for things such as unit testing
-     *
-     * @return int timestamp of last ping
-     */
-    public function getLastPing()
-    {
-        return $this->lastPing;
-    }
-
-    /**
-     * Set the last ping time
-     * lastPing needs to be exposed for unit testing
-     *
-     * @param int|null $ping timestamp of last ping
-     *
-     * @return self
-     */
-    public function setLastPing($ping = null)
-    {
-        if (null === $ping) {
-            $ping = time();
-        }
-        if (!is_int($ping)) {
-            throw new InvalidArgumentException('$ping must be an integer or null');
-        }
-        $this->lastPing = $ping;
-        return $this;
-    }
-
-    /**
-     * Gets the last event time
-     * lastEvent needs exposing for things such as unit testing
-     *
-     * @return int timestamp of last ping
-     */
-    public function getLastEvent()
-    {
-        return $this->lastEvent;
-    }
-
-    /**
-     * Set the last event time
-     * lastEvent needs to be exposed for unit testing
-     *
-     * @param int|null $event timestamp of last ping
-     *
-     * @return self
-     */
-    public function setLastEvent($event = null)
-    {
-        if (null === $event) {
-            $event = time();
-        }
-        if (!is_int($event)) {
-            throw new InvalidArgumentException('$ping must be an integer or null');
-        }
-        $this->lastEvent = $event;
-        return $this;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Pong.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Pong.php
deleted file mode 100644 (file)
index 54e19fc..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Pong
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Pong
- */
-
-/**
- * Responds to PING requests from the server.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Pong
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Pong
- * @link     http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_2
- * @link     http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_3
- */
-class Phergie_Plugin_Pong extends Phergie_Plugin_Abstract
-{
-    /**
-     * Sends a PONG response for each PING request received by the server. 
-     *
-     * @return void
-     */
-    public function onPing()
-    {
-        $this->doPong($this->getEvent()->getArgument(0));
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Prioritize.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Prioritize.php
deleted file mode 100644 (file)
index 2312567..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Prioritize
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Prioritize
- */
-
-/**
- * Prioritizes events such that they are executed in order from least to most 
- * destructive.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Prioritize
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Prioritize
- */
-class Phergie_Plugin_Prioritize extends Phergie_Plugin_Abstract
-{
-    /** 
-     * Event types ordered by priority of execution
-     *
-     * @var array
-     */
-    protected $priority = array(
-        'raw',
-        'pass',
-        'user',
-        'ping',
-        'pong',
-        'notice',
-        'join',
-        'list',
-        'names',
-        'version',
-        'stats',
-        'links',
-        'time',
-        'trace',
-        'admin',
-        'info',
-        'who',
-        'whois',
-        'whowas',
-        'mode',
-        'privmsg',
-        'action',
-        'nick',
-        'topic',
-        'invite',
-        'kill',
-        'part',
-        'quit'
-    );  
-
-    /**
-     * Prioritizes events from least to most destructive. 
-     *
-     * @return void 
-     */
-    public function preDispatch()
-    {
-        $events = $this->getEventHandler();
-
-        // Categorize events by type
-        $categorized = array();
-        foreach ($events as $event) {
-            $type = $event->getType();
-            if (!isset($categorized[$type])) {
-                $categorized[$type] = array();
-            }
-            $categorized[$type][] = $event;
-        }
-
-        // Order events by type from least to most destructive
-        $types = array_intersect($this->priority, array_keys($categorized));
-        $prioritized = array();
-        foreach ($types as $type) {
-            $prioritized = array_merge($prioritized, $categorized[$type]);
-        }
-
-        // Replace the original events array with the prioritized one
-        $events->replaceEvents($prioritized);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Puppet.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Puppet.php
deleted file mode 100644 (file)
index bede0be..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Puppet
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Puppet
- */
-
-/**
- * Allows a user to effectively speak and act as the bot.
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Puppet
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Puppet
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Puppet extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Handles a request for the bot to repeat a given message in a specified
-     * channel.
-     *
-     * <code>say #chan message</code>
-     *
-     * @param string $channel Name of the channel
-     * @param string $message Message to repeat
-     *
-     * @return void
-     */
-    public function onCommandSay($channel, $message)
-    {
-        $this->doPrivmsg($channel, $message);
-    }
-
-    /**
-     * Handles a request for the bot to repeat a given action in a specified
-     * channel.
-     *
-     * <code>act #chan action</code>
-     *
-     * @param string $channel Name of the channel
-     * @param string $action  Action to perform
-     *
-     * @return void
-     */
-    public function onCommandAct($channel, $action)
-    {
-        $this->doAction($channel, $action);
-    }
-
-    /**
-     * Handles a request for the bot to send the server a raw message
-     *
-     * <code>raw message</code>
-     *
-     * @param string $message Message to send
-     *
-     * @return void
-     */
-    public function onCommandRaw($message)
-    {
-        $this->doRaw($message);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Quit.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Quit.php
deleted file mode 100644 (file)
index eca22a9..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Quit
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Quit
- */
-
-/**
- * Terminates the current connection upon command.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Quit
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Quit
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Quit extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Issues a quit command when a message is received requesting that the
-     * bot terminate the current connection.
-     *
-     * @return void
-     */
-    public function onCommandQuit()
-    {
-        $this->doQuit('Requested by ' . $this->getEvent()->getNick());
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Reload.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Reload.php
deleted file mode 100644 (file)
index 4305770..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Reload
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Reload
- */
-
-/**
- * Facilitates reloading of individual plugins for development purposes.
- * Note that, because existing class definitions cannot be removed from
- * memory, increased memory usage is an expected result of using this plugin.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Reload
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Reload
- * @uses     Phergie_Plugin_Command pear.phergie.org
- */
-class Phergie_Plugin_Reload extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Command');
-    }
-
-    /**
-     * Reloads a specified plugin.
-     *
-     * @param string $plugin Short name of the plugin to reload
-     *
-     * @return void
-     */
-    public function onCommandReload($plugin)
-    {
-        $plugin = ucfirst($plugin);
-
-        $evalClass = true;
-        if (strpos($plugin, ' ') !== false) {
-            $args = explode(' ', $plugin);
-            $plugin = $args[0];
-            if (strtolower($args[1]) == 'force') {
-                $evalClass = false;
-            }
-        }
-
-        if (!$this->plugins->hasPlugin($plugin)) {
-            echo 'DEBUG(Reload): ' . ucfirst($plugin) . ' is not loaded yet, loading', PHP_EOL;
-            try {
-                $this->plugins->getPlugin($plugin);
-                $this->plugins->command->populateMethodCache();
-            } catch (Phergie_Plugin_Exception $e) {
-                if ($e->getCode() == Phergie_Plugin_Exception::ERR_CLASS_NOT_FOUND) {
-                    echo 'DEBUG(Reload): ', $e->getMessage(), PHP_EOL;
-                } else {
-                    throw $e;
-                }
-            }
-            return;
-        }
-
-        try {
-            $info = $this->plugins->getPluginInfo($plugin);
-        } catch (Phergie_Plugin_Exception $e) {
-            $source = $this->event->getSource();
-            $nick = $this->event->getNick();
-            $this->doNotice($source, $nick . ': ' . $e->getMessage());
-            return;
-        }
-
-        $class = $info['class'];
-        $contents = file_get_contents($info['file']);
-        $newClass = $class . '_' . sha1($contents);
-
-        if (class_exists($newClass, false)) {
-            if ($evalClass == true) {
-                echo 'DEBUG(Reload): Class ', $class, ' has not changed since last reload', PHP_EOL;
-                return;
-            }
-        } else {
-            $contents = preg_replace(
-                array('/^<\?(?:php)?/', '/class\s+' . $class . '/i'),
-                array('', 'class ' . $newClass),
-                $contents
-            );
-            eval($contents);
-        }
-
-        $instance = new $newClass;
-        $instance->setName($plugin);
-        $instance->setEvent($this->event);
-        $this->plugins
-            ->removePlugin($plugin)
-            ->addPlugin($instance);
-
-        $this->plugins->command->populateMethodCache();
-        if ($this->plugins->hasPlugin('Help')) {
-            $this->plugins->help->populateRegistry();
-        }
-
-        echo 'DEBUG(Reload): Reloaded ', $class, ' to ', $newClass, PHP_EOL;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Remind.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Remind.php
deleted file mode 100644 (file)
index 42d674c..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Remind
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Remind
- */
-
-/**
- * Parses and logs messages that should be relayed to other users the next time
- * the recipient is active on the same channel.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Remind
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Remind
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Time pear.phergie.org
- * @uses     extension PDO
- * @uses     extension pdo_sqlite
- */
-class Phergie_Plugin_Remind extends Phergie_Plugin_Abstract
-{
-    /**
-     * Number of reminders to show in public.
-     */
-    protected $publicReminders = 3;
-
-    /**
-     * PDO resource for a SQLite database containing the reminders.
-     *
-     * @var resource
-     */
-    protected $db;
-
-    /**
-     * Flag that indicates whether or not to use an in-memory reminder list.
-     *
-     * @var bool
-     */
-    protected $keepListInMemory = true;
-
-    /**
-     * In-memory store for pending reminders.
-     */
-    protected $msgStorage = array();
-
-    /**
-     * Check for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Time');
-
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->fail('PDO and pdo_sqlite extensions must be installed');
-        }
-
-        $dir = dirname(__FILE__) . '/' . $this->getName();
-        $path = $dir . '/reminder.db';
-        if (!file_exists($dir)) {
-            mkdir($dir);
-        }
-
-        if (isset($this->config['remind.use_memory'])) {
-            $this->keepListInMemory = (bool) $this->config['remind.use_memory'];
-        }
-
-        if (isset($this->config['remind.public_reminders'])) {
-            $this->publicReminders = (int) $this->config['remind.public_reminders'];
-            $this->publicReminders = max($this->publicReminders, 0);
-        }
-
-        try {
-            $this->db = new PDO('sqlite:' . $path);
-            $this->createTables();
-        } catch (PDO_Exception $e) {
-            throw new Phergie_Plugin_Exception($e->getMessage());
-        }
-    }
-
-    /**
-     * Intercepts a message and processes any contained recognized commands.
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $source = $this->getEvent()->getSource();
-        $nick = $this->getEvent()->getNick();
-
-        $this->deliverReminders($source, $nick);
-    }
-
-    /**
-     * Handle reminder requests
-     *
-     * @param string $recipient recipient of the message
-     * @param string $message   message to tell the recipient
-     *
-     * @return void
-     * @see handleRemind()
-     */
-    public function onCommandTell($recipient, $message)
-    {
-        $this->handleRemind($recipient, $message);
-    }
-
-    /**
-     * Handle reminder requests
-     *
-     * @param string $recipient recipient of the message
-     * @param string $message   message to tell the recipient
-     *
-     * @return void
-     * @see handleRemind()
-     */
-    public function onCommandAsk($recipient, $message)
-    {
-        $this->handleRemind($recipient, $message);
-    }
-
-    /**
-     * Handle reminder requests
-     *
-     * @param string $recipient recipient of the message
-     * @param string $message   message to tell the recipient
-     *
-     * @return void
-     * @see handleRemind()
-     */
-    public function onCommandRemind($recipient, $message)
-    {
-        $this->handleRemind($recipient, $message);
-    }
-
-    /**
-     * Handles the tell/remind command (stores the message)
-     *
-     * @param string $recipient name of the recipient
-     * @param string $message   message to store
-     *
-     * @return void
-     */
-    protected function handleRemind($recipient, $message)
-    {
-        $source = $this->getEvent()->getSource();
-        $nick = $this->getEvent()->getNick();
-
-        if (!$this->getEvent()->isInChannel()) {
-            $this->doPrivmsg($source, 'Reminders must be requested in-channel.');
-            return;
-        }
-
-        $q = $this->db->prepare(
-            'INSERT INTO remind
-                (
-                    time,
-                    channel,
-                    recipient,
-                    sender,
-                    message
-                )
-            VALUES
-                (
-                    :time,
-                    :channel,
-                    :recipient,
-                    :sender,
-                    :message
-               )'
-        );
-        try {
-            $q->execute(
-                array(
-                    'time' => date(DATE_RFC822),
-                    'channel' => $source,
-                    'recipient' => strtolower($recipient),
-                    'sender' => strtolower($nick),
-                    'message' => $message
-                )
-            );
-        } catch (PDOException $e) {
-        }
-
-        if ($rowid = $this->db->lastInsertId()) {
-            $this->doPrivmsg($source, 'ok, ' . $nick . ', message stored');
-        } else {
-            $this->doPrivmsg(
-                $source,
-                $nick . ': bad things happened. Message not saved.'
-            );
-            return;
-        }
-
-        if ($this->keepListInMemory) {
-            $this->msgStorage[$source][strtolower($recipient)] = $rowid;
-        }
-    }
-
-    /**
-     * Determines if the user has pending reminders, and if so, delivers them.
-     *
-     * @param string $channel channel to check
-     * @param string $nick    nick to check
-     *
-     * @return void
-     */
-    protected function deliverReminders($channel, $nick)
-    {
-        if ($channel[0] != '#') {
-            // private message, not a channel, so don't check
-            return;
-        }
-
-        // short circuit if there's no message in memory (if allowed)
-        if ($this->keepListInMemory
-            && !isset($this->msgStorage[$channel][strtolower($nick)])
-        ) {
-            return;
-        }
-
-        // fetch and deliver messages
-        $reminders = $this->fetchMessages($channel, $nick);
-        if (count($reminders) > $this->publicReminders) {
-            $msgs = array_slice($reminders, 0, $this->publicReminders);
-            $privmsgs = array_slice($reminders, $this->publicReminders);
-        } else {
-            $msgs = $reminders;
-            $privmsgs = false;
-        }
-
-        foreach ($msgs as $msg) {
-            $ts = $this->plugins->time->getCountdown($msg['time']);
-            $formatted = sprintf(
-                '%s: (from %s, %s ago) %s',
-                $nick, $msg['sender'], $ts, $msg['message']
-            );
-            $this->doPrivmsg($channel, $formatted);
-            $this->deleteMessage($msg['rowid'], $channel, $nick);
-        }
-
-        if ($privmsgs) {
-            foreach ($privmsgs as $msg) {
-                $ts = $this->plugins->time->getCountdown($msg['time']);
-                $formatted = sprintf(
-                    'from %s, %s ago: %s',
-                    $msg['sender'], $ts, $msg['message']
-                );
-                $this->doPrivmsg($nick, $formatted);
-                $this->deleteMessage($msg['rowid'], $channel, $nick);
-            }
-            $formatted = sprintf(
-                '%s: (%d more messages sent in private.)',
-                $nick, count($privmsgs)
-            );
-            $this->doPrivmsg($channel, $formatted);
-        }
-    }
-
-    /**
-     * Get pending messages (for a specific channel/recipient)
-     *
-     * @param string $channel   channel on which to check for pending messages
-     * @param string $recipient user for which to check pending messages
-     *
-     * @return array of records
-     */
-    protected function fetchMessages($channel = null, $recipient = null)
-    {
-        if ($channel) {
-            $qClause = 'WHERE channel = :channel AND recipient LIKE :recipient';
-            $params = compact('channel', 'recipient');
-        } else {
-            $qClause = '';
-            $params = array();
-        }
-        $q = $this->db->prepare(
-            'SELECT rowid, channel, sender, recipient, time, message
-            FROM remind ' . $qClause
-        );
-        $q->execute($params);
-        return $q->fetchAll();
-    }
-
-    /**
-     * Deletes a delivered message
-     *
-     * @param int    $rowid   ID of the message to delete
-     * @param string $channel message's channel
-     * @param string $nick    message's recipient
-     *
-     * @return void
-     */
-    protected function deleteMessage($rowid, $channel, $nick)
-    {
-        $nick = strtolower($nick);
-        $q = $this->db->prepare('DELETE FROM remind WHERE rowid = :rowid');
-        $q->execute(array('rowid' => $rowid));
-
-        if ($this->keepListInMemory) {
-            if (isset($this->msgStorage[$channel][$nick])
-                && $this->msgStorage[$channel][$nick] == $rowid
-            ) {
-                unset($this->msgStorage[$channel][$nick]);
-            }
-        }
-    }
-
-    /**
-     * Determines if a table exists
-     *
-     * @param string $name Table name
-     *
-     * @return bool
-     */
-    protected function haveTable($name)
-    {
-        $sql = 'SELECT COUNT(*) FROM sqlite_master WHERE name = '
-            . $this->db->quote($name);
-        return (bool) $this->db->query($sql)->fetchColumn();
-    }
-
-    /**
-     * Creates the database table(s) (if they don't exist)
-     *
-     * @return void
-     */
-    protected function createTables()
-    {
-        if (!$this->haveTable('remind')) {
-            $this->db->exec(
-                'CREATE TABLE
-                    remind
-                    (
-                        time INTEGER,
-                        channel TEXT,
-                        recipient TEXT,
-                        sender TEXT,
-                        message TEXT
-                    )'
-            );
-        }
-    }
-
-    /**
-     * Populates the in-memory cache of pending reminders
-     *
-     * @return void
-     */
-    protected function populateMemory()
-    {
-        if (!$this->keepListInMemory) {
-            return;
-        }
-        foreach ($this->fetchMessages() as $msg) {
-            $this->msgStorage[$msg['channel']][$msg['recipient']] = $msg['rowid'];
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Serve.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Serve.php
deleted file mode 100644 (file)
index cdb8f7f..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Serve
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Serve
- */
-
-/**
- * Processes requests to serve a user something from a database.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Serve
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Serve
- * @uses     extension pdo
- * @uses     extension pdo_sqlite
- */
-class Phergie_Plugin_Serve extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->fail('PDO and pdo_sqlite extensions must be installed');
-        }
-    }
-
-    /**
-     * Retrieves a random item from the database table.
-     *
-     * @param string $database Path to the SQLite database file
-     * @param string $table    Name of the database table
-     * @param array  $request  Parsed request
-     *
-     * @return object Retrieved item
-     */
-    protected function getItem($database, $table, array $request)
-    {
-        $db = new PDO('sqlite:' . $database);
-        if (!empty($request['suggestion'])) {
-            $query = 'SELECT * FROM ' . $table . ' WHERE name LIKE ? ORDER BY RANDOM() LIMIT 1';
-            $stmt = $db->prepare($query);
-            $stmt->execute(array('%' . $request['suggestion'] . '%'));
-            $item = $stmt->fetchObject();
-            if (!$item) {
-                $item = new stdClass;
-                $item->name = $request['suggestion'];
-                $item->link = null;
-            }
-        } else {
-            $query = 'SELECT * FROM ' . $table . ' ORDER BY RANDOM() LIMIT 1';
-            $stmt = $db->query($query);
-            $item = $stmt->fetchObject();
-        }
-        return $item;
-    }
-
-    /**
-     * Processes a request to serve a user something.
-     *
-     * @param string $database Path to the SQLite database file
-     * @param string $table    Name of the database table
-     * @param string $format   Format of the response where %target%,
-     *        %item%, %article%', and %link will be replaced with their
-     *        respective data
-     * @param string $request  Request string including the target and an
-     *        optional suggestion of the item to fetch
-     * @param boolean $censor  TRUE to integrate with the Censor plugin,
-     *        defaults to FALSE
-     *
-     * @return boolean TRUE if the request was processed successfully, FALSE
-     *         otherwise
-     */
-    public function serve($database, $table, $format, $request, $censor = false)
-    {
-        // Parse the request
-        $result = preg_match(
-            '/(?P<target>[^\s]+)(\s+an?\s+)?(?P<suggestion>.*)?/',
-            $request,
-            $match
-        );
-
-        if (!$result) {
-            return false;
-        }
-
-        // Resolve the target
-        $target = $match['target'];
-        if ($target == 'me') {
-            $target = $this->event->getNick();
-        }
-
-        // Process the request
-        $item = $this->getItem($database, $table, $match);
-
-        // Reprocess the request for censorship if required
-        if ($this->plugins->hasPlugin('Censor')) {
-            $plugin = $this->plugins->getPlugin('Censor');
-            $attempts = 0;
-            while ($censor && $attempts < 3) {
-                $clean = $plugin->cleanString($item->name);
-                if ($item->name != $clean) {
-                    $attempts++;
-                    $item = $this->getItem($database, $table, $match);
-                } else {
-                    $censor = false;
-                }
-            }
-            if ($censor && $attempts == 3) {
-                $this->doAction($this->event->getSource(), 'shrugs.');
-            }
-        }
-
-        // Derive the proper article for the item
-        if (preg_match('/^[aeiou]/i', $item->name)) {
-            $article = 'an';
-        } else {
-            $article = 'a';
-        }
-
-        // Format the message
-        $replacements = array(
-            'target' => $target,
-            'item' => $item->name,
-            'link' => $item->link,
-            'article' => $article
-        );
-
-        $msg = $format;
-        foreach ($replacements as $placeholder => $value) {
-            $msg = str_replace(
-                '%' . $placeholder . '%',
-                $value,
-                $msg
-            );
-        }
-
-        // Send the message
-        $this->doAction($this->event->getSource(), $msg);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/SpellCheck.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/SpellCheck.php
deleted file mode 100644 (file)
index b731cff..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_TerryChay
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_TerryChay
- */
-
-/**
- * Handles requests for checking spelling of specified words and returning
- * either confirmation of correctly spelled words or potential correct
- * spellings for misspelled words.
- *
- * @category Phergie
- * @package  Phergie_Plugin_SpellCheck
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_TerryChay
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     extension pspell
- */
-class Phergie_Plugin_SpellCheck extends Phergie_Plugin_Abstract
-{
-    /**
-     * Spell check dictionary handler
-     *
-     * @var resource
-     */
-    protected $pspell;
-
-    /**
-     * Limit on the number of potential correct spellings returned
-     *
-     * @var int
-     */
-    protected $limit;
-
-    /**
-     * Check for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('pspell')) {
-            $this->fail('pspell php extension is required');
-        }
-
-        if (!$this->getConfig('spellcheck.lang')) {
-            $this->fail('Setting spellcheck.lang must be filled-in');
-        }
-
-        $this->plugins->getPlugin('Command');
-
-        set_error_handler(array($this, 'loadDictionaryError'));
-        $this->pspell = pspell_new($this->getConfig('spellcheck.lang'));
-        restore_error_handler();
-
-        $this->limit = $this->getConfig('spellcheck.limit', 5);
-    }
-
-    /**
-     * Intercepts and handles requests for spell checks.
-     *
-     * @param string $word the string to perform checks against
-     *
-     * @return void
-     */
-    public function onCommandSpell($word)
-    {
-        $source = $this->event->getSource();
-        $target = $this->event->getNick();
-
-        $message  = $target . ': The word "' . $word;
-        $message .= '" seems to be spelled correctly.';
-        if (!pspell_check($this->pspell, $word)) {
-            $suggestions = pspell_suggest($this->pspell, $word);
-
-            $message  = $target;
-            $message .= ': I could not find any suggestions for "' . $word . '".';
-            if (!empty($suggestions)) {
-                $suggestions = array_splice($suggestions, 0, $this->limit);
-                $message     = $target . ': Suggestions for "';
-                $message    .= $word . '": ' . implode(', ', $suggestions) . '.';
-            }
-        }
-
-        $this->doPrivmsg($source, $message);
-    }
-
-    /**
-     * Handle any errors from loading dictionary
-     *
-     * @param integer $errno   Error code
-     * @param string  $errstr  Error message
-     * @param string  $errfile File that errored
-     * @param integer $errline Line where the error happened
-     *
-     * @return void
-     */
-    protected function loadDictionaryError($errno, $errstr, $errfile, $errline)
-    {
-        $this->fail($errstr);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Statusnet.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Statusnet.php
deleted file mode 100644 (file)
index dc2680a..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php\r
-/**\r
- * StatusNet - the distributed open-source microblogging tool\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- * Talks to the Statusnet IM architecture to enqueue incoming message messages\r
- * and notify result of nickname registration checks\r
- *\r
- * @category  Phergie\r
- * @package   Phergie_Plugin_Statusnet\r
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
- * @copyright 2010 StatusNet, Inc.\r
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
- * @link      http://status.net/\r
- */\r
-\r
-class Phergie_Plugin_Statusnet extends Phergie_Plugin_Abstract {\r
-    /**\r
-    * Message callback details\r
-    *\r
-    * @var array\r
-    */\r
-    protected $messageCallback;\r
-\r
-    /**\r
-    * Registration check callback details\r
-    *\r
-    * @var array\r
-    */\r
-    protected $regCallback;\r
-\r
-    /**\r
-    * Connection established callback details\r
-    *\r
-    * @var array\r
-    */\r
-    protected $connectedCallback;\r
-\r
-    /**\r
-    * Load callback from config\r
-    */\r
-    public function onLoad() {\r
-        $messageCallback = $this->config['statusnet.messagecallback'];\r
-        if (is_callable($messageCallback)) {\r
-            $this->messageCallback = $messageCallback;\r
-        } else {\r
-            $this->messageCallback = NULL;\r
-        }\r
-\r
-        $regCallback = $this->config['statusnet.regcallback'];\r
-        if (is_callable($regCallback)) {\r
-            $this->regCallback = $regCallback;\r
-        } else {\r
-            $this->regCallback = NULL;\r
-        }\r
-\r
-        $connectedCallback = $this->config['statusnet.connectedcallback'];\r
-        if (is_callable($connectedCallback)) {\r
-            $this->connectedCallback = $connectedCallback;\r
-        } else {\r
-            $this->connectedCallback = NULL;\r
-        }\r
-\r
-        $this->unregRegexp = $this->getConfig('statusnet.unregregexp', '/\x02(.*?)\x02 (?:isn\'t|is not) registered/i');\r
-        $this->regRegexp = $this->getConfig('statusnet.regregexp', '/(?:\A|\x02)(\w+?)\x02? (?:\(account|is \w+?\z)/i');\r
-    }\r
-\r
-    /**\r
-     * Passes incoming messages to StatusNet\r
-     *\r
-     * @return void\r
-     */\r
-    public function onPrivmsg() {\r
-        if ($this->messageCallback !== NULL) {\r
-            $event = $this->getEvent();\r
-            $source = $event->getSource();\r
-            $sender = $event->getNick();\r
-            $message = trim($event->getText());\r
-\r
-            if (strpos($source, '#') === 0) {\r
-                $botNick = $this->getConnection()->getNick();\r
-                $nickPos = strpos($message, $botNick);\r
-                $nickLen = strlen($botNick);\r
-                $colonPos = strpos($message, ':', $nickLen);\r
-                $commandStr = trim(substr($message, $colonPos+1));\r
-                if ($nickPos === 0 && $colonPos == $nickLen && !empty($commandStr)) {\r
-                    call_user_func($this->messageCallback, array('source' => $source, 'sender' => $sender, 'message' => $commandStr));\r
-                }\r
-            } else {\r
-                call_user_func($this->messageCallback, array('source' => $source, 'sender' => $sender, 'message' => $message));\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Catches the response from NickServ\r
-     *\r
-     * @return void\r
-     */\r
-    public function onNotice() {\r
-        if ($this->regCallback !== NULL) {\r
-            $event = $this->getEvent();\r
-            if ($event->getNick() == 'NickServ') {\r
-                $message = $event->getArgument(1);\r
-                if (preg_match($this->unregRegexp, $message, $groups)) {\r
-                    $screenname = $groups[1];\r
-                    call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => false));\r
-                } elseif (preg_match($this->regRegexp, $message, $groups)) {\r
-                    $screenname = $groups[1];\r
-                    call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => true));\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Intercepts the end of the "message of the day" response and tells\r
-     * StatusNet we're connected\r
-     *\r
-     * @return void\r
-     */\r
-    public function onResponse() {\r
-        switch ($this->getEvent()->getCode()) {\r
-        case Phergie_Event_Response::RPL_ENDOFMOTD:\r
-        case Phergie_Event_Response::ERR_NOMOTD:\r
-            if ($this->connectedCallback !== NULL) {\r
-                call_user_func($this->connectedCallback);\r
-            }\r
-        }\r
-    }\r
-}\r
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tea.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tea.php
deleted file mode 100644 (file)
index c645356..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Tea
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Tea
- */
-
-/**
- * Processes requests to serve users tea.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Tea
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Tea
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Tea extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user tea.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what tea to serve
-     *
-     * @return void
-     */
-    public function onCommandTea($request)
-    {
-        $format = $this->getConfig(
-            'tea.format',
-            'serves %target% a cup of %item% tea.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Tea/tea.db',
-            'tea',
-            $format,
-            $request
-        );
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tea/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tea/db.php
deleted file mode 100644 (file)
index 21fe195..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-if (!defined('__DIR__')) {
-    define('__DIR__', dirname(__FILE__));
-}
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/tea.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE tea (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX tea_name ON tea (name)');
-$insert = $db->prepare('INSERT INTO tea (name, link) VALUES (:name, :link)');
-
-// Get raw teacuppa.com data set
-echo 'Downloading teacuppa.com data set', PHP_EOL;
-$file = __DIR__ . '/tea-list.html';
-if (!file_exists($file)) {
-    copy('http://www.teacuppa.com/tea-list.asp', $file);
-}
-$contents = file_get_contents($file);
-
-// Extract data from data set
-echo 'Processing teacuppa.com data', PHP_EOL;
-$contents = tidy_repair_string($contents);
-libxml_use_internal_errors(true);
-$doc = new DOMDocument;
-$doc->loadHTML($contents);
-libxml_clear_errors();
-$xpath = new DOMXPath($doc);
-$teas = $xpath->query('//p[@class="page_title"]/following-sibling::table//a');
-$db->beginTransaction();
-foreach ($teas as $tea) {
-    $name = preg_replace(
-        array('/\s*\v+\s*/', '/\s+tea\s*$/i'),
-        array(' ', ''),
-        $tea->textContent
-    );
-    $link = 'http://teacuppa.com/' . $tea->getAttribute('href');
-    $insert->execute(array($name, $link));
-}
-$db->commit();
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unlink($file);
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Temperature.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Temperature.php
deleted file mode 100644 (file)
index 541fd85..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Temperature
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Temperature
- */
-
-/**
- * Performs temperature calculations for other plugins.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Temperature
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Temperature
- */
-class Phergie_Plugin_Temperature extends Phergie_Plugin_Abstract
-{
-    /**
-     * Converts a temperature in Celsius to Fahrenheit.
-     *
-     * @param int $temp Temperature in Celsius
-     *
-     * @return int Temperature converted to Fahrenheit
-     */
-    public function convertCelsiusToFahrenheit($temp)
-    {
-        return round(((((int) $temp * 9) / 5) + 32));
-    }
-
-    /**
-     * Converts a temperature in Fahrenheit to Celsius.
-     *
-     * @param int $temp Temperature in Fahrenheit
-     *
-     * @return int Temperature converted to Celsius
-     */
-    public function convertFahrenheitToCelsius($temp)
-    {
-        return round(((((int) $temp - 32) * 5) / 9));
-    }
-
-    /**
-     * Calculates the heat index (i.e. "feels like" temperature) based on
-     * temperature and relative humidity.
-     *
-     * @param int $temperature Temperature in degrees Fahrenheit
-     * @param int $humidity Relative humidity (ex: 68)
-     * @return int Heat index in degrees Fahrenheit
-     */
-    public function getHeatIndex($temperature, $humidity)
-    {
-        $temperature2 = $temperature * $temperature;
-        $humidity2 = $humidity * $humidity;
-        return round(
-            -42.379 +
-            (2.04901523 * $temperature) +
-            (10.14333127 * $humidity) -
-            (0.22475541 * $temperature * $humidity) -
-            (0.00683783 * $temperature2) -
-            (0.05481717 * $humidity2) +
-            (0.00122874 * $temperature2 * $humidity) +
-            (0.00085282 * $temperature * $humidity2) -
-            (0.00000199 * $temperature2 * $humidity2)
-        );
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/TerryChay.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/TerryChay.php
deleted file mode 100644 (file)
index 246cfc3..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_TerryChay
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_TerryChay
- */
-
-/**
- * Parses incoming messages for the words "Terry Chay" or tychay and responds
- * with a random Terry fact retrieved from the Chayism web service.
- *
- * @category Phergie
- * @package  Phergie_Plugin_TerryChay
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_TerryChay
- * @uses     Phergie_Plugin_Http pear.phergie.org
- */
-class Phergie_Plugin_TerryChay extends Phergie_Plugin_Abstract
-{
-    /**
-     * URL to the web service
-     *
-     * @const string
-     */
-    const URL = 'http://phpdoc.info/chayism/';
-
-    /**
-     * HTTP plugin
-     *
-     * @var Phergie_Plugin_Http
-     */
-    protected $http;
-
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $this->getPluginHandler()->getPlugin('Http');
-    }
-
-    /**
-     * Fetches a chayism.
-     *
-     * @return string|bool Fetched chayism or FALSE if the operation failed
-     */
-    public function getChayism()
-    {
-        return $this
-            ->getPluginHandler()
-            ->getPlugin('Http')
-            ->get(self::URL)
-            ->getContent();
-    }
-
-    /**
-     * Parses incoming messages for "Terry Chay" and related variations and
-     * responds with a chayism.
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $event = $this->getEvent();
-        $source = $event->getSource();
-        $message = $event->getText();
-        $pattern
-            = '{^(' . preg_quote($this->getConfig('command.prefix')) .
-            '\s*)?.*(terry\s+chay|tychay)}ix';
-
-        if (preg_match($pattern, $message)) {
-            if($fact = $this->getChayism()) {
-                $this->doPrivmsg($source, 'Fact: ' . $fact);
-            }
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/TheFuckingWeather.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/TheFuckingWeather.php
deleted file mode 100644 (file)
index 8559426..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_TheFuckingWeather
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_TheFuckingWeather
- */
-
-/**
- * Detects and responds to requests for current weather conditions in a
- * particular location using data from a web service.
- *
- * @category Phergie
- * @package  Phergie_Plugin_TheFuckingWeather
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_TheFuckingWeather
- * @link     http://thefuckingweather.com
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- */
-
-class Phergie_Plugin_TheFuckingWeather extends Phergie_Plugin_Abstract
-{
-    /**
-     * HTTP plugin
-     *
-     * @var Phergie_Plugin_Http
-     */
-    protected $http = null;
-
-    /**
-     * Base API URL
-     *
-     * @var string
-     */
-    protected $url = 'http://www.thefuckingweather.com/?zipcode=';
-
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $pluginHandler = $this->getPluginHandler();
-        $pluginHandler->getPlugin('Command');
-        $this->http = $pluginHandler->getPlugin('Http');
-    }
-
-    /**
-     * Returns the weather from the specified location.
-     *
-     * @param string $location Location term
-     *
-     * @return void
-     * @todo Implement use of URL shortening here
-     */
-    public function onCommandThefuckingweather($location)
-    {
-        $source = $this->getEvent()->getSource();
-        $target = $this->getEvent()->getNick();
-        $out = $this->getWeather($location);
-        if (!$out) {
-            $this->doNotice($source, $out);
-        } else {
-            $this->doPrivmsg($source, $target . ': ' . $out);
-        }
-    }
-
-    /**
-    * Alias for TheFuckingWeather command.
-    *
-    * @param string $location Location term
-    *
-    * @return void
-    */
-    public function onCommandTfw($location)
-    {
-        $this->onCommandThefuckingweather($location);
-    }
-
-    /**
-     * Get the necessary content and returns the search result.
-     *
-     * @param string $location Location term
-     *
-     * @return string|bool Search result or FALSE if none is found
-     * @todo Try to optimize pregs
-     */
-    protected function getWeather($location)
-    {
-        $url = $this->url . urlencode($location);
-        $response = $this->http->get($url);
-        $content = $response->getContent();
-
-        preg_match_all(
-            '#<div><span class="small">(.*?)<\/span><\/div>#im',
-            $content, $matches
-        );
-        $location = $matches[1][0];
-
-        if (!empty($location)) {
-            preg_match_all(
-                '#<div class="large" >(.*?)<br \/>#im',
-                $content, $matches
-            );
-            $temp_numb = (int) $matches[1][0];
-            $temp_numb .= ' F / ' . round(($temp_numb - 32) / 1.8, 0) . ' C?!';
-
-            preg_match_all(
-                '#<br \/>(.*?)<\/div><div  id="remark"><br \/>#im',
-                $content, $matches
-            );
-            $temp_desc = $matches[1][0];
-
-            preg_match_all(
-                '#<div  id="remark"><br \/>\n<span>(.*?)<\/span><\/div>#im',
-                $content, $matches
-            );
-            $remark = $matches[1][0];
-
-            $result = "{$location}: {$temp_numb} {$temp_desc} ({$remark})";
-            $result = preg_replace('/</', ' <', $result);
-            $result = strip_tags($result);
-            return html_entity_decode($result);
-        } else {
-            return 'No fucking clue where that is.';
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Time.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Time.php
deleted file mode 100644 (file)
index 0d90bd8..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Time
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Time
- */
-
-/**
- * Helper plugin to assist other plugins with time manipulation, display.
- *
- * Any shared time-related code should go into this class.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Time
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Time
- */
-class Phergie_Plugin_Time extends Phergie_Plugin_Abstract 
-{
-    /**
-     * Returns the time interval between the current time and a given 
-     * timestamp. 
-     *
-     * @param string $timestamp Timestamp compatible with strtotime()
-     *
-     * @return string
-     */
-    public function getCountdown($timestamp)
-    {
-        $time = time() - strtotime($timestamp); 
-        $return = array();
-
-        $days = floor($time / 86400);
-        if ($days > 0) {
-            $return[] = $days . 'd';
-            $time %= 86400;
-        }
-
-        $hours = floor($time / 3600);
-        if ($hours > 0) {
-            $return[] = $hours . 'h';
-            $time %= 3600;
-        }
-
-        $minutes = floor($time / 60);
-        if ($minutes > 0) {
-            $return[] = $minutes . 'm';
-            $time %= 60;
-        }
-
-        if ($time > 0 || count($return) <= 0) {
-            $return[] = ($time > 0 ? $time : '0') . 's';
-        }
-
-        return implode(' ', $return);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php
deleted file mode 100644 (file)
index d7d64a4..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Url
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Url
- */
-
-/**
- * Responds to a request for a TLD (formatted as .tld where tld is the TLD to
- * be looked up) with its corresponding description.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Tld
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Tld
- * @uses     extension PDO
- * @uses     extension pdo_sqlite
- */
-class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
-{
-    /**
-     * Connection to the database
-     *
-     * @var PDO
-     */
-    protected $db;
-
-    /**
-     * Prepared statement for selecting a single TLD
-     *
-     * @var PDOStatement
-     */
-    protected $select;
-
-    /**
-     * Prepared statement for selecting all TLDs
-     *
-     * @var PDOStatement
-     */
-    protected $selectAll;
-
-    /**
-     * Checks for dependencies and sets up the database and hard-coded values.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->fail('PDO and pdo_sqlite extensions must be installed');
-        }
-
-        $dbFile = dirname(__FILE__) . '/Tld/tld.db';
-        try {
-            $this->db = new PDO('sqlite:' . $dbFile);
-
-            $this->select = $this->db->prepare('
-                SELECT type, description
-                FROM tld
-                WHERE LOWER(tld) = LOWER(:tld)
-            ');
-
-            $this->selectAll = $this->db->prepare('
-                SELECT tld, type, description
-                FROM btld
-            ');
-        } catch (PDOException $e) {
-            $this->getPluginHandler()->removePlugin($this);
-        }
-    }
-
-    /**
-     * takes a tld in the format '.tld' and returns its related data
-     *
-     * @param string $tld tld to process
-     *
-     * @return null
-     */
-    public function onCommandTld($tld)
-    {
-        $tld = ltrim($tld, '.');
-        $description = $this->getTld($tld);
-        $this->doPrivmsg(
-            $this->event->getSource(),
-            "{$this->getEvent()->getNick()}: .{$tld} -> "
-            . ($description ? $description : 'Unknown TLD')
-        );
-    }
-
-    /**
-     * Retrieves the definition for a given TLD if it exists
-     *
-     * @param string $tld TLD to search for
-     *
-     * @return mixed Definition of the given TLD as a string or false if unknown
-     */
-    public function getTld($tld)
-    {
-        $tld = trim(strtolower($tld));
-        if ($this->select->execute(array('tld' => $tld))) {
-            $tlds = $this->select->fetch();
-            if (is_array($tlds)) {
-                return '(' . $tlds['type'] . ') ' . $tlds['description'];
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Retrieves a list of all the TLDs and their definitions
-     *
-     * @return mixed Array of all the TLDs and their definitions or FALSE on
-      *        failure
-     */
-    public function getTlds()
-    {
-        if ($this->selectAll->execute()) {
-            $tlds = $this->selectAll->fetchAll();
-            if (is_array($tlds)) {
-                $tldinfo = array();
-                foreach ($tlds as $key => $tld) {
-                    if (!empty($tld['tld'])) {
-                        $tldinfo[$tld['tld']] = "({$tld['type']}) "
-                        . $tld['description'];
-                    }
-                }
-                return $tldinfo;
-            }
-        }
-        return false;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php
deleted file mode 100644 (file)
index 28f963a..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-$dbFile = 'tld.db';
-
-if (file_exists($dbFile)) {
-    exit;
-}
-
-$db = new PDO('sqlite:' . dirname(__FILE__) . '/' . $dbFile);
-
-$query = '
-    CREATE TABLE tld (
-        tld VARCHAR(20),
-        type VARCHAR(20),
-        description VARCHAR(255)
-    )
-';
-$db->exec($query);
-
-$insert = $db->prepare('
-    INSERT INTO tld (tld, type, description)
-    VALUES (:tld, :type, :description)
-');
-
-$contents = file_get_contents(
-    'http://www.iana.org/domains/root/db/'
-);
-
-libxml_use_internal_errors(true);
-$doc = new DOMDocument;
-$doc->loadHTML($contents);
-libxml_clear_errors();
-
-$descriptions = array(
-    'com' => 'Commercial',
-    'info' => 'Information',
-    'net' => 'Network',
-    'org' => 'Organization',
-    'edu' => 'Educational',
-    'name' => 'Individuals, by name'
-);
-
-$xpath = new DOMXPath($doc);
-$rows = $xpath->query('//tr[contains(@class, "iana-group")]');
-foreach (range(0, $rows->length - 1) as $index) {
-    $row = $rows->item($index);
-    $tld = strtolower(ltrim($row->childNodes->item(0)->textContent, '.'));
-    $type = $row->childNodes->item(1)->nodeValue;
-    if (isset($descriptions[$tld])) {
-        $description = $descriptions[$tld];
-    } else {
-        $description = $row->childNodes->item(2)->textContent;
-        $regex = '{(^(?:Reserved|Restricted)\s*(?:exclusively\s*)?'
-         . '(?:for|to)\s*(?:members of\s*)?(?:the|support)?'
-         . '\s*|\s*as advised.*$)}i';
-        $description = preg_replace($regex, '', $description);
-        $description = ucfirst(trim($description));
-    }
-    $data = array_map(
-        'html_entity_decode',
-        array(
-            'tld' => $tld,
-            'type' => $type,
-            'description' => $description
-        )
-    );
-    $insert->execute($data);
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php
deleted file mode 100644 (file)
index 4a77d1e..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Twitter
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Twitter
- */
-
-/**
- * These requires are for library code, so they don't fit Autoload's normal
- * conventions.
- *
- * @link http://github.com/scoates/simpletweet
- */
-require dirname(__FILE__) . '/Twitter/twitter.class.php';
-require dirname(__FILE__) . '/Twitter/laconica.class.php';
-
-/**
- * Twitter plugin; Allows tweet (if configured) and twitter commands
- *
- * Usage:
- *   tweet text to tweet
- *    (sends a message to twitter and Phergie will give you the link)
- *   twitter username
- *    (fetches and displays the last tweet by @username)
- *   twitter username 3
- *    (fetches and displays the third last tweet by @username)
- *   twitter 1234567
- *    (fetches and displays tweet number 1234567)
- *   http://twitter.com/username/statuses/1234567
- *    (same as `twitter 1234567`)
- *
- * @category Phergie
- * @package  Phergie_Plugin_Twitter
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Twitter
- * @uses     Phergie_Plugin_Time pear.phergie.org
- */
-class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract
-{
-    /**
-     * Twitter object (from Simpletweet)
-     */
-    protected $twitter;
-
-    /**
-     * Twitter user
-     */
-    protected $twitteruser = null;
-
-    /**
-     * Password
-     */
-    protected $twitterpassword = null;
-
-    /**
-     * Register with the URL plugin, if possible
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
-        if ($url = $this->getPluginHandler()->getPlugin('Url')) {
-            $url->registerRenderer($this);
-        }
-    }
-
-    /**
-     * Initialize (set up configuration vars)
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        if (!isset($this->config['twitter.class'])
-            || !$twitterClass = $this->config['twitter.class']
-        ) {
-            $twitterClass = 'Twitter';
-        }
-
-        $this->twitteruser = $this->config['twitter.user'];
-        $this->twitterpassword = $this->config['twitter.password'];
-        $url = $this->config['twitter.url'];
-
-        $this->twitter = new $twitterClass(
-            $this->twitteruser,
-            $this->twitterpassword,
-            $url
-        );
-
-    }
-
-    /**
-     * Fetches the associated tweet and relays it to the channel
-     *
-     * @param string $tweeter if numeric the tweet number/id, otherwise the
-     *  twitter user name (optionally prefixed with @)
-     * @param int    $num     optional tweet number for this user (number of
-     *  tweets ago)
-     *
-     * @return void
-     */
-    public function onCommandTwitter($tweeter = null, $num = 1)
-    {
-        $source = $this->getEvent()->getSource();
-        if (is_numeric($tweeter)) {
-            $tweet = $this->twitter->getTweetByNum($tweeter);
-        } else if (is_null($tweeter) && $this->twitteruser) {
-            $tweet = $this->twitter->getLastTweet($this->twitteruser, 1);
-        } else {
-            $tweet = $this->twitter->getLastTweet(ltrim($tweeter, '@'), $num);
-        }
-        if ($tweet) {
-            $this->doPrivmsg($source, $this->formatTweet($tweet));
-        }
-    }
-
-    /**
-     * Sends a tweet to Twitter as the configured user
-     *
-     * @param string $txt the text to tweet
-     *
-     * @return void
-     */
-    public function onCommandTweet($txt)
-    {
-        $nick = $this->getEvent()->getNick();
-        if (!$this->twitteruser) {
-            return;
-        }
-        $source = $this->getEvent()->getSource();
-        if ($tweet = $this->twitter->sendTweet($txt)) {
-            $this->doPrivmsg(
-                $source, 'Tweeted: '
-                . $this->twitter->getUrlOutputStatus($tweet)
-            );
-        } else {
-            $this->doNotice($nick, 'Tweet failed');
-        }
-    }
-
-    /**
-     * Formats a Tweet into a message suitable for output
-     *
-     * @param object $tweet      JSON-decoded tweet object from Twitter
-     * @param bool   $includeUrl whether or not to include the URL in the
-     *  formatted output
-     *
-     * @return string
-     */
-    protected function formatTweet(StdClass $tweet, $includeUrl = true)
-    {
-        $ts = $this->plugins->time->getCountDown($tweet->created_at);
-        $out =  '<@' . $tweet->user->screen_name .'> '. $tweet->text
-            . ' - ' . $ts . ' ago';
-        if ($includeUrl) {
-            $out .= ' (' . $this->twitter->getUrlOutputStatus($tweet) . ')';
-        }
-        return $out;
-    }
-
-    /**
-     * Renders a URL
-     *
-     * @param array $parsed parse_url() output for the URL to render
-     *
-     * @return bool
-     */
-    public function renderUrl(array $parsed)
-    {
-        if ($parsed['host'] != 'twitter.com'
-            && $parsed['host'] != 'www.twitter.com'
-        ) {
-            // unable to render non-twitter URLs
-            return false;
-        }
-
-        $source = $this->getEvent()->getSource();
-
-        if (preg_match('#^/(.*?)/status(es)?/([0-9]+)$#', $parsed['path'], $matches)
-        ) {
-            $tweet = $this->twitter->getTweetByNum($matches[3]);
-            if ($tweet) {
-                $this->doPrivmsg($source, $this->formatTweet($tweet, false));
-            }
-            return true;
-        }
-
-        // if we get this far, we haven't satisfied the URL, so bail:
-        return false;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/laconica.class.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/laconica.class.php
deleted file mode 100644 (file)
index e411991..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Sean's Simple Twitter Library - Laconica extension
- *
- * Copyright 2008, Sean Coates
- * Usage of the works is permitted provided that this instrument is retained
- * with the works, so that any entity that uses the works is notified of this
- * instrument.
- * DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
- * ( Fair License - http://www.opensource.org/licenses/fair.php )
- * Short license: do whatever you like with this.
- * 
- */
-class Twitter_Laconica extends Twitter {
-
-    /**
-     * Constructor; sets up configuration.
-     * 
-     * @param string $user Laconica user name; null for limited read-only access
-     * @param string $pass Laconica password; null for limited read-only access
-     * @param string $baseUrl Base URL of Laconica install. Defaults to identi.ca
-     */
-    public function __construct($user=null, $pass=null, $baseUrl = 'http://identi.ca/') {
-        $this->baseUrl = $baseUrl;
-        parent::__construct($user, $pass);
-    }
-    
-    /**
-     * Returns the base API URL
-     */
-    protected function getUrlApi() {
-        return $this->baseUrlFull . 'api/';
-    }
-    
-    /**
-     * Output URL: status
-     */
-    public function getUrlOutputStatus(StdClass $tweet) {
-        return $this->baseUrl . 'notice/' . urlencode($tweet->id);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/twitter.class.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter/twitter.class.php
deleted file mode 100644 (file)
index 31173a6..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-/**
- * Sean's Simple Twitter Library
- *
- * Probably a little more or a little less than you need.
- *
- * Copyright 2008, Sean Coates
- * Usage of the works is permitted provided that this instrument is retained
- * with the works, so that any entity that uses the works is notified of this
- * instrument.
- * DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
- * ( Fair License - http://www.opensource.org/licenses/fair.php )
- * Short license: do whatever you like with this.
- *
- * komode: le=unix language=php codepage=utf8 tab=4 notabs indent=4
- */
-class Twitter {
-
-    /**
-     * Base URL for Twitter API
-     *
-     * Do not specify user/password in URL
-     */
-    protected $baseUrl = 'http://twitter.com/';
-    
-    /**
-     * Full base URL (includes user/pass)
-     *
-     * (created in Init)
-     */
-    protected $baseUrlFull = null;
-    
-    /**
-     * Twitter API user
-     */
-    protected $user;
-    
-    /**
-     * Twitter API password
-     */
-    protected $pass;
-    
-    /**
-     * Constructor; sets up configuration.
-     * 
-     * @param string $user Twitter user name; null for limited read-only access
-     * @param string $pass Twitter password; null for limited read-only access
-     */
-    public function __construct($user=null, $pass=null) {
-        $this->baseUrlFull = $this->baseUrl;
-        if (null !== $user) {
-            // user is defined, so use it in the URL
-            $this->user = $user;
-            $this->pass = $pass;
-            $parsed = parse_url($this->baseUrl);
-            $this->baseUrlFull = $parsed['scheme'] . '://' . $this->user . ':' .
-                $this->pass . '@' . $parsed['host'];
-            // port (optional)
-            if (isset($parsed['port']) && is_numeric($parsed['port'])) {
-                $this->baseUrlFull .= ':' . $parsed['port'];
-            }
-            // append path (default: /)
-            if (isset($parsed['path'])) {
-                $this->baseUrlFull .= $parsed['path'];
-            } else {
-                $this->baseUrlFull .= '/';
-            }
-        }
-    }
-
-    /**
-     * Fetches a tweet by its number/id
-     *
-     * @param int $num the tweet id/number
-     * @return string (null on failure)
-     */
-    public function getTweetByNum($num) {
-        if (!is_numeric($num)) {
-            return;
-        }
-        $tweet = json_decode(file_get_contents($this->getUrlStatus($num)));
-        return $tweet;
-    }
-
-    /**
-     * Reads [last] tweet from user
-     *
-     * @param string $tweeter the tweeter username
-     * @param int $num this many tweets ago (1 = current tweet)
-     * @return string (false on failure)
-     */
-    public function getLastTweet($tweeter, $num = 1)
-    {
-        $source = json_decode(file_get_contents($this->getUrlUserTimeline($tweeter)));
-        if ($num > count($source)) {
-            return false;
-        }
-        $tweet = $source[$num - 1];
-        if (!isset($tweet->user->screen_name) || !$tweet->user->screen_name) {
-            return false;
-        }
-        return $tweet;
-    }
-    
-    /**
-     * fetches mentions for a user
-     */
-    public function getMentions($sinceId=null, $count=20) {
-        return json_decode(file_get_contents($this->getUrlMentions($sinceId, $count)));
-    }
-    
-    /**
-     * Fetches followers for a user
-     */
-    public function getFollowers($cursor=-1) {
-        return json_decode(file_get_contents($this->getUrlFollowers($cursor)));
-    }
-    
-    /**
-     * Follow a userid
-     */
-    public function follow($userId) {
-        $params = array(
-            'http' => array(
-                'method' => 'POST',
-                'content' => array(),
-                'header' => 'Content-type: application/x-www-form-urlencoded',
-            )
-        );
-        $ctx = stream_context_create($params);
-        $fp = fopen($this->getUrlFollow($userId), 'rb', false, $ctx);
-        if (!$fp) {
-            return false;
-        }
-        $response = stream_get_contents($fp);
-        if ($response === false) {
-            return false;
-        }
-        $response = json_decode($response);
-        return $response;
-    }
-    
-    /**
-     * fetches DMs for a user
-     */
-    public function getDMs($sinceId=null, $count=20, $page=1) {
-        return json_decode(file_get_contents($this->getUrlDMs($sinceId, $count, $page)));
-    }
-    
-    /**
-     * Send DM
-     */
-    public function sendDM($screenName, $text) {
-        $data = http_build_query(array('screen_name'=>$screenName, 'text'=>$text));
-        $params = array(
-            'http' => array(
-                'method' => 'POST',
-                'content' => $data,
-                'header' => 'Content-type: application/x-www-form-urlencoded',
-            )
-        );
-        $ctx = stream_context_create($params);
-        $fp = fopen($this->getUrlSendDM(), 'rb', false, $ctx);
-        if (!$fp) {
-            return false;
-        }
-        $response = stream_get_contents($fp);
-        if ($response === false) {
-            return false;
-        }
-        $response = json_decode($response);
-        return $response;
-    }
-
-    /**
-     * Sends a tweet
-     *
-     * @param string $txt the tweet text to send
-     * @return string URL of tweet (or false on failure)
-     */
-    public function sendTweet($txt, $limit=true) {
-        if ($limit) {
-            $txt = substr($txt, 0, 140); // twitter message size limit
-        }
-        $data = 'status=' . urlencode($txt);
-        $params = array(
-            'http' => array(
-                'method' => 'POST',
-                'content' => $data,
-                'header' => 'Content-type: application/x-www-form-urlencoded',
-            )
-        );
-        $ctx = stream_context_create($params);
-        $fp = fopen($this->getUrlTweetPost(), 'rb', false, $ctx);
-        if (!$fp) {
-            return false;
-        }
-        $response = stream_get_contents($fp);
-        if ($response === false) {
-            return false;
-        }
-        $response = json_decode($response);
-        return $response;
-    }
-    
-    /**
-     * Returns the base API URL
-     */
-    protected function getUrlApi() {
-        return $this->baseUrlFull;
-    }
-    
-    /**
-     * Returns the status URL
-     *
-     * @param int $num the tweet number
-     */
-    protected function getUrlStatus($num) {
-        return $this->getUrlApi() . 'statuses/show/'. urlencode($num) .'.json';
-    }
-    
-    /**
-     * Returns the user timeline URL
-     */
-    protected function getUrlUserTimeline($user) {
-        return $this->getUrlApi() . 'statuses/user_timeline/'. urlencode($user) .'.json';
-    }
-    
-    /**
-     * Returns the tweet posting URL
-     */
-    protected function getUrlTweetPost() {
-        return $this->getUrlApi() . 'statuses/update.json';
-    }
-    
-    /**
-     * Output URL: status
-     */
-    public function getUrlOutputStatus(StdClass $tweet) {
-        return $this->baseUrl . urlencode($tweet->user->screen_name) . '/statuses/' . urlencode($tweet->id);
-    }
-    
-    /**
-     * Return mentions URL
-     */
-    public function getUrlMentions($sinceId=null, $count=20) {
-        $url = $this->baseUrlFull . 'statuses/mentions.json?count=' . urlencode($count);
-        if ($sinceId !== null) {
-            $url .= '&since_id=' . urlencode($sinceId);
-        }
-        return $url;
-    }
-    
-    /**
-     * Returns the followers URL
-     */
-    public function getUrlFollowers($cursor=-1) {
-        return $this->baseUrlFull . 'statuses/followers.json?cursor=' . ((int)$cursor);
-    }
-    
-    /**
-     * Returns the follow-user URL
-     */
-    public function getUrlFollow($userid) {
-        return $this->baseUrlFull . 'friendships/create/' . ((int) $userid) . '.json';
-    }
-    
-    /**
-     * Returns the get DMs URL
-     */
-    public function getUrlDMs($sinceId=null, $count=20, $page=1) {
-        $url = $this->baseUrlFull . 'direct_messages.json?';
-        if ($sinceId !== null) {
-            $url .= 'since_id=' . urlencode($sinceId);
-        }
-        $url .= "&page={$page}";
-        $url .= "&count={$count}";
-        return $url;
-    }
-
-    /**
-     * Returns the send DM URL
-     */
-    public function getURLSendDM() {
-        return $this->baseUrlFull . 'direct_messages/new.json';
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Url.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Url.php
deleted file mode 100644 (file)
index bac115b..0000000
+++ /dev/null
@@ -1,638 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Url
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Url
- */
-
-/**
- * Monitors incoming messages for instances of URLs and responds with messages
- * containing relevant information about detected URLs.
- *
- * Has an utility method accessible via
- * $this->getPlugin('Url')->getTitle('http://foo..').
- *
- * @category Phergie
- * @package  Phergie_Plugin_Url
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Url
- * @uses     Phergie_Plugin_Encoding pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- * @uses     Phergie_Plugin_Tld pear.phergie.org
- */
-class Phergie_Plugin_Url extends Phergie_Plugin_Abstract
-{
-    /**
-     * Links output format
-     *
-     * Can use the variables %nick%, %title% and %link% in it to display
-     * page titles and links
-     *
-     * @var string
-     */
-    protected $baseFormat = '%message%';
-    protected $messageFormat = '[ %link% ] %title%';
-
-    /**
-     * Flag indicating whether a single response should be sent for a single
-     * message containing multiple links
-     *
-     * @var bool
-     */
-    protected $mergeLinks = true;
-
-    /**
-     * Max length of the fetched URL title
-     *
-     * @var int
-     */
-    protected $titleLength = 40;
-
-    /**
-     * Url cache to prevent spamming, especially with multiple bots on the
-     * same channel
-     *
-     * @var array
-     */
-    protected $urlCache = array();
-    protected $shortCache = array();
-
-    /**
-     * Time in seconds to store the cached entries
-     *
-     * Setting it to 0 or below disables the cache expiration
-     *
-     * @var int
-     */
-    protected $expire = 1800;
-
-    /**
-     * Number of entries to keep in the cache at one time per channel
-     *
-     * Setting it to 0 or below disables the cache limit
-     *
-     * @var int
-     */
-    protected $limit = 10;
-
-    /**
-     * Flag that determines if the plugin will fall back to using an HTTP
-     * stream when a URL using SSL is detected and OpenSSL support isn't
-     * available in the PHP installation in use
-     *
-     * @var bool
-     */
-    protected $sslFallback = true;
-
-    /**
-     * Flag that is set to true by the custom error handler if an HTTP error
-     * code has been received
-     *
-     * @var boolean
-     */
-    protected $errorStatus = false;
-    protected $errorMessage = null;
-
-    /**
-     * Flag indicating whether or not to display error messages as the title
-     * if a link posted encounters an error
-     *
-     * @var boolean
-     */
-    protected $showErrors = true;
-
-    /**
-     * Flag indicating whether to detect schemeless URLS (i.e. "example.com")
-     *
-     * @var boolean
-     */
-    protected $detectSchemeless = false;
-
-    /**
-     * Shortener object
-     */
-    protected $shortener;
-
-    /**
-     * Array of renderers
-     */
-    protected $renderers = array();
-
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Encoding');
-        $plugins->getPlugin('Http');
-        $plugins->getPlugin('Tld');
-
-        // make the shortener configurable
-        $shortener = $this->getConfig('url.shortener', 'Trim');
-        $shortener = "Phergie_Plugin_Url_Shorten_{$shortener}";
-        $this->shortener = new $shortener($this->plugins->getPlugin('Http'));
-
-        if (!$this->shortener instanceof Phergie_Plugin_Url_Shorten_Abstract) {
-            $this->fail("Declared shortener class {$shortener} is not of proper ancestry");
-        }
-
-        // load config (a bit ugly, but focusing on porting):
-        foreach (
-            array(
-                'detect_schemeless' => 'detectSchemeless',
-                'base_format' => 'baseFormat',
-                'message_format' => 'messageFormat',
-                'merge_links' => 'mergeLinks',
-                'title_length' => 'titleLength',
-                'show_errors' => 'showErrors',
-                'expire' => 'expire',
-            ) as $config => $local) {
-            if (isset($this->config["url.{$config}"])) {
-                $this->$local = $this->config["uri.{$config}"];
-            }
-        }
-    }
-
-    /**
-     * Checks an incoming message for the presence of a URL and, if one is
-     * found, responds with its title if it is an HTML document and the
-     * shortened equivalent of its original URL if it meets length requirements.
-     *
-     * @todo Update this to pull configuration settings from $this->config
-     *       rather than caching them as class properties
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        $this->handleMsg();
-    }
-
-    /**
-     * Checks an incoming message for the presence of a URL and, if one is
-     * found, responds with its title if it is an HTML document and the
-     * shortened equivalent of its original URL if it meets length requirements.
-     *
-     * @todo Update this to pull configuration settings from $this->config
-     *       rather than caching them as class properties
-     * @return void
-     */
-    public function onAction()
-    {
-        $this->handleMsg();
-    }
-
-    /**
-     * Handles message events and responds with url titles.
-     *
-     * @return void
-     */
-    protected function handleMsg()
-    {
-        $source = $this->getEvent()->getSource();
-        $user = $this->getEvent()->getNick();
-
-        $responses = array();
-        $urls = $this->findUrls($this->getEvent()->getArgument(1));
-
-        foreach ($urls as $parsed) {
-            $url = $parsed['glued'];
-
-            // allow out-of-class renderers to handle this URL
-            foreach ($this->renderers as $renderer) {
-                if ($renderer->renderUrl($parsed) === true) {
-                    // renderers should return true if they've fully
-                    // rendered the passed URL (they're responsible
-                    // for their own output)
-                    $this->debug('Handled by renderer: ' . get_class($renderer));
-                    continue 2;
-                }
-            }
-
-            // Convert url
-            $shortenedUrl = $this->shortener->shorten($url);
-            if (!$shortenedUrl) {
-                $this->debug('Invalid Url: Unable to shorten. (' . $url . ')');
-                $shortenedUrl = $url;
-            }
-
-            // Prevent spamfest
-            if ($this->checkUrlCache($url, $shortenedUrl)) {
-                $this->debug('Invalid Url: URL is in the cache. (' . $url . ')');
-                continue;
-            }
-
-            $title = $this->getTitle($url);
-            if (!empty($title)) {
-                $responses[] = str_replace(
-                    array(
-                        '%title%',
-                        '%link%',
-                        '%nick%'
-                    ), array(
-                        $title,
-                        $shortenedUrl,
-                        $user
-                    ), $this->messageFormat
-                );
-            }
-
-            // Update cache
-            $this->updateUrlCache($url, $shortenedUrl);
-            unset($title, $shortenedUrl, $title);
-        }
-
-        // Check to see if there were any URL responses, format them and handle if they
-        // get merged into one message or not
-        if (count($responses) > 0) {
-            if ($this->mergeLinks) {
-                $message = str_replace(
-                    array(
-                        '%message%',
-                        '%nick%'
-                    ), array(
-                        implode('; ', $responses),
-                        $user
-                    ), $this->baseFormat
-                );
-                $this->doPrivmsg($source, $message);
-            } else {
-                foreach ($responses as $response) {
-                    $message = str_replace(
-                        array(
-                            '%message%',
-                            '%nick%'
-                        ), array(
-                            implode('; ', $responses),
-                            $user
-                        ), $this->baseFormat
-                    );
-                    $this->doPrivmsg($source, $message);
-                }
-            }
-        }
-    }
-
-    /**
-     * Detect URLs in a given string.
-     *
-     * @param string $message the string to detect urls in
-     *
-     * @return array the array of urls found
-     */
-    public function findUrls($message)
-    {
-        $pattern = '#'.($this->detectSchemeless ? '' : 'https?://').'(?:([0-9]{1,3}(?:\.[0-9]{1,3}){3})(?![^/]) | ('
-            .($this->detectSchemeless ? '(?<!http:/|https:/)[@/\\\]' : '').')?(?:(?:[a-z0-9_-]+\.?)+\.[a-z0-9]{1,6}))[^\s]*#xis';
-        $urls = array();
-
-        // URL Match
-        if (preg_match_all($pattern, $message, $matches, PREG_SET_ORDER)) {
-            foreach ($matches as $m) {
-                $url = trim(rtrim($m[0], ', ].?!;'));
-
-                // Check to see if the URL was from an email address, is a directory, etc
-                if (!empty($m[2])) {
-                    $this->debug('Invalid Url: URL is either an email or a directory path. (' . $url . ')');
-                    continue;
-                }
-
-                // Parse the given URL
-                if (!$parsed = $this->parseUrl($url)) {
-                    $this->debug('Invalid Url: Could not parse the URL. (' . $url . ')');
-                    continue;
-                }
-
-                // Check to see if the given IP/Host is valid
-                if (!empty($m[1]) and !$this->checkValidIP($m[1])) {
-                    $this->debug('Invalid Url: ' . $m[1] . ' is not a valid IP address. (' . $url . ')');
-                    continue;
-                }
-
-                // Process TLD if it's not an IP
-                if (empty($m[1])) {
-                    // Get the TLD from the host
-                    $pos = strrpos($parsed['host'], '.');
-                    $parsed['tld'] = ($pos !== false ? substr($parsed['host'], ($pos+1)) : '');
-
-                    // Check to see if the URL has a valid TLD
-                    if ($this->plugins->tld->getTld($parsed['tld']) === false) {
-                        $this->debug('Invalid Url: ' . $parsed['tld'] . ' is not a supported TLD. (' . $url . ')');
-                        continue;
-                    }
-                }
-
-                // Check to see if the URL is to a secured site or not and handle it accordingly
-                if ($parsed['scheme'] == 'https' && !extension_loaded('openssl')) {
-                    if (!$this->sslFallback) {
-                        $this->debug('Invalid Url: HTTPS is an invalid scheme, OpenSSL isn\'t available. (' . $url . ')');
-                        continue;
-                    } else {
-                        $parsed['scheme'] = 'http';
-                    }
-                }
-
-                if (!in_array($parsed['scheme'], array('http', 'https'))) {
-                    $this->debug('Invalid Url: ' . $parsed['scheme'] . ' is not a supported scheme. (' . $url . ')');
-                    continue;
-                }
-
-                $urls[] = $parsed + array('glued' => $this->glueURL($parsed));
-            }
-        }
-
-        return $urls;
-    }
-
-    /**
-     * Checks a given URL (+shortened) against the cache to verify if they were
-     * previously posted on the channel.
-     *
-     * @param string $url          The URL to check against
-     * @param string $shortenedUrl The shortened URL to check against
-     *
-     * @return bool
-     */
-    protected function checkUrlCache($url, $shortenedUrl)
-    {
-        $source = $this->getEvent()->getSource();
-
-        /**
-         * Transform the URL (+shortened) into a HEX CRC32 checksum to prevent potential problems
-         * and minimize the size of the cache for less cache bloat.
-         */
-        $url = $this->getUrlChecksum($url);
-        $shortenedUrl = $this->getUrlChecksum($shortenedUrl);
-
-        $cache = array(
-            'url' => isset($this->urlCache[$source][$url]) ? $this->urlCache[$source][$url] : null,
-            'shortened' => isset($this->shortCache[$source][$shortenedUrl]) ? $this->shortCache[$source][$shortenedUrl] : null
-        );
-
-        $expire = $this->expire;
-        $this->debug("Cache expire: {$expire}");
-        /**
-         * If cache expiration is enabled, check to see if the given url has expired in the cache
-         * If expire is disabled, simply check to see if the url is listed
-         */
-        if (($expire > 0 && (($cache['url'] + $expire) > time() || ($cache['shortened'] + $expire) > time()))
-            || ($expire <= 0 && (isset($cache['url']) || isset($cache['shortened'])))
-        ) {
-            unset($cache, $url, $shortenedUrl, $expire);
-            return true;
-        }
-        unset($cache, $url, $shortenedUrl, $expire);
-        return false;
-    }
-
-    /**
-     * Updates the cache and adds the given URL (+shortened) to the cache. It
-     * also handles cleaning the cache of old entries as well.
-     *
-     * @param string $url          The URL to add to the cache
-     * @param string $shortenedUrl The shortened to add to the cache
-     *
-     * @return bool
-     */
-    protected function updateUrlCache($url, $shortenedUrl)
-    {
-        $source = $this->getEvent()->getSource();
-
-        /**
-         * Transform the URL (+shortened) into a HEX CRC32 checksum to prevent potential problems
-         * and minimize the size of the cache for less cache bloat.
-         */
-        $url = $this->getUrlChecksum($url);
-        $shortenedUrl = $this->getUrlChecksum($shortenedUrl);
-        $time = time();
-
-        // Handle the URL cache and remove old entries that surpass the limit if enabled
-        $this->urlCache[$source][$url] = $time;
-        if ($this->limit > 0 && count($this->urlCache[$source]) > $this->limit) {
-            asort($this->urlCache[$source], SORT_NUMERIC);
-            array_shift($this->urlCache[$source]);
-        }
-
-        // Handle the shortened cache and remove old entries that surpass the limit if enabled
-        $this->shortCache[$source][$shortenedUrl] = $time;
-        if ($this->limit > 0 && count($this->shortCache[$source]) > $this->limit) {
-            asort($this->shortCache[$source], SORT_NUMERIC);
-            array_shift($this->shortCache[$source]);
-        }
-        unset($url, $shortenedUrl, $time);
-    }
-
-    /**
-     * Transliterates a UTF-8 string into corresponding ASCII characters and
-     * truncates and appends an ellipsis to the string if it exceeds a given
-     * length.
-     *
-     * @param string $str  String to decode
-     * @param int    $trim Maximum string length, optional
-     *
-     * @return string
-     */
-    protected function decode($str, $trim = null)
-    {
-        $out = $this->plugins->encoding->transliterate($str);
-        if ($trim > 0) {
-            $out = substr($out, 0, $trim) . (strlen($out) > $trim ? '...' : '');
-        }
-        return $out;
-    }
-
-    /**
-     * Takes a url, parses and cleans the URL without of all the junk
-     * and then return the hex checksum of the url.
-     *
-     * @param string $url url to checksum
-     *
-     * @return string the hex checksum of the cleaned url
-     */
-    protected function getUrlChecksum($url)
-    {
-        $checksum = strtolower(urldecode($this->glueUrl($url, true)));
-        $checksum = preg_replace('#\s#', '', $this->plugins->encoding->transliterate($checksum));
-        return dechex(crc32($checksum));
-    }
-
-    /**
-     * Parses a given URI and procceses the output to remove redundant
-     * or missing values.
-     *
-     * @param string $url the url to parse
-     *
-     * @return array the url components
-     */
-    protected function parseUrl($url)
-    {
-        if (is_array($url)) return $url;
-
-        $url = trim(ltrim($url, ' /@\\'));
-        if (!preg_match('&^(?:([a-z][-+.a-z0-9]*):)&xis', $url, $matches)) {
-            $url = 'http://' . $url;
-        }
-        $parsed = parse_url($url);
-
-        if (!isset($parsed['scheme'])) {
-            $parsed['scheme'] = 'http';
-        }
-        $parsed['scheme'] = strtolower($parsed['scheme']);
-
-        if (isset($parsed['path']) && !isset($parsed['host'])) {
-            $host = $parsed['path'];
-            $path = '';
-            if (strpos($parsed['path'], '/') !== false) {
-                list($host, $path) = array_pad(explode('/', $parsed['path'], 2), 2, null);
-            }
-            $parsed['host'] = $host;
-            $parsed['path'] = $path;
-        }
-
-        return $parsed;
-    }
-
-    /**
-     * Parses a given URI and then glues it back together in the proper format.
-     * If base is set, then it chops off the scheme, user and pass and fragment
-     * information to return a more unique base URI.
-     *
-     * @param string $uri  uri to rebuild
-     * @param string $base set to true to only return the base components
-     *
-     * @return string the rebuilt uri
-     */
-    protected function glueUrl($uri, $base = false)
-    {
-        $parsed = $uri;
-        if (!is_array($parsed)) {
-            $parsed = $this->parseUrl($parsed);
-        }
-
-        if (is_array($parsed)) {
-            $uri = '';
-            if (!$base) {
-                $uri .= (!empty($parsed['scheme']) ? $parsed['scheme'] . ':' .
-                        ((strtolower($parsed['scheme']) == 'mailto') ? '' : '//') : '');
-                $uri .= (!empty($parsed['user']) ? $parsed['user'] .
-                        (!empty($parsed['pass']) ? ':' . $parsed['pass'] : '') . '@' : '');
-            }
-            if ($base && !empty($parsed['host'])) {
-                $parsed['host'] = trim($parsed['host']);
-                if (substr($parsed['host'], 0, 4) == 'www.') {
-                    $parsed['host'] = substr($parsed['host'], 4);
-                }
-            }
-            $uri .= (!empty($parsed['host']) ? $parsed['host'] : '');
-            if (!empty($parsed['port'])
-                && (($parsed['scheme'] == 'http' && $parsed['port'] == 80)
-                || ($parsed['scheme'] == 'https' && $parsed['port'] == 443))
-            ) {
-                unset($parsed['port']);
-            }
-            $uri .= (!empty($parsed['port']) ? ':' . $parsed['port'] : '');
-            if (!empty($parsed['path']) && (!$base || $base && $parsed['path'] != '/')) {
-                $uri .= (substr($parsed['path'], 0, 1) == '/') ? $parsed['path'] : ('/' . $parsed['path']);
-            }
-            $uri .= (!empty($parsed['query']) ? '?' . $parsed['query'] : '');
-            if (!$base) {
-                $uri .= (!empty($parsed['fragment']) ? '#' . $parsed['fragment'] : '');
-            }
-        }
-        return $uri;
-    }
-
-    /**
-     * Checks the given string to see if its a valid IP4 address
-     *
-     * @param string $ip the ip to validate
-     *
-     * @return bool
-     */
-    protected function checkValidIP($ip)
-    {
-        return long2ip(ip2long($ip)) === $ip;
-    }
-
-    /**
-     * Returns the title of the given page
-     *
-     * @param string $url url to the page
-     *
-     * @return string title
-     */
-    public function getTitle($url)
-    {
-        $http = $this->plugins->getPlugin('Http');
-        $options = array(
-            'timeout' => 3.5,
-            'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12'
-        );
-
-        $response = $http->head($url, array(), $options);
-        $header = $response->getHeaders('Content-Type');
-
-        if (!preg_match('#^(text/x?html|application/xhtml+xml)(?:;.*)?$#', $header)) {
-            $title = $header;
-        } else {
-            $response = $http->get($url, array(), $options);
-            $content = $response->getContent();
-            if (preg_match('#<title[^>]*>(.*?)</title>#is', $content, $match)) {
-                $title = preg_replace('/[\s\v]+/', ' ', trim($match[1]));
-            }
-        }
-        $encoding = $this->plugins->getPlugin('Encoding');
-        $title = $encoding->decodeEntities($title);
-
-        if (empty($title)) {
-            if ($response->isError()) {
-                $title = $response->getCodeAsString();
-            } else {
-                $title = 'No Title';
-            }
-        }
-
-        return $title;
-    }
-
-    /**
-     * Output a debug message
-     *
-     * @param string $msg the message to output
-     *
-     * @return void
-     */
-    protected function debug($msg)
-    {
-        echo "(DEBUG:Url) $msg\n";
-    }
-
-    /**
-     * Add a renderer to the stack
-     *
-     * @param object $obj the renderer to add
-     *
-     * @return void
-     */
-    public function registerRenderer($obj)
-    {
-        $this->renderers[spl_object_hash($obj)] = $obj;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Abstract.php
deleted file mode 100644 (file)
index 607d165..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Php
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Php
- */
-
-/**
- * URL shortener abstract class
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Url
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Url
- * @uses     Phergie_Plugin_Http pear.phergie.org
- */
-abstract class Phergie_Plugin_Url_Shorten_Abstract
-{
-    protected $http;
-
-    /**
-     * Constructor
-     *
-     * @param Phergie_Plugin_Http $http instance of the http plugin
-     */
-    public function __construct(Phergie_Plugin_Http $http)
-    {
-        $this->http = $http;
-    }
-
-    /**
-     * Returns an array of request parameters given a url to shorten. The
-     * following keys are valid request parameters:
-     *
-     *  * 'uri': the URI for the request (required)
-     *  * 'query': an array of key-value pairs sent in a GET request
-     *  * 'post': an array of key-value pairs sent in a POST request
-     *  * 'callback': to be called after the request is finished. Should accept
-     *    a Phergie_Plugin_Http_Response object and return either the shortened
-     *    url or false if an error has occured.
-     *
-     * If the 'post' key is present a POST request shall be made; otherwise
-     * a GET request will be made. The 'post' key can be an empty array and
-     * a post request will still be made.
-     *
-     * If no callback is provided the contents of the response will be returned.
-     *
-     * @param string $url the url to shorten
-     *
-     * @return array the request parameters
-     */
-    protected abstract function getRequestParams($url);
-
-    /**
-     * Shortens a given url.
-     *
-     * @param string $url the url to shorten
-     *
-     * @return string the shortened url or false on a failure
-     */
-    public function shorten($url)
-    {
-        $defaults = array('get' => array(), 'post' => array(), 'callback' => null);
-        $options = array('timeout' => 2);
-        $params = $this->getRequestParams($url) + $defaults;
-
-        // Should some kind of notice be thrown? Maybe just if getRequestParams does not return an array?
-        if (!is_array($params) || empty($params['uri'])) {
-            return $url;
-        }
-
-        if (!empty($params['post'])) {
-            $response = $this->http->post($params['uri'], $params['get'], $params['post'], $options);
-        } else {
-            $response = $this->http->get($params['uri'], $params['get'], $options);
-        }
-
-        if (is_callable($params['callback'])) {
-            return call_user_func($params['callback'], $response);
-        }
-
-        $code = $response->getCode();
-        $content = trim($response->getContent);
-        if ($code < 200 || $code >= 300 || empty($content)) {
-            return false;
-        }
-
-        return $response->getContent();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Trim.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Url/Shorten/Trim.php
deleted file mode 100644 (file)
index af7e8a5..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie_Plugin_Php
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Php
- */
-
-/**
- * Shortens urls via the tr.im service
- *
- * @category Phergie 
- * @package  Phergie_Plugin_Url
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Url
- */
-class Phergie_Plugin_Url_Shorten_Trim extends Phergie_Plugin_Url_Shorten_Abstract
-{
-    /**
-     * Returns an array of request parameters given a url to shorten. The
-     * following keys are valid request parameters:
-     *
-     * @param string $url the url to shorten
-     *
-     * @return array the request parameters
-     */
-    protected function getRequestParams($url)
-    {
-        return array(
-            'uri' => 'http://api.tr.im/v1/trim_simple?url=' . rawurlencode($url),
-            'callback' => array($this, 'onComplete')
-        );
-    }
-
-    /**
-     * Callback for when the URL has been shortened. Checks for error messages.
-     *
-     * @param Phergie_Plugin_Http_Response $response the response object
-     *
-     * @return string|bool the shortened url or false on failure
-     */
-    protected function onComplete($response)
-    {
-        if (strpos($response->getContent(), 'Error: ') === 0) {
-            return false;
-        }
-
-        return $response->getContent();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/UserInfo.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/UserInfo.php
deleted file mode 100644 (file)
index 9437073..0000000
+++ /dev/null
@@ -1,413 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_UserInfo
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_UserInfo
- */
-
-/**
- * Provides an API for querying information on users.
- *
- * @category Phergie
- * @package  Phergie_Plugin_UserInfo
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_UserInfo
- */
-class Phergie_Plugin_UserInfo extends Phergie_Plugin_Abstract
-{
-    const REGULAR = 1;
-    const VOICE   = 2;
-    const HALFOP  = 4;
-    const OP      = 8;
-    const ADMIN   = 16;
-    const OWNER   = 32;
-
-    /**
-     * An array containing all the user information for a given channel
-     *
-     * @var array
-     */
-    protected $store = array();
-
-    /**
-     * Tracks mode changes
-     *
-     * @return void
-     */
-    public function onMode()
-    {
-        $args = $this->event->getArguments();
-
-        if (count($args) != 3) {
-            return;
-        }
-
-        list($chan, $modes, $nicks) = $args;
-
-        if (!preg_match('/(?:\+|-)[hovaq+-]+/i', $modes)) {
-            return;
-        }
-
-        $chan = trim(strtolower($chan));
-        $modes = str_split(trim(strtolower($modes)), 1);
-        $nicks = explode(' ', trim(strtolower($nicks)));
-        $operation = array_shift($modes); // + or -
-
-        while ($char = array_shift($modes)) {
-            $nick = array_shift($nicks);
-            $mode = null;
-
-            switch ($char) {
-            case 'q':
-                $mode = self::OWNER;
-                break;
-            case 'a':
-                $mode = self::ADMIN;
-                break;
-            case 'o':
-                $mode = self::OP;
-                break;
-            case 'h':
-                $mode = self::HALFOP;
-                break;
-            case 'v':
-                $mode = self::VOICE;
-                break;
-            }
-
-            if (!empty($mode)) {
-                if ($operation == '+') {
-                    $this->store[$chan][$nick] |= $mode;
-                } else if ($operation == '-') {
-                    $this->store[$chan][$nick] ^= $mode;
-                }
-            }
-        }
-    }
-
-    /**
-     * Tracks users joining a channel
-     *
-     * @return void
-     */
-    public function onJoin()
-    {
-        $chan = trim(strtolower($this->event->getArgument(0)));
-        $nick = trim(strtolower($this->event->getNick()));
-
-        $this->store[$chan][$nick] = self::REGULAR;
-    }
-
-    /**
-     * Tracks users leaving a channel
-     *
-     * @return void
-     */
-    public function onPart()
-    {
-        $chan = trim(strtolower($this->event->getArgument(0)));
-        $nick = trim(strtolower($this->event->getNick()));
-
-        if (isset($this->store[$chan][$nick])) {
-            unset($this->store[$chan][$nick]);
-        }
-    }
-
-    /**
-     * Tracks users quitting a server
-     *
-     * @return void
-     */
-    public function onQuit()
-    {
-        $nick = trim(strtolower($this->event->getNick()));
-
-        foreach ($this->store as $chan => $store) {
-            if (isset($store[$nick])) {
-                unset($this->store[$chan][$nick]);
-            }
-        }
-    }
-
-    /**
-     * Tracks users changing nicks
-     *
-     * @return void
-     */
-    public function onNick()
-    {
-        $nick = trim(strtolower($this->event->getNick()));
-        $newNick = trim(strtolower($this->event->getArgument(0)));
-
-        foreach ($this->store as $chan => $store) {
-            if (isset($store[$nick])) {
-                $this->store[$chan][$newNick] = $store[$nick];
-                unset($this->store[$chan][$nick]);
-            }
-        }
-    }
-
-    /**
-     * Populates the internal user listing for a channel when the bot joins it.
-     *
-     * @return void
-     */
-    public function onResponse()
-    {
-        if ($this->event->getCode() != Phergie_Event_Response::RPL_NAMREPLY) {
-            return;
-        }
-
-        $desc = preg_split('/[@*=]\s*/', $this->event->getDescription(), 2);
-        list($chan, $users) = array_pad(explode(' :', trim($desc[1])), 2, null);
-        $users = explode(' ', trim($users));
-
-        $chan = trim(strtolower($chan));
-
-        foreach ($users as $user) {
-            if (empty($user)) {
-                continue;
-            }
-
-            $user = trim(strtolower($user));
-            $flag = self::REGULAR;
-
-            if ($user[0] == '~') {
-                $flag |= self::OWNER;
-            } else if ($user[0] == '&') {
-                $flag |= self::ADMIN;
-            } else if ($user[0] == '@') {
-                $flag |= self::OP;
-            } else if ($user[0] == '%') {
-                $flag |= self::HALFOP;
-            } else if ($user[0] == '+') {
-                $flag |= self::VOICE;
-            }
-
-            if ($flag != self::REGULAR) {
-                $user = substr($user, 1);
-            }
-
-            $this->store[$chan][$user] = $flag;
-        }
-    }
-
-    /**
-     * Debugging function
-     *
-     * @return void
-     */
-    public function onPrivmsg()
-    {
-        if ($this->getConfig('debug', false) == false) {
-            return;
-        }
-
-        list($target, $msg) = array_pad($this->event->getArguments(), 2, null);
-
-        if (preg_match('#^ishere (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isIn($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^isowner (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isOwner($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^isadmin (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isAdmin($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^isop (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isOp($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^ishop (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isHalfop($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^isvoice (\S+)$#', $msg, $m)) {
-            $this->doPrivmsg($target, $this->isVoice($m[1], $target) ? 'true' : 'false');
-        } elseif (preg_match('#^channels (\S+)$#', $msg, $m)) {
-            $channels = $this->getChannels($m[1]);
-            $this->doPrivmsg($target, $channels ? join(', ', $channels) : 'unable to find nick');
-        } elseif (preg_match('#^users (\S+)$#', $msg, $m)) {
-            $nicks = $this->getUsers($m[1]);
-            $this->doPrivmsg($target, $nicks ? join(', ', $nicks) : 'unable to find channel');
-        } elseif (preg_match('#^random (\S+)$#', $msg, $m)) {
-            $nick = $this->getrandomuser($m[1]);
-            $this->doPrivmsg($target, $nick ? $nick : 'unable to  find channel');
-        }
-    }
-
-    /**
-     * Checks whether or not a given user has a mode
-     *
-     * @param int    $mode A numeric mode (identified by the class constants)
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function is($mode, $nick, $chan)
-    {
-        $chan = trim(strtolower($chan));
-        $nick = trim(strtolower($nick));
-
-        if (!isset($this->store[$chan][$nick])) {
-            return false;
-        }
-
-        return ($this->store[$chan][$nick] & $mode) != 0;
-    }
-
-    /**
-     * Checks whether or not a given user has owner (~) status
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isOwner($nick, $chan)
-    {
-        return $this->is(self::OWNER, $nick, $chan);
-    }
-
-    /**
-     * Checks whether or not a given user has admin (&) status
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isAdmin($nick, $chan)
-    {
-        return $this->is(self::ADMIN, $nick, $chan);
-    }
-
-    /**
-     * Checks whether or not a given user has operator (@) status
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isOp($nick, $chan)
-    {
-        return $this->is(self::OP, $nick, $chan);
-    }
-
-    /**
-     * Checks whether or not a given user has halfop (%) status
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isHalfop($nick, $chan)
-    {
-        return $this->is(self::HALFOP, $nick, $chan);
-    }
-
-    /**
-     * Checks whether or not a given user has voice (+) status
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isVoice($nick, $chan)
-    {
-        return $this->is(self::VOICE, $nick, $chan);
-    }
-
-    /**
-     * Checks whether or not a given user is in a channel
-     *
-     * @param string $nick The nick to check
-     * @param string $chan The channel to check in
-     *
-     * @return bool
-     */
-    public function isIn($nick, $chan)
-    {
-        return $this->is(self::REGULAR, $nick, $chan);
-    }
-
-    /**
-     * Returns the entire user list for a channel or false if the bot is not
-     * in the channel.
-     *
-     * @param string $chan The channel name
-     *
-     * @return array|bool
-     */
-    public function getUsers($chan)
-    {
-        $chan = trim(strtolower($chan));
-        if (isset($this->store[$chan])) {
-            return array_keys($this->store[$chan]);
-        }
-        return false;
-    }
-
-    /**
-     * Returns the nick of a random user present in a given channel or false
-     * if the bot is not present in the channel.
-     *
-     * @param string $chan The channel name
-     *
-     * @return array|bool
-     */
-    public function getRandomUser($chan)
-    {
-        $chan = trim(strtolower($chan));
-
-        if (isset($this->store[$chan])) {
-            $ignore = array('chanserv', 'q', 'l', 's');
-
-            do {
-                $nick = array_rand($this->store[$chan], 1);
-            } while (in_array($nick, $ignore));
-
-            return $nick;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns a list of channels in which a given user is present.
-     *
-     * @param string $nick Nick of the user (optional, defaults to the bot's
-     *               nick)
-     *
-     * @return array|bool
-     */
-    public function getChannels($nick = null)
-    {
-        if (empty($nick)) {
-            $nick = $this->connection->getNick();
-        }
-
-        $nick = trim(strtolower($nick));
-        $channels = array();
-
-        foreach ($this->store as $chan => $store) {
-            if (isset($store[$nick])) {
-                $channels[] = $chan;
-            }
-        }
-
-        return $channels;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php
deleted file mode 100644 (file)
index 7d4f85a..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Weather
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Weather
- */
-
-/**
- * Detects and responds to requests for current weather conditions in a
- * particular location using data from a web service. Requires registering
- * with weather.com to obtain authentication credentials, which must be
- * stored in the configuration settings weather.partner_id and
- * weather.license_key for the plugin to function.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Weather
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Weather
- * @link     http://www.weather.com/services/xmloap.html
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- * @uses     Phergie_Plugin_Temperature pear.phergie.org
- * @uses     extension SimpleXML
- */
-class Phergie_Plugin_Weather extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Http');
-        $plugins->getPlugin('Temperature');
-
-        if (empty($this->config['weather.partner_id'])
-            || empty($this->config['weather.license_key'])) {
-            $this->fail('weather.partner_id and weather.license_key must be specified');
-        }
-    }
-
-    /**
-     * Returns a weather report for a specified location.
-     *
-     * @param string $location Zip code or city/state/country specification
-     *
-     * @return void
-     */
-    public function onCommandWeather($location)
-    {
-        $response = $this->plugins->http->get(
-            'http://xoap.weather.com/search/search',
-            array('where' => $location)
-        );
-
-        if ($response->isError()) {
-            $this->doNotice(
-                $this->event->getNick(),
-                'ERROR: ' . $response->getCode() . ' ' . $response->getMessage()
-            );
-            return;
-        }
-
-        $nick = $this->event->getNick();
-
-        $xml = $response->getContent();
-        if (count($xml->loc) == 0) {
-            $this->doNotice($nick, 'No results for that location.');
-            return;
-        }
-
-        $where = (string) $xml->loc[0]['id'];
-        $response = $this->plugins->http->get(
-            'http://xoap.weather.com/weather/local/' . $where,
-            array(
-                'cc' => '*',
-                'link' => 'xoap',
-                'prod' => 'xoap',
-                'par' => $this->config['weather.partner_id'],
-                'key' => $this->config['weather.license_key'],
-            )
-        );
-
-        if ($response->isError()) {
-            $this->doNotice(
-                $this->event->getNick(),
-                'ERROR: ' . $response->getCode() . ' ' . $response->getMessage()
-            );
-            return;
-        }
-
-        $temperature = $this->plugins->getPlugin('Temperature');
-        $xml = $response->getContent();
-        $weather = 'Weather for ' . (string) $xml->loc->dnam . ' - ';
-        switch ($xml->head->ut) {
-            case 'F':
-                $tempF = $xml->cc->tmp;
-                $tempC = $temperature->convertFahrenheitToCelsius($tempF);
-                break;
-            case 'C':
-                $tempC = $xml->cc->tmp;
-                $tempF = $temperature->convertCelsiusToFahrenheit($tempC);
-                break;
-            default:
-                $this->doNotice(
-                    $this->event->getNick(),
-                    'ERROR: No scale information given.');
-                break;
-        }
-        $r = $xml->cc->hmid;
-        $hiF = $temperature->getHeatIndex($tempF, $r);
-        $hiC = $temperature->convertFahrenheitToCelsius($hiF);
-        $weather .= 'Temperature: ' . $tempF . 'F/' . $tempC . 'C';
-        $weather .= ', Humidity: ' . (string) $xml->cc->hmid . '%';
-        if ($hiF > $tempF || $hiC > $tempC) {
-            $weather .= ', Heat Index: ' . $hiF . 'F/' . $hiC . 'C';
-        }
-        $weather .=
-            ', Conditions: ' . (string) $xml->cc->t .
-            ', Updated: ' . (string) $xml->cc->lsup .
-            ' [ http://weather.com/weather/today/' .
-            str_replace(
-                array('(', ')', ',', ' '),
-                array('', '', '', '+'),
-                (string) $xml->loc->dnam
-            ) .
-            ' ]';
-
-        $this->doPrivmsg($this->event->getSource(), $nick . ': ' . $weather);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Wine.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Wine.php
deleted file mode 100644 (file)
index 9aa0845..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Wine
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Wine
- */
-
-/**
- * Processes requests to serve users wine.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Wine
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Wine
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Serve pear.phergie.org
- */
-class Phergie_Plugin_Wine extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->plugins;
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Serve');
-    }
-
-    /**
-     * Processes requests to serve a user a wine.
-     *
-     * @param string $request Request including the target and an optional
-     *        suggestion of what wine to serve
-     *
-     * @return void
-     */
-    public function onCommandWine($request)
-    {
-        $format = $this->getConfig(
-            'wine.format',
-            'serves %target% a glass of %item%.'
-        );
-
-        $this->plugins->getPlugin('Serve')->serve(
-            dirname(__FILE__) . '/Wine/wine.db',
-            'wine',
-            $format,
-            $request
-        );
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Wine/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Wine/db.php
deleted file mode 100644 (file)
index ce01c2d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-// Create database schema
-echo 'Creating database', PHP_EOL;
-$file = __DIR__ . '/wine.db';
-if (file_exists($file)) {
-    unlink($file);
-}
-$db = new PDO('sqlite:' . $file);
-$db->exec('CREATE TABLE wine (name VARCHAR(255), link VARCHAR(255))');
-$db->exec('CREATE UNIQUE INDEX wine_name ON wine (name)');
-$insert = $db->prepare('INSERT INTO wine (name, link) VALUES (:name, :link)');
-
-// Get and decompress lcboapi.com data set
-$outer = __DIR__ . '/current.zip';
-if (!file_exists($outer)) {
-    echo 'Downloading lcboapi.com data set', PHP_EOL;
-    copy('http://lcboapi.com/download/current.zip', $outer);
-}
-
-echo 'Decompressing lcboapi.com data set', PHP_EOL;
-$zip = new ZipArchive;
-$zip->open($outer);
-$stat = $zip->statIndex(0);
-$inner = __DIR__ . '/' . $stat['name'];
-$zip->extractTo(__DIR__);
-$zip->close();
-$zip = new ZipArchive;
-$zip->open($inner);
-$stat = $zip->statIndex(0);
-$file = __DIR__ . '/' . $stat['name'];
-$zip->extractTo(__DIR__);
-$zip->close();
-
-// Aggregate data set into the database
-$lcbo = new PDO('sqlite:' . $file);
-$result = $lcbo->query('SELECT product_no, name FROM products WHERE primary_category = "Wine"');
-$wines = $result->fetchAll();
-echo 'Processing lcboapi.com data - ', number_format(count($wines), 0), ' records', PHP_EOL;
-$db->beginTransaction();
-foreach ($wines as $wine) {
-    $name = $wine['name'];
-    $link = 'http://lcboapi.com/products/' . $wine['product_no'];
-    $insert->execute(array($name, $link));
-}
-$db->commit();
-
-// Clean up
-echo 'Cleaning up', PHP_EOL;
-unset($lcbo);
-unlink($outer);
-unlink($inner);
-unlink($file);
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Youtube.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Youtube.php
deleted file mode 100644 (file)
index e06ea56..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Plugin_Youtube
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Plugin_Youtube
- */
-
-/**
- * Provides commands used to access several services offered by Google
- * including search, translation, weather, maps, and currency and general
- * value unit conversion.
- *
- * @category Phergie
- * @package  Phergie_Plugin_Youtube
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Plugin_Youtube
- * @uses     Phergie_Plugin_Command pear.phergie.org
- * @uses     Phergie_Plugin_Http pear.phergie.org
- */
-class Phergie_Plugin_Youtube extends Phergie_Plugin_Abstract
-{
-    /**
-     * Checks for dependencies.
-     *
-     * @return void
-     */
-    public function onLoad()
-    {
-        $plugins = $this->getPluginHandler();
-        $plugins->getPlugin('Command');
-        $plugins->getPlugin('Http');
-        if ($url = $plugins->getPlugin('Url')) {
-            $url->registerRenderer($this);
-        }
-    }
-
-    /**
-     * Queries the YouTube video search web service, processes the first
-     * result, and sends a message back to the current event source.
-     *
-     * @param string $query Search term
-     *
-     * @return object YouTube result object
-     */
-    protected function queryYoutube($query)
-    {
-        $url = 'http://gdata.youtube.com/feeds/api/videos';
-        $params = array(
-            'max-results' => '1',
-            'alt' => 'json',
-            'q' => $query
-        );
-        $http = $this->plugins->getPlugin('Http');
-        $response = $http->get($url, $params);
-        $json = $response->getContent();
-
-        $entries = $json->feed->entry;
-        if (!$entries) {
-            $this->doNotice($this->event->getNick(), 'Query returned no results');
-            return;
-        }
-        $entry = reset($entries);
-
-        $nick = $this->event->getNick();
-        $link = $entry->link[0]->href;
-        $title = $entry->title->{'$t'};
-        $author = $entry->author[0]->name->{'$t'};
-        $seconds = $entry->{'media$group'}->{'yt$duration'}->seconds;
-        $published = $entry->published->{'$t'};
-        $views = $entry->{'yt$statistics'}->viewCount;
-        $rating = $entry->{'gd$rating'}->average;
-
-        $minutes = floor($seconds / 60);
-        $seconds = str_pad($seconds % 60, 2, '0', STR_PAD_LEFT);
-        $parsed_link = parse_url($link);
-        parse_str($parsed_link['query'], $parsed_query);
-        $link = 'http://youtu.be/' . $parsed_query['v'];
-        $published = date('n/j/y g:i A', strtotime($published));
-        $views = number_format($views, 0);
-        $rating = round($rating, 2);
-
-        $format = $this->getConfig('youtube.format');
-        if (!$format) {
-            $format = '%nick%:'
-                . ' [ %link% ]'
-                . ' "%title%" by %author%,'
-                . ' Length %minutes%:%seconds%,'
-                . ' Published %published%,'
-                . ' Views %views%,'
-                . ' Rating %rating%';
-        }
-
-        $replacements = array(
-            'nick' => $nick,
-            'link' => $link,
-            'title' => $title,
-            'author' => $author,
-            'minutes' => $minutes,
-            'seconds' => $seconds,
-            'published' => $published,
-            'views' => $views,
-            'rating' => $rating
-        );
-
-        $msg = $format;
-        foreach ($replacements as $from => $to) {
-            $msg = str_replace('%' . $from . '%', $to, $msg);
-        }
-        $this->doPrivmsg($this->event->getSource(), $msg);
-    }
-
-    /**
-     * Returns the first result of a YouTube search.
-     *
-     * @param string $query Search query
-     *
-     * @return void
-     */
-    public function onCommandYoutube($query)
-    {
-        $this->queryYoutube($query);
-    }
-
-    /**
-     * Renders YouTube URLs.
-     *
-     * @param array $parsed parse_url() output for the URL to render
-     *
-     * @return boolean TRUE if the URL was rendered successfully, FALSE
-     *         otherwise
-     */
-    public function renderUrl(array $parsed)
-    {
-        switch ($parsed['host']) {
-            case 'youtu.be':
-                $v = ltrim($parsed['path'], '/');
-                break;
-            case 'youtube.com':
-            case 'www.youtube.com':
-                parse_str($parsed['query'], $parsed_query);
-                if (!empty($parsed_query['v'])) {
-                    $v = $parsed_query['v'];
-                    break;
-                }
-            default:
-                return false;
-        }
-
-        $this->queryYoutube($v);
-
-        return true;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Process/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Process/Abstract.php
deleted file mode 100644 (file)
index 0ec3569..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for obtaining and processing incoming events.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-abstract class Phergie_Process_Abstract
-{
-    /**
-     * Current driver instance
-     *
-     * @var Phergie_Driver_Abstract
-     */
-    protected $driver;
-
-    /**
-     * Current connection handler instance
-     *
-     * @var Phergie_Connection_Handler
-     */
-    protected $connections;
-
-    /**
-     * Current plugin handler instance
-     *
-     * @var Phergie_Plugin_Handler
-     */
-    protected $plugins;
-
-    /**
-     * Current event handler instance
-     *
-     * @var Phergie_Event_Handler
-     */
-    protected $events;
-
-    /**
-     * Current end-user interface instance
-     *
-     * @var Phergie_Ui_Abstract
-     */
-    protected $ui;
-
-    /**
-     * List of arguments for use within the instance
-     *
-     * @var array
-     */
-    protected $options = array();
-
-    /**
-     * Gets the required class refences from Phergie_Bot.
-     *
-     * @param Phergie_Bot $bot     Current bot instance in use
-     * @param array       $options Optional processor arguments
-     *
-     * @return void
-     */
-    public function __construct(Phergie_Bot $bot, array $options = array())
-    {
-        $this->driver = $bot->getDriver();
-        $this->plugins = $bot->getPluginHandler();
-        $this->connections = $bot->getConnectionHandler();
-        $this->events = $bot->getEventHandler();
-        $this->ui = $bot->getUi();
-        $this->options = $options;
-    }
-
-    /**
-     * Sends resulting outgoing events from ealier processing in handleEvents.
-     *
-     * @param Phergie_Connection $connection Active connection
-     *
-     * @return void
-     */
-    protected function processEvents(Phergie_Connection $connection)
-    {
-        $this->plugins->preDispatch();
-        if (count($this->events)) {
-            foreach ($this->events as $event) {
-                $this->ui->onCommand($event, $connection);
-
-                $method = 'do' . ucfirst(strtolower($event->getType()));
-                call_user_func_array(
-                    array($this->driver, $method),
-                    $event->getArguments()
-                );
-            }
-        }
-        $this->plugins->postDispatch();
-
-        if ($this->events->hasEventOfType(Phergie_Event_Request::TYPE_QUIT)) {
-            $this->ui->onQuit($connection);
-            $this->connections->removeConnection($connection);
-        }
-
-        $this->events->clearEvents();
-    }
-
-    /**
-     * Obtains and processes incoming events.
-     *
-     * @return void
-     */
-    public abstract function handleEvents();
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Process/Async.php b/plugins/Irc/extlib/phergie/Phergie/Process/Async.php
deleted file mode 100644 (file)
index 78d5959..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Connection data processor which polls to handle input in an
- * asynchronous manner. Will also cause the application tick at
- * the user-defined wait time.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Process_Async extends Phergie_Process_Abstract
-{
-    /**
-     * Length of time to poll for stream activity (seconds)
-     *
-     * @var int
-     */
-    protected $sec = 0;
-
-    /**
-     * Length of time to poll for stream activity (microseconds)
-     *
-     * @var int
-     */
-    protected $usec = 200000;
-
-    /**
-     * Length of time to wait between ticks.
-     *
-     * @var int
-     */
-    protected $wait = 0;
-
-    /**
-     * Records when the application last performed a tick
-     *
-     * @var int
-     */
-    protected $lastTick = 0;
-
-    /**
-     * Overrides the parent class to set the poll time.
-     *
-     * @param Phergie_Bot $bot     Main bot class
-     * @param array       $options Processor arguments
-     *
-     * @return void
-     */
-    public function __construct(Phergie_Bot $bot, array $options)
-    {
-        if (!$bot->getDriver() instanceof Phergie_Driver_Streams) {
-            throw new Phergie_Process_Exception(
-                'The Async event processor requires the Streams driver'
-            );
-        }
-
-        foreach (array('sec', 'usec') as $var) {
-            if (isset($options[$var])) {
-                if (!is_int($options[$var])) {
-                     throw new Phergie_Process_Exception(
-                        'Processor option "' . $var . '" must be an integer'
-                     );
-                }
-                $this->$var = $options[$var];
-            }
-        }
-
-        if (!isset($this->sec) && !isset($this->usec)) {
-            throw new Phergie_Process_Exception(
-                'One of the processor options "sec" or "usec" must be specified'
-            );
-        }
-
-        parent::__construct($bot, $options);
-    }
-
-    /**
-     * Waits for stream activity and performs event processing on
-     * connections with data to read.
-     *
-     * @return void
-     */
-    protected function handleEventsAsync()
-    {
-        $hostmasks = $this->driver->getActiveReadSockets($this->sec, $this->usec);
-        if (!$hostmasks) {
-            return;
-        }
-        $connections = $this->connections->getConnections($hostmasks);
-        foreach ($connections as $connection) {
-            $this->driver->setConnection($connection);
-            $this->plugins->setConnection($connection);
-            $this->plugins->onTick();
-
-            if ($event = $this->driver->getEvent()) {
-                $this->ui->onEvent($event, $connection);
-                $this->plugins->setEvent($event);
-                $this->plugins->preEvent();
-                $this->plugins->{'on' . ucfirst($event->getType())}();
-            }
-
-            $this->processEvents($connection);
-        }
-    }
-
-    /**
-     * Perform application tick event on all plugins and connections.
-     *
-     * @return void
-     */
-    protected function doTick()
-    {
-        foreach ($this->connections as $connection) {
-            $this->plugins->setConnection($connection);
-            $this->plugins->onTick();
-            $this->processEvents($connection);
-        }
-    }
-
-    /**
-     * Obtains and processes incoming events, then sends resulting outgoing
-     * events.
-     *
-     * @return void
-     */
-    public function handleEvents()
-    {
-        $time = time();
-        if ($this->lastTick == 0 || ($this->lastTick + $this->wait <= $time)) {
-            $this->doTick();
-            $this->lastTick = $time;
-        }
-        $this->handleEventsAsync();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Process/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Process/Exception.php
deleted file mode 100644 (file)
index f964443..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Exception related to event processor operations.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Process_Exception extends Phergie_Exception
-{
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Process/Standard.php b/plugins/Irc/extlib/phergie/Phergie/Process/Standard.php
deleted file mode 100644 (file)
index 24adbaf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Connection data processor which reads all connections looking
- * for a response.
- *
- * @category Phergie
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Process_Standard extends Phergie_Process_Abstract
-{
-    /**
-     * Obtains and processes incoming events, then sends resulting outgoing
-     * events.
-     *
-     * @return void
-     */
-    public function handleEvents()
-    {
-        foreach ($this->connections as $connection) {
-            $this->driver->setConnection($connection);
-            $this->plugins->setConnection($connection);
-            $this->plugins->onTick();
-
-            if ($event = $this->driver->getEvent()) {
-                $this->ui->onEvent($event, $connection);
-                $this->plugins->setEvent($event);
-                $this->plugins->preEvent();
-                $this->plugins->{'on' . ucfirst($event->getType())}();
-            }
-
-            $this->processEvents($connection);
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/StatusnetBot.php b/plugins/Irc/extlib/phergie/Phergie/StatusnetBot.php
deleted file mode 100644 (file)
index 9c1b3a6..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php\r
-/**\r
- * StatusNet - the distributed open-source microblogging tool\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- * Extends the bot class (Phergie_Bot) to allow connection and access to\r
- * sockets and to allow StatusNet to 'drive' the bot\r
- *\r
- * @category  Phergie\r
- * @package   Phergie_StatusnetBot\r
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
- * @copyright 2010 StatusNet, Inc.\r
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
- * @link      http://status.net/\r
- */\r
-class Phergie_StatusnetBot extends Phergie_Bot {\r
-    /**\r
-    * Set up bot and connect to servers\r
-    *\r
-    * @return void\r
-    */\r
-    public function connect() {\r
-        $ui = $this->getUi();\r
-        $ui->setEnabled($this->getConfig('ui.enabled'));\r
-\r
-        $this->loadPlugins();\r
-        $this->loadConnections();\r
-    }\r
-\r
-    /**\r
-    * Transmit raw command to server using driver\r
-    *\r
-    * Handles construction of command strings and their transmission to the\r
-    * server.\r
-    *\r
-    * @param string       $command Command to send\r
-    * @param string|array $args    Optional string or array of sequential\r
-    *        arguments\r
-    *\r
-    * @return string Command string that was sent\r
-    * @throws Phergie_Driver_Exception\r
-    */\r
-    public function send($command, $args = '') {\r
-        return $this->getDriver()->send($command, $args);\r
-    }\r
-\r
-    /**\r
-    * Handle incoming data on the socket using the handleEvents\r
-    * method of the Processor\r
-    *\r
-    * @return void\r
-    */\r
-    public function handleEvents() {\r
-        $this->getProcessor()->handleEvents();\r
-    }\r
-\r
-    /**\r
-    * Close the current connection and reconnect to the server\r
-    *\r
-    * @return void\r
-    */\r
-    public function reconnect() {\r
-        $driver = $this->getDriver();\r
-        $sockets = $driver->getSockets();\r
-\r
-        // Close any existing connections\r
-        try {\r
-            $driver->forceQuit();\r
-        } catch (Phergie_Driver_Exception $e){}\r
-        try {\r
-            $driver->doConnect();\r
-        } catch (Phergie_Driver_Exception $e){\r
-            $driver->forceQuit();\r
-            throw $e;\r
-        }\r
-    }\r
-\r
-    /**\r
-    * Get the sockets used by the bot\r
-    *\r
-    * @return array Array of socket resources\r
-    */\r
-    public function getSockets() {\r
-        return $this->getDriver()->getSockets();\r
-    }\r
-}
\ No newline at end of file
diff --git a/plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/INSTALL b/plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/INSTALL
deleted file mode 100755 (executable)
index dfc9857..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
------------------------------------------------------------------------------
--- About LogViewer
------------------------------------------------------------------------------
-
-The purpose of this tool is to make an HTML display of the Logs made by the 
-Logging plugin for Phergie stored in SQLite database.
-
------------------------------------------------------------------------------
--- Installation
------------------------------------------------------------------------------
-
-To install this, simply copy the contents of this directory into whatever
-directory you want this to run under.
-
------------------------------------------------------------------------------
--- Configuration
------------------------------------------------------------------------------
-
-The only configuration needed at this point in time is to edit the $database
-variable in the top of the index.php to point to the appropriate Phergie
-log file.
-
-Stuff may get more complicated in the future ;)  But this is meant to be 
-simple for now.
\ No newline at end of file
diff --git a/plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/index.php b/plugins/Irc/extlib/phergie/Phergie/Tools/LogViewer/index.php
deleted file mode 100644 (file)
index fc27fa2..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-// Phergie Log Viewer ... Currently designed as a single PHP file in order to make it easy to
-//  'install' this.  Just drop the index.php (or whatever name you wish to rename it to) wherever
-//  you wish, and it will simply work.  Sure, it would be nice to structure some of this stuff into
-//  various include files/etc.  But right now this is simple enough of a quick log viewer, that it's
-//  just one file.
-
-
-/********** SETUP **********/
-
-// (Change any of these if/as needed for your setup) 
-ini_set('default_charset', 'UTF-8');
-date_default_timezone_set('UTC');
-$log = "/PATH/AND/FILENAME/TO/YOUR/LOGFILE/PLEASE.db";
-
-
-/********** PREPARATION **********/
-
-$db = new PDO('sqlite:' . $log);
-if (!is_object($db)) {
-    // Failure, can't access Phergie Log.  Bail with an error message, not pretty, but works:
-    echo "ERROR: Cannot access Phergie Log File, please check the configuration & access privileges";
-    exit();
-}
-
-
-/********** DETECTION **********/
-
-// Determine the mode of the application and call the appropriate handler function
-$mode = empty($_GET['m']) ? '' : $_GET['m'];
-switch ($mode) {
-    case 'channel':
-        show_days($db);
-        break;
-    case 'day':
-        show_log($db);
-        break;
-    default:
-        show_channels($db);
-}
-
-// Exit not really needed here, but reminds us that everything below is support functions:
-exit();
-
-
-/********** MODES **********/
-
-/**
- * show_channels
- *
- * Provide a list of all channel's that we are logging information for:
- *
- * @param PDO A PDO object referring to the database 
- * @return void
- * @author Eli White <eli@eliw.com>
- **/
-function show_channels(PDO $db) {
-    // Begin the HTML page:
-    template_header('Channels');
-    echo "\nChannels:\n<ul>\n";
-
-    // Loop through the database reading in each channel, and echoing out a <li> for it.
-    // only grab actual channels that start with # ... also pre-lowercase everything.
-    // this allows us to 'deal' with variable caps in how the channels were logged.
-    $channels = $db->query("
-        select distinct lower(chan) as c
-        from logs
-        where chan like '#%'
-        ");
-    foreach ($channels as $row) {
-        $html = utf8specialchars($row['c']);
-        $url = urlencode($row['c']);
-        echo "<li><a href=\"?m=channel&w={$url}\">{$html}</a></li>\n";        
-    }
-
-    // Finish off the page:
-    echo "\n</ul>\n";
-    template_footer();
-}
-
-/**
- * show_days
- *
- * Create a calendar view of all days available for this particular channel
- * 
- * NOTE: May get unwieldy if large log files.  Perhaps consider in the future
- *  making a paginated version of this?  by year?  Or a separate 'which year' page
- *  before this?  Not to worry about now.
- *
- * @param PDO A PDO object referring to the database 
- * @return void
- * @author Eli White <eli@eliw.com>
- **/
-function show_days(PDO $db) {
-    $channel = $_GET['w'];
-    $url = urlencode($channel);
-
-    // Begin the HTML page:
-    template_header('Daily Logs for Channel: ' . utf8specialchars($channel));
-    echo "\n<ul>\n";
-
-    // Query the database to discover all days that are available for this channel:
-    $data = array();
-    $prepared = $db->prepare("
-        select distinct date(tstamp) as day
-        from logs
-        where lower(chan) = :chan
-        ");
-    $prepared->execute(array(':chan' => $channel));
-    foreach ($prepared as $row) {
-        list($y, $m, $d) = explode('-', $row['day']);
-        $data[$y][$m][$d] = "{$y}-{$m}-{$d}";
-    }
-
-    // For now, just loop over them all and provide a list:
-    ksort($data);
-    foreach ($data as $year => $months) {
-        ksort($months);
-        foreach ($months as $month => $days) {
-            // Figure out a few facts about this month:
-            $stamp = mktime(0, 0, 0, $month, 1, $year);
-            $first_weekday = idate('w', $stamp);
-            $days_in_month = idate('t', $stamp);
-            $name = date('F', $stamp);
-
-            // We have a month ... start a new table:
-            echo <<<EOTABLE
-<div class="month">
-  <table>
-    <caption>{$name} {$year}</caption>
-    <tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>
-EOTABLE;
-            // Now we need to start looping through the days in this month:
-            echo '<tr>';
-            $rowmod = 0;
-            // Loop through all day entries, no matter how many blanks we need:
-            for ($d = (-$first_weekday + 1); $d < $days_in_month + 1; $d++) {
-                if (!($rowmod++ % 7)) {
-                    // Stop/start a new row:
-                    echo '</tr><tr>';
-                }
-                echo '<td>';
-                // If this day is pre or post actual month days, make it blank:
-                if (($d < 1) || ($d > $days_in_month)) {
-                    echo '&nbsp;';
-                } elseif (isset($days[$d])) {
-                    // Make a link to the day's log:
-                    echo "<a href=\"?m=day&w={$url}&d={$days[$d]}\">{$d}</a>";            
-                } else {
-                    // Just a dead number:
-                    echo $d;
-                }
-                echo '</td>';
-            }
-            // Finish off any blanks needed for a complete table row:
-            while ($rowmod++ % 7) {
-                echo '<td>&nbsp;</td>';
-            }
-            echo "</tr></table></div>\n";
-        }
-    }
-
-    // Finish off the page:
-    echo "\n</ul>\n";
-    template_footer();    
-}
-
-/**
- * show_log
- *
- * Actually show the log for this specific day
- *
- * @param PDO A PDO object referring to the database 
- * @return void
- * @author Eli White <eli@eliw.com>
- **/
-function show_log(PDO $db) {
-    $channel = $_GET['w'];
-    $day = $_GET['d'];
-    $parts = explode('-', $day);
-    $formatted_date = "{$parts[0]}-{$parts[1]}-{$parts[2]}";
-
-    // Begin the HTML page:
-    template_header('Date: ' . utf8specialchars($formatted_date) .
-        ' - Channel: ' . utf8specialchars($channel));
-
-    // Query the database to get all log lines for this date:
-    $prepared = $db->prepare("
-        select time(tstamp) as t, type, nick, message
-        from logs
-        where lower(chan) = :chan and date(tstamp) = :day
-        order by tstamp asc
-        ");
-    $prepared->execute(array(
-        ':chan' => $channel,
-        ':day' => $day,
-        ));
-
-    // Loop through each line,
-    foreach ($prepared as $row) {
-        // Prepare some basic details for output:
-        $color = nick_color($row['nick']);
-        $time = utf8specialchars($row['t']);
-        $msg = utf8specialchars($row['message']);
-        $nick = utf8specialchars($row['nick']);
-        $type = false;
-        
-        // Now change the format of the line based upon the type:
-        switch ($row['type']) {
-            case 4: // PRIVMSG (A Regular Message)
-                echo "[$time] <span style=\"color:#{$color};\">&lt;{$nick}&gt;</span> {$msg}<br />\n";
-                break;
-            case 5: // ACTION (emote)
-                echo "[$time] <span style=\"color:#{$color};\">*{$nick} {$msg}</span><br />\n";
-                break;
-            case 1: // JOIN
-                echo "[$time] -> {$nick} joined the room.<br />\n";
-                break;
-            case 2: // PART (leaves channel)
-                echo "[$time] -> {$nick} left the room: {$msg}<br />\n";
-                break;
-            case 3: // QUIT (quits the server)
-                echo "[$time] -> {$nick} left the server: {$msg}<br />\n";
-                break;
-            case 6: // NICK (changes their nickname)
-                echo "[$time] -> {$nick} is now known as: {$msg}<br />\n";
-                break;
-            case 7: // KICK (booted)
-                echo "[$time] -> {$nick} boots {$msg} from the room.<br />\n";
-                break;
-            case 8: // MODE (changed their mode)
-                $type = 'MODE';
-            case 9: // TOPIC (changed the topic)
-                $type = $type ? $type : 'TOPIC';
-                echo "[$time] -> {$nick}: :{$type}: {$msg}<br />\n";
-        }
-    }
-        
-    // Finish up the page:
-    template_footer();
-}
-
-/**
- * nick_color
- *
- * Uses a silly little algorithm to pick a consistent but unique(ish) color for
- *  any given username.  NOTE: Augment this in the future to make it not generate
- *  'close to white' ones, also maybe to ensure uniqueness?  (Not allow two to have
- *  colors that are close to each other?)
- *
- * @return string A CSS valid hex color string
- * @author Eli White <eli@eliw.com>
- **/
-function nick_color($user) {
-    static $colors = array();
-    
-    if (!isset($colors[$user])) {
-        $colors[$user] = substr(md5($user), 0, 6);
-    }
-
-    return $colors[$user];
-}
-
-/**
- * utf8specialchars
- *
- * Just a quick wrapper around htmlspecialchars
- *
- * @param string The UTF8 string to escape
- * @return string An escaped and ready for HTML use string
- * @author Eli White <eli@eliw.com>
- **/
-function utf8specialchars($string) {
-    return htmlspecialchars($string, ENT_COMPAT, 'UTF-8');
-}
-
-
-/********** TEMPLATES **********/
-
-/**
- * template_header
- *
- * Echo out the header for each HTML page
- *
- * @param $title string The title to be used for this page.
- * @return void
- * @author Eli White <eli@eliw.com>
- **/
-function template_header($title) {
-    $css = template_css();
-    echo <<<EOHTML
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <title>Phergie LogViewer - {$title}</title>
-    <style type="text/css" media="all">{$css}</style>
-  </head>
-  <body>
-    <h2>Phergie LogViewer - {$title}</h2>
-EOHTML;
-}
-
-/**
- * template_footer
- *
- * Echo out the bottom of each HTML page
- *
- * @return void
- * @author Eli White <eli@eliw.com>
- **/
-function template_footer() {
-    echo <<<EOHTML
-  </body>
-</html>
-EOHTML;
-}
-
-/**
- * template_css
- *
- * Generate the CSS used by these HTML pages & return it.
- *
- * @return string The CSS in question:
- * @author Eli White <eli@eliw.com>
- **/
-function template_css() {
-    return <<<EOCSS
-    div.month {
-        float: left;
-        height: 15em;
-    }
-
-    div.month table {
-        border-collapse: collapse;
-        border: 2px solid black;
-        margin-right: 2em;
-    }
-
-    div.month td, div.month th {
-        text-align: center;
-        vertical-align: bottom;
-        border: 1px solid gray;
-        width: 2em;
-        height: 1.7em;
-        padding: 1px;
-        margin: 0px;
-    }
-
-    div.month th {
-        text-decoration: bold;
-        border: 2px solid black;
-    }
-
-    div.month a {
-        text-decoration: none;
-    }
-
-    a:visited, a:link {
-        color: blue;
-    }
-
-    a:active, a:hover {
-        color: red;
-    }
-EOCSS;
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Tools/README b/plugins/Irc/extlib/phergie/Phergie/Tools/README
deleted file mode 100755 (executable)
index ed8fe29..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-This directory holds any assorted tools that work with Phergie but that are
-not part of Phergie itself.  Such as tools to examine data that Phergie is
-capturing/logging.
-
-Each should live inside of it's own directory, and be completely self-contained
-with instructions inside on how to use it.
diff --git a/plugins/Irc/extlib/phergie/Phergie/Ui/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Ui/Abstract.php
deleted file mode 100644 (file)
index e2e2ce2..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * Base class for end-user interfaces.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-abstract class Phergie_Ui_Abstract
-{
-    /**
-     * Handler for when a server connection is attempted.
-     *
-     * @param string $host Server hostname
-     *
-     * @return void 
-     */
-    public function onConnect($host)
-    {
-    }
-
-    /**
-     * Handler for when an attempt is made to load a plugin.
-     *
-     * @param string $plugin Short name of the plugin
-     *
-     * @return void 
-     */
-    public function onPluginLoad($plugin)
-    {
-    }
-
-    /**
-     * Handler for when a plugin fails to load.
-     *
-     * @param string $plugin  Short name of the plugin
-     * @param string $message Message describing the reason for the failure
-     *
-     * @return void 
-     */
-    public function onPluginFailure($plugin, $message)
-    {
-    }
-
-    /**
-     * Handler for when the bot receives an IRC event. 
-     *
-     * @param Phergie_Event_Abstract $event      Received event
-     * @param Phergie_Connection     $connection Connection on which the event 
-     *        was received
-     *
-     * @return void
-     */
-    public function onEvent(Phergie_Event_Abstract $event, 
-        Phergie_Connection $connection
-    ) {
-    }
-
-    /**
-     * Handler for when the bot sends a command to a server.
-     *
-     * @param Phergie_Event_Command $event      Event representing the command 
-     *        being sent
-     * @param Phergie_Connection    $connection Connection on which the command  
-     *        is being sent 
-     *
-     * @return void
-     */
-    public function onCommand(Phergie_Event_Command $event, 
-        Phergie_Connection $connection
-    ) {
-    }
-
-    /**
-     * Handler for when the bot terminates a connection to a server.
-     *
-     * @param Phergie_Connection $connection Terminated connection 
-     *
-     * @return void
-     */
-    public function onQuit(Phergie_Connection $connection)
-    {
-    }
-
-    /**
-     * Handler for when the bot shuts down after terminating all server 
-     * connections.
-     *
-     * @return void
-     */
-    public function onShutdown()
-    {
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Ui/Console.php b/plugins/Irc/extlib/phergie/Phergie/Ui/Console.php
deleted file mode 100644 (file)
index a0a528b..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie 
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * End-user interface that produces console output when running the bot from 
- * a shell.
- *
- * @category Phergie 
- * @package  Phergie
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie
- */
-class Phergie_Ui_Console extends Phergie_Ui_Abstract
-{
-    /**
-     * Flag that toggles all console output
-     *
-     * @var bool
-     */
-    protected $enabled;
-
-    /**
-     * Format for timestamps included in console output
-     *
-     * @var string
-     * @link http://php.net/date
-     */
-    protected $format;
-
-    /**
-     * Constructor to initialize object properties.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $this->enabled = true;
-        $this->format = 'H:i:s';
-    }
-
-    /** 
-     * Outputs a timestamped line to the console if console output is enabled.
-     *
-     * @param string $line Line to output
-     *
-     * @return void
-     */
-    protected function console($line)
-    {
-        if ($this->enabled) {
-            echo date($this->format), ' ', $line, PHP_EOL;
-        }
-    }
-
-    /**
-     * Returns whether console output is enabled.
-     *
-     * @return bool TRUE if console output is enabled, FALSE otherwise
-     */
-    public function isEnabled()
-    {
-        return $this->enabled;
-    }
-
-    /**
-     * Sets whether console output is enabled.
-     *
-     * @param bool $enabled TRUE to enable console output, FALSE otherwise, 
-     *        defaults to TRUE
-     *
-     * @return Phergie_Ui_Console Provides a fluent interface
-     */
-    public function setEnabled($enabled = true)
-    {
-        $this->enabled = (bool) $enabled;
-        return $this;
-    }
-
-    /**
-     * Returns the format used for timestamps in console output.
-     *
-     * @return string
-     * @link http://php.net/date
-     */
-    public function getFormat()
-    {
-        return $this->format;
-    }
-
-    /**
-     * Sets the format used for timestamps in console output, overwriting 
-     * any previous format used.
-     *
-     * @param string $format Timestamp format
-     *
-     * @return Phergie_Ui_Console Provides a fluent interface
-     * @link http://php.net/date
-     */
-    public function setFormat($format)
-    {
-        $this->format = (string) $format;
-        return $this;
-    }
-
-    /**
-     * Outputs a prompt when a server connection is attempted.
-     *
-     * @param string $host Server hostname
-     *
-     * @return void 
-     */
-    public function onConnect($host)
-    {
-        $this->console('Connecting to ' . $host);
-    }
-
-    /**
-     * Outputs a prompt when a plugin is loaded successfully. 
-     *
-     * @param string $plugin Short name of the plugin
-     *
-     * @return void 
-     */
-    public function onPluginLoad($plugin)
-    {
-        $this->console('Loaded plugin ' . $plugin);
-    }
-
-    /**
-     * Outputs a prompt when a plugin fails to load.
-     *
-     * @param string $plugin  Short name of the plugin
-     * @param string $message Message describing the reason for the failure
-     *
-     * @return void 
-     */
-    public function onPluginFailure($plugin, $message)
-    {
-        $this->console('Unable to load plugin ' . $plugin . ' - ' . $message);
-    }
-
-    /**
-     * Outputs a prompt when the bot receives an IRC event. 
-     *
-     * @param Phergie_Event_Abstract $event      Received event
-     * @param Phergie_Connection     $connection Connection on which the 
-     *        event was received
-     *
-     * @return void
-     */
-    public function onEvent(Phergie_Event_Abstract $event, 
-        Phergie_Connection $connection
-    ) {
-        $host = $connection->getHostmask()->getHost();
-        $this->console($host . ' <- ' . $event->getRawData());
-    }
-
-    /**
-     * Outputs a prompt when the bot sends a command to a server.
-     *
-     * @param Phergie_Event_Command $event      Event representing the 
-     *        command being sent
-     * @param Phergie_Connection    $connection Connection on which the 
-     *        command is being sent 
-     *
-     * @return void
-     */
-    public function onCommand(Phergie_Event_Command $event, 
-        Phergie_Connection $connection
-    ) {
-        $plugin = $event->getPlugin()->getName();
-        $host = $connection->getHostmask()->getHost();
-        $type = strtoupper($event->getType());
-        $args = implode(' ', $event->getArguments());
-        $this->console(
-            $plugin . ' plugin: ' . 
-            $host . ' -> ' . $type . ' ' . $args
-        ); 
-    }
-
-    /**
-     * Outputs a prompt when the bot terminates a connection to a server.
-     *
-     * @param Phergie_Connection $connection Terminated connection 
-     *
-     * @return void
-     */
-    public function onQuit(Phergie_Connection $connection)
-    {
-        $host = $connection->getHostmask()->getHost();
-        $this->console('Disconnecting from ' . $host);
-    }
-
-    /**
-     * Outputs a prompt when the bot shuts down after terminating all server 
-     * connections.
-     *
-     * @return void
-     */
-    public function onShutdown()
-    {
-        $this->console('Shutting down');
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/PhergiePackageTask.php b/plugins/Irc/extlib/phergie/PhergiePackageTask.php
deleted file mode 100644 (file)
index dfc760a..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-require_once 'phing/tasks/ext/PearPackage2Task.php';
-
-class PhergiePackageTask extends PearPackage2Task
-{
-    protected function setOptions()
-    {
-        $this->pkg->addMaintainer('lead', 'team', 'Phergie Development Team', 'team@phergie.org');
-
-        $path = str_replace('_', '/', $this->package) . '.php'; 
-        if (file_exists($path)) {
-            $contents = file_get_contents($path);
-            preg_match_all('#/\*\*(.*)\*/#Ums', $contents, $matches, PREG_SET_ORDER);
-            $doc = $matches[1][1];
-
-            $have_summary = false;
-            $have_description = false;
-            foreach ($this->options as $option) {
-                switch ($option->getName()) {
-                    case 'summary':
-                        $have_summary = true;
-                        break;
-                    case 'description':
-                        $have_descripion = true;
-                        break;
-                }
-            }
-
-            if (!$have_summary || !$have_description) {
-                $description = substr($doc, 0, strpos($doc, '@'));
-                $description = trim(preg_replace(array('#^[\h*]*|[\h*]*$#m', '#[\h]+#m'), array('', ' '), $description));
-                $split = preg_split('/\v\v+/', $description);
-                $summary = trim(array_shift($split));
-                if (!$have_summary) {
-                    $this->pkg->setSummary(htmlentities($summary, ENT_QUOTES));
-                }
-                if (!$have_description) {
-                    $this->pkg->setDescription(htmlentities($description, ENT_QUOTES));
-                }
-            }
-
-            $doc = preg_split('/\v+/', $doc);
-            $doc = preg_grep('/@uses/', $doc);
-            $doc = preg_replace('/\s*\* @uses\s+|\s+$/', '', $doc);
-            foreach ($doc as $line) {
-                if (strpos($line, 'extension') === 0) {
-                    $line = explode(' ', $line);
-                    $name = $line[1];
-                    $optional = 'required';
-                    if (isset($line[2])) {
-                        $optional = $line[2];
-                    }
-                    $this->pkg->addExtensionDep(
-                        $optional,
-                        $name
-                    );
-                } else {
-                    $line = explode(' ', $line);
-                    $name = $line[0];
-                    $channel = $line[1];
-                    $optional = 'required';
-                    if (isset($line[2])) {
-                        $optional = $line[2];
-                    }
-                    $this->pkg->addPackageDepWithChannel(
-                        $optional,
-                        $name,
-                        $channel
-                    );
-                }
-            }
-        }
-
-        $newmap = array();
-        foreach ($this->mappings as $key => $map) {
-            switch ($map->getName()) {
-                case 'releases':
-                    $releases = $map->getValue();
-                    foreach ($releases as $release) {
-                        $this->pkg->addRelease();
-                        if (isset($release['installconditions'])) {
-                            if (isset($release['installconditions']['os'])) {
-                                $this->pkg->setOsInstallCondition($release['installconditions']['os']);
-                            }
-                        }
-                        if (isset($release['filelist'])) {
-                            if (isset($release['filelist']['install'])) {
-                                foreach ($release['filelist']['install'] as $file => $as) {
-                                    $this->pkg->addInstallAs($file, $as);
-                                }
-                            }
-                            if (isset($release['filelist']['ignore'])) {
-                                foreach ($release['filelist']['ignore'] as $file) {
-                                    $this->pkg->addIgnoreToRelease($file);
-                                }
-                            }
-                        }
-                    }
-                    break;
-
-                default:
-                    $newmap[] = $map;
-            }
-        }
-        $this->mappings = $newmap;
-
-        parent::setOptions();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/README b/plugins/Irc/extlib/phergie/README
deleted file mode 100644 (file)
index d97ce05..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Phergie is an IRC bot written for PHP 5.2.
-
-Main project web site: http://phergie.org
-
-Instructions for running your own instance of Phergie: http://phergie.org/users/
-
-Architectural overview for plugin developers: http://phergie.org/developers/
-
-Support: http://phergie.org/support/
-
-Bug reports/feature requests: http://github.com/elazar/phergie/issues
diff --git a/plugins/Irc/extlib/phergie/Settings.php.dist b/plugins/Irc/extlib/phergie/Settings.php.dist
deleted file mode 100755 (executable)
index 87b4a95..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-return array(
-
-    // One array per connection, pretty self-explanatory
-    'connections' => array(
-        // Ex: All connection info for the Freenode network
-        array(
-            'host' => 'irc.freenode.net',
-            'port' => 6667,
-            'username' => 'Elazar',
-            'realname' => 'Matthew Turland',
-            'nick' => 'Phergie2',
-            // 'password' => 'password goes here if needed',
-            // 'transport' => 'ssl', // uncomment to connect using SSL
-            // 'encoding' => 'UTF8', // uncomment if using UTF8
-        )
-    ),
-
-    'processor' => 'async',
-    'processor.options' => array('usec' => 200000),
-    // Time zone. See: http://www.php.net/manual/en/timezones.php
-    'timezone' => 'UTC',
-
-    // Whitelist of plugins to load
-    'plugins' => array(
-        // To enable a plugin, simply add a string to this array containing
-        // the short name of the plugin as shown below.
-
-        // 'ShortPluginName',
-
-        // Below is an example of enabling the AutoJoin plugin, for which
-        // the corresponding PEAR package is Phergie_Plugin_AutoJoin. This
-        // plugin allows you to set a list of channels in this configuration
-        // file that the bot will automatically join when it connects to a
-        // server. If you'd like to enable this plugin, simply install it,
-        // uncomment the line below, and set a value for the setting
-        // autojoin.channels (examples for which are located further down in
-        // this file).
-
-        // 'AutoJoin',
-
-        // A few other recommended plugins:
-
-        // Servers randomly send PING events to clients to ensure that
-        // they're still connected and will eventually terminate the
-
-        // connection if a PONG response is not received. The Pong plugin
-        // handles sending these responses.
-
-        // 'Pong',
-
-        // It's sometimes difficult to distinguish between a lack of
-        // activity on a server and the client not receiving data even
-        // though a connection remains open. The Ping plugin performs a self
-        // CTCP PING sporadically to ensure that its connection is still
-        // functioning and, if not, terminates the bot.
-
-        // 'Ping',
-
-        // Sometimes it's desirable to have the bot disconnect gracefully
-        // when issued a command to do so via a PRIVMSG event. The Quit
-        // plugin implements this using the Command plugin to intercept the
-        // command.
-
-        // 'Quit',
-    ),
-
-    // If set to true, this allows any plugin dependencies for plugins
-    // listed in the 'plugins' option to be loaded even if they are not
-    // explicitly included in that list
-    'plugins.autoload' => true,
-
-    // Enables shell output describing bot events via Phergie_Ui_Console
-    'ui.enabled' => true,
-
-    // Examples of supported values for autojoins.channel:
-    // 'autojoin.channels' => '#channel1,#channel2',
-    // 'autojoin.channels' => array('#channel1', '#channel2'),
-    // 'autojoin.channels' => array(
-    //                            'host1' => '#channel1,#channel2',
-    //                            'host2' => array('#channel3', '#channel4')
-    //                        ),
-
-    // Examples of setting values for Ping plugin settings
-
-    // This is the amount of time in seconds that the Ping plugin will wait
-    // to receive an event from the server before it initiates a self-ping
-
-    // 'ping.event' => 300, // 5 minutes
-
-    // This is the amount of time in seconds that the Ping plugin will wait
-    // following a self-ping attempt before it assumes that a response will
-    // never be received and terminates the connection
-
-    // 'ping.ping' => 10, // 10 seconds
-
-);
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/ConnectionTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/ConnectionTest.php
deleted file mode 100644 (file)
index ba94cd0..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Connection.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_ConnectionTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * Associative array containing an option-to-value mapping
-     *
-     * @var array
-     */
-    private $options = array(
-        'host' => 'example.com',
-        'port' => 4080,
-        'transport' => 'udp',
-        'encoding' => 'ASCII',
-        'nick' => 'MyNick',
-        'username' => 'MyUsername',
-        'realname' => 'MyRealName',
-        'password' => 'MyPassword',
-    );
-
-    /**
-     * Data provider for testGetOptionReturnsDefault().
-     *
-     * @return array Enumerated array of enumerated arrays each containing a
-     *               set of parameters for a single call to
-     *               testGetOptionReturnsDefault()
-     */
-    public function dataProviderTestGetOptionReturnsDefault()
-    {
-        return array(
-            array('transport', 'tcp'),
-            array('encoding', 'ISO-8859-1'),
-            array('port', 6667),
-            array('password', null),
-        );
-    }
-
-    /**
-     * Tests that a default values are used for some options.
-     *
-     * @param string $option Name of the option with a default value
-     * @param mixed  $value  Default value of the option
-     *
-     * @return void
-     * @dataProvider dataProviderTestGetOptionReturnsDefault
-     */
-    public function testGetOptionReturnsDefault($option, $value)
-    {
-        $connection = new Phergie_Connection;
-        $this->assertEquals($value, $connection->{'get' . ucfirst($option)}());
-    }
-
-    /**
-     * Tests that a default encoding is used if one isn't specified.
-     *
-     * @return void
-     */
-    public function testGetEncodingReturnsDefault()
-    {
-        $connection = new Phergie_Connection;
-        $this->assertEquals('ISO-8859-1', $connection->getEncoding());
-    }
-
-    /**
-     * Tests that options can be set via the constructor.
-     *
-     * @return void
-     */
-    public function testSetOptionsViaConstructor()
-    {
-        $connection = new Phergie_Connection($this->options);
-        foreach ($this->options as $key => $value) {
-            $this->assertEquals($value, $connection->{'get' . ucfirst($key)}());
-        }
-    }
-
-    /**
-     * Data provider for testGetHostmaskMissingDataGeneratesException().
-     *
-     * @return array Enumerated array of enumerated arrays each containing a
-     *               set of parameters for a single call to
-     *               testGetHostmaskMissingDataGeneratesException()
-     */
-    public function dataProviderTestGetHostmaskMissingDataGeneratesException()
-    {
-        return array(
-            array(null, $this->options['username'], $this->options['host']),
-            array($this->options['nick'], null, $this->options['host']),
-            array($this->options['nick'], $this->options['username'], null),
-        );
-    }
-
-    /**
-     * Tests that attempting to retrieve a hostmask without option values
-     * for all of its constituents generates an exception.
-     *
-     * @param string $nick     Bot nick
-     * @param string $username Bot username
-     * @param string $host     Server hostname
-     *
-     * @return void
-     * @dataProvider dataProviderTestGetHostmaskMissingDataGeneratesException
-     */
-    public function testGetHostmaskMissingDataGeneratesException($nick, $username, $host)
-    {
-        $options = array(
-            'nick' => $nick,
-            'username' => $username,
-            'host' => $host,
-        );
-
-        $connection = new Phergie_Connection($options);
-
-        try {
-            $hostmask = $connection->getHostmask();
-            $this->fail('Expected exception was not thrown');
-        } catch (Phergie_Connection_Exception $e) {
-            return;
-        } catch (Exception $e) {
-            $this->fail('Unexpected exception was thrown');
-        }
-    }
-
-    /**
-     * Tests that attempting to retrieve a hostmask with all required
-     * options is successful.
-     *
-     * @return void
-     */
-    public function testGetHostmaskWithValidData()
-    {
-        $options = array(
-            'nick' => 'MyNick',
-            'username' => 'MyUsername',
-            'host' => 'example.com'
-        );
-
-        $connection = new Phergie_Connection($options);
-        $hostmask = $connection->getHostmask();
-        $this->assertType('Phergie_Hostmask', $hostmask);
-    }
-
-    /**
-     * Data provider for testGetRequiredOptionsWithoutValuesSet().
-     *
-     * @return array Enumerated array of enumerated arrays each containing a
-     *               set of parameters for a single call to
-     *               testGetRequiredOptionsWithoutValuesSet()
-     */
-    public function dataProviderTestGetRequiredOptionsWithoutValuesSet()
-    {
-        return array(
-            array('host'),
-            array('nick'),
-            array('username'),
-            array('realname'),
-        );
-    }
-
-    /**
-     * Tests that attempting to retrieve values of required options when no
-     * values are set results in an exception.
-     *
-     * @param string $option Option name
-     *
-     * @return void
-     * @dataProvider dataProviderTestGetRequiredOptionsWithoutValuesSet
-     */
-    public function testGetRequiredOptionsWithoutValuesSet($option)
-    {
-        try {
-            $connection = new Phergie_Connection;
-            $value = $connection->{'get' . ucfirst($option)}();
-            $this->fail('Expected exception was not thrown');
-        } catch (Phergie_Connection_Exception $e) {
-            return;
-        } catch (Exception $e) {
-            $this->fail('Unexpected exception was thrown');
-        }
-    }
-
-    /**
-     * Tests that attempting to set an invalid value for the transport
-     * results in an exception.
-     *
-     * @return void
-     */
-    public function testSetTransportWithInvalidValue()
-    {
-        $connection = new Phergie_Connection;
-        try {
-            $connection->setTransport('blah');
-            $this->fail('Expected exception was not thrown');
-        } catch (Phergie_Connection_Exception $e) {
-            return;
-        } catch (Exception $e) {
-            $this->fail('Unexpected exception was thrown');
-        }
-    }
-
-    /**
-     * Tests that attempting to set an invalid value for the encoding
-     * results in an exception.
-     *
-     * @return void
-     */
-    public function testSetEncodingWithInvalidValue()
-    {
-        $connection = new Phergie_Connection;
-        try {
-            $connection->setEncoding('blah');
-            $this->fail('Expected exception was not thrown');
-        } catch (Phergie_Connection_Exception $e) {
-            return;
-        } catch (Exception $e) {
-            $this->fail('Unexpected exception was thrown');
-        }
-    }
-
-    /**
-     * Tests that options can be set collectively after the connection is
-     * instantiated.
-     *
-     * @return void
-     */
-    public function testSetOptions()
-    {
-        $connection = new Phergie_Connection;
-        $connection->setOptions($this->options);
-        foreach ($this->options as $key => $value) {
-            $this->assertEquals($value, $connection->{'get' . ucfirst($key)}());
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/IteratorTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/IteratorTest.php
deleted file mode 100644 (file)
index 336b25d..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_Iterator.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_IteratorTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * Iterator instance being tested
-     *
-     * @var Phergie_Plugin_Iterator
-     */
-    protected $iterator;
-
-    /**
-     * List of mock plugin instances to be iterated
-     *
-     * @var array
-     */
-    protected $plugins;
-
-    /**
-     * Initializes the iterator instance being tested.
-     *
-     * @return void
-     */
-    public function setUp()
-    {
-        $this->plugins = array();
-        foreach (range(0, 4) as $index) {
-            $plugin = $this->getMock('Phergie_Plugin_Abstract');
-            $plugin
-                ->expects($this->any())
-                ->method('getName')
-                ->will($this->returnValue($index));
-            $this->plugins[] = $plugin;
-        }
-
-        $this->iterator = new Phergie_Plugin_Iterator(
-            new ArrayIterator($this->plugins)
-        );
-    }
-
-    /**
-     * Tests that all plugins are iterated when no filters are applied.
-     */
-    public function testIteratesAllPluginsWithNoFilters()
-    {
-        $expected = range(0, 4);
-        $actual = array();
-        foreach ($this->iterator as $plugin) {
-            $actual[] = $plugin->getName();
-        }
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that appropriate plugins are iterated when plugin name filters
-     * are applied.
-     */
-    public function testIteratesPluginsWithNameFilters()
-    {
-        // Test acceptance of strings and fluent interface implementation
-        $returned = $this->iterator->addPluginFilter('0');
-        $this->assertSame($this->iterator, $returned);
-
-        // Test acceptance of arrays
-        $this->iterator->addPluginFilter(array('1', '3'));
-
-        // Test application of filters to iteration
-        $expected = array('2', '4');
-        $actual = array();
-        foreach ($this->iterator as $plugin) {
-            $actual[] = $plugin->getName();
-        }
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that appropriate plugins are iterated when method name filters
-     * are applied.
-     *
-     * The same method name is used in all cases here because mocked methods
-     * of mock objects do not appear to be detected by method_exists() or
-     * ReflectionClass, so filtering by a method defined in the base plugin
-     * class seems the easiest way to test that method filtering really
-     * works.
-     */
-    public function testIteratesPluginsWithMethodFilters()
-    {
-        // Tests acceptance of strings and fluent interface implementation
-        $returned = $this->iterator->addMethodFilter('getName');
-        $this->assertSame($this->iterator, $returned);
-
-        // Test acceptance of arrays
-        $this->iterator->addMethodFilter(array('getName', 'getName'));
-
-        // Test application of filters to iteration
-        $expected = array();
-        $actual = array();
-        foreach ($this->iterator as $plugin) {
-            $actual[] = $plugin->getName();
-        }
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that all plugins are iterated after filters are cleared.
-     *
-     * @depends testIteratesPluginsWithNameFilters
-     * @depends testIteratesPluginsWithMethodFilters
-     */
-    public function testIteratesPluginsAfterClearingFilters()
-    {
-        $this->iterator->addPluginFilter('0');
-        $this->iterator->addMethodFilter('method1');
-        $this->iterator->clearFilters();
-
-        $expected = range(0, 4);
-        $actual = array();
-        foreach ($this->iterator as $plugin) {
-            $actual[] = $plugin->getName();
-        }
-        $this->assertEquals($expected, $actual);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/KarmaTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/KarmaTest.php
deleted file mode 100644 (file)
index 6b72316..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_Karma.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_KarmaTest extends Phergie_Plugin_TestCase
-{
-    /**
-     * Skips tests if the SQLite PDO driver is not available.
-     *
-     * @return void
-     */
-    public function setUp()
-    {
-        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
-            $this->markTestSkipped('PDO or pdo_sqlite extension is required');
-        }
-
-        parent::setUp();
-    }
-
-    /**
-     * Configures the plugin to use a temporary copy of the database.
-     *
-     * @return PDO Connection to the temporary database
-     */
-    private function createMockDatabase()
-    {
-        $dbPath = $this->getPluginsPath('Karma/karma.db');
-        $db = $this->getMockDatabase($dbPath);
-        $this->plugin->setDb($db);
-        return $db;
-    }
-
-    /**
-     * Tests the requirement of the Command plugin.
-     *
-     * @return void
-     */
-    public function testRequiresCommandPlugin()
-    {
-        $this->assertRequiresPlugin('Command');
-        $this->plugin->onLoad();
-    }
-
-    /**
-     * Initiates a karma event with a specified term.
-     *
-     * @param string $term Karma term
-     *
-     * @return Phergie_Event_Request Initiated mock event
-     */
-    private function initiateKarmaEvent($term)
-    {
-        $args = array(
-            'receiver' => $this->source,
-            'text' => 'karma ' . $term
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-        return $event;
-    }
-
-    /**
-     * Checks for an expected karma response.
-     *
-     * @param Phergie_Event_Request $event    Event containing the karma
-     *                                        request
-     * @param string                $term     Karma term
-     * @param string                $response Portion of the response
-     *                                        message following the term
-     *                                        from the original event
-     *
-     * @return void
-     */
-    private function checkForKarmaResponse($event, $term, $response)
-    {
-        $text = $event->getNick() . ': ' . $response;
-        $this->assertEmitsEvent('privmsg', array($event->getSource(), $text));
-        $this->plugin->onCommandKarma($term);
-    }
-
-    /**
-     * Tests that a default database is used when none is specified.
-     *
-     * @return void
-     */
-    public function testGetDb()
-    {
-        $db = $this->plugin->getDb();
-        $this->assertType('PDO', $db);
-    }
-
-    /**
-     * Tests specifying a custom database for the plugin to use.
-     *
-     * @return void
-     */
-    public function testSetDb()
-    {
-        $db = $this->createMockDatabase();
-        $this->assertSame($db, $this->plugin->getDb());
-    }
-
-    /**
-     * Tests that issuing the karma command with an unknown term returns a
-     * neutral rating.
-     *
-     * @return void
-     */
-    public function testKarmaCommandOnUnknownTerm()
-    {
-        $term = 'foo';
-        $this->createMockDatabase();
-        $event = $this->initiateKarmaEvent($term);
-        $this->checkForKarmaResponse($event, $term, $term . ' has neutral karma.');
-    }
-
-    /**
-     * Tests that issuing the karma command with the term "me" returns the
-     * the karma rating for the initiating user.
-     *
-     * @return void
-     */
-    public function testKarmaCommandOnUser()
-    {
-        $term = 'me';
-        $this->createMockDatabase();
-        $event = $this->initiateKarmaEvent($term);
-        $this->checkForKarmaResponse($event, $term, 'You have neutral karma.');
-    }
-
-    /**
-     * Tests that issuing the karma command with a term that has a fixed
-     * karma rating results in that rating being returned.
-     *
-     * @return void
-     */
-    public function testKarmaCommandWithFixedKarmaTerm()
-    {
-        $term = 'phergie';
-        $this->createMockDatabase();
-        $event = $this->initiateKarmaEvent($term);
-        $this->checkForKarmaResponse($event, $term, 'phergie has karma of awesome.');
-    }
-
-    /**
-     * Supporting method that tests the result of a karma term rating change.
-     *
-     * @param string $term      Karma term for which the rating is being
-     *                          changed
-     * @param string $operation ++ or --
-     * @param int    $karma     Expected karma rating after the change is
-     *                          applied
-     */
-    private function checkForKarmaRatingChange($term, $operation, $karma)
-    {
-        $args = array(
-            'receiver' => $this->source,
-            'text' => $term . $operation
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-        $this->plugin->onPrivmsg();
-        $event = $this->initiateKarmaEvent($term);
-        $this->checkForKarmaResponse($event, $term, $term . ' has karma of ' . $karma . '.');
-    }
-
-    /**
-     * Tests incrementing the karma rating of a new term.
-     *
-     * @return void
-     */
-    public function testIncrementingKarmaRating()
-    {
-        $this->createMockDatabase();
-        $this->checkForKarmaRatingChange('foo', '++', 1);
-    }
-
-    /**
-     * Tests decrementing the karma rating of a new term.
-     *
-     * @return void
-     */
-    public function testDecrementingKarmaRating()
-    {
-        $this->createMockDatabase();
-        $this->checkForKarmaRatingChange('foo', '--', -1);
-    }
-
-    /**
-     * Tests modifying the karma rating of an existing term.
-     *
-     * @return void
-     */
-    public function testChangingExistingKarmaRating()
-    {
-        $term = 'foo';
-        $this->createMockDatabase();
-        $this->checkForKarmaRatingChange($term, '++', 1);
-        $this->checkForKarmaRatingChange($term, '++', 2);
-    }
-
-    /**
-     * Tests resetting the karma rating of an existing term to 0.
-     *
-     * @return void
-     */
-    public function testResettingExistingKarmaRating()
-    {
-        $term = 'foo';
-        $this->createMockDatabase();
-        $this->checkForKarmaRatingChange($term, '++', 1);
-        $this->plugin->onCommandReincarnate($term);
-        $event = $this->initiateKarmaEvent($term);
-        $this->checkForKarmaResponse($event, $term, $term . ' has neutral karma.');
-    }
-
-    /**
-     * Data provider for testKarmaComparisons().
-     *
-     * @return array Enumerated array of enumerated arrays each containing a
-     *               set of parameter values for a single call to
-     *               testKarmaComparisons()
-     */
-    public function dataProviderTestKarmaComparisons()
-    {
-        $term1 = 'foo';
-        $term2 = 'bar';
-
-        $positive = 'True that.';
-        $negative = 'No sir, not at all.';
-
-        return array(
-            array($term1, $term2, 1, 0, '>', $positive),
-            array($term1, $term2, 0, 1, '>', $negative),
-            array($term1, $term2, 1, 1, '>', $negative),
-            array($term1, $term2, 1, 0, '<', $negative),
-            array($term1, $term2, 0, 1, '<', $positive),
-            array($term1, $term2, 1, 1, '<', $negative),
-            array($term1, 'phergie', 1, 0, '>', $positive),
-            array('phergie', $term2, 0, 1, '<', $positive),
-            array($term1, 'everything', 0, 0, '>', $positive),
-            array('everything', $term2, 0, 0, '>', $positive),
-        );
-    }
-
-    /**
-     * Tests comparing the karma ratings of two terms.
-     *
-     * @param string $term1    First term
-     * @param string $term2    Second term
-     * @param int    $karma1   Karma rating of the first time, 0 or 1
-     * @param int    $karma2   Karma rating of the second term, 0 or 1
-     * @param string $operator Comparison operator, > or <
-     * @param string $response Response to check for
-     *
-     * @return void
-     * @dataProvider dataProviderTestKarmaComparisons
-     */
-    public function testKarmaComparisons($term1, $term2, $karma1, $karma2,
-        $operator, $response
-    ) {
-        $db = $this->createMockDatabase();
-
-        // Reduce answer tables to expected response
-        $stmt = $db->prepare('DELETE FROM positive_answers WHERE answer != ?');
-        $stmt->execute(array($response));
-        $stmt = $db->prepare('DELETE FROM negative_answers WHERE answer != ?');
-        $stmt->execute(array($response));
-
-        if ($karma1) {
-            $this->checkForKarmaRatingChange($term1, '++', 1);
-        }
-
-        if ($karma2) {
-            $this->checkForKarmaRatingChange($term2, '++', 1);
-        }
-
-        $args = array(
-            'receiver' => $this->source,
-            'text' => $term1 . ' ' . $operator . ' ' . $term2
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-
-        // Test lack of a response for terms with fixed karma ratings
-        if ($term1 == 'phergie' || $term2 == 'phergie') {
-            $callback = 'assertDoesNotEmitEvent';
-        } else {
-            $callback = 'assertEmitsEvent';
-        }
-
-        $this->$callback('privmsg', array($event->getSource(), $response));
-        $this->plugin->onPrivmsg();
-
-        // Test for karma changes when one term is "everything"
-        if ($term1 == 'everything' || $term2 == 'everything') {
-            if ($term1 == 'everything') {
-                $term = $term2;
-                $karma = ($operator == '>') ? -1 : 1;
-            } else {
-                $term = $term1;
-                $karma = ($operator == '>') ? 1 : -1;
-            }
-            $event = $this->initiateKarmaEvent($term);
-            $this->checkForKarmaResponse($event, $term, $term . ' has karma of ' . $karma . '.');
-        }
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/Mock.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/Mock.php
deleted file mode 100644 (file)
index 44a5d11..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Creates a plugin on the filesystem that can be used by
- * Phergie_Plugin_Handler::addPath() to be located and loaded.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_Mock extends Phergie_Plugin_Abstract
-{
-    /**
-     * Arguments passed to the constructor
-     *
-     * @var array
-     */
-    protected $arguments;
-
-    /**
-     * Stores all arguments for later use.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        $this->arguments = func_get_args();
-    }
-
-    /**
-     * Returns all constructor arguments.
-     *
-     * @return array Enumerated array containing the arguments passed to the
-     *         constructor in order
-     */
-    public function getArguments()
-    {
-        return $this->arguments;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PingTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PingTest.php
deleted file mode 100644 (file)
index ac30d46..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_Ping.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_PingTest extends Phergie_Plugin_TestCase
-{
-    /**
-     * Tests that the last ping and event are initialized on connection to
-     * the server.
-     *
-     * @return void
-     */
-    public function testOnConnect()
-    {
-        $this->plugin->onConnect();
-
-        $expected = time();
-        $actual = $this->plugin->getLastEvent();
-        $this->assertEquals($expected, $actual);
-
-        $expected = null;
-        $actual = $this->plugin->getLastPing();
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that the last event is reset when an event occurs.
-     *
-     * @return void
-     */
-    public function testPreEvent()
-    {
-        $this->plugin->preEvent();
-
-        $expected = time();
-        $actual = $this->plugin->getLastEvent();
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that the last ping is reset when a ping is received.
-     *
-     * @return void
-     */
-    public function testOnPingResponse()
-    {
-        $this->plugin->onPingResponse();
-
-        $expected = null;
-        $actual = $this->plugin->getLastPing();
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that the test suite is able to manipulate the value of the last
-     * event.
-     *
-     * @return void
-     */
-    public function testSetLastEvent()
-    {
-        $expected = time() + 1;
-        $this->plugin->setLastEvent($expected);
-        $actual = $this->plugin->getLastEvent();
-        $this->assertEquals($expected, $actual);
-
-        $this->plugin->setLastEvent();
-        $expected = time();
-        $actual = $this->plugin->getLastEvent();
-        $this->assertEquals($expected, $actual);
-
-        try {
-            $this->plugin->setLastEvent('foo');
-            $this->fail('Expected exception was not thrown');
-        } catch (Exception $e) { }
-    }
-
-    /**
-     * Tests that the test suite is able to manipulate the value of the last
-     * ping.
-     *
-     * @return void
-     */
-    public function testSetLastPing()
-    {
-        $expected = time() + 1;
-        $this->plugin->setLastPing($expected);
-        $actual = $this->plugin->getLastPing();
-        $this->assertEquals($expected, $actual);
-
-        $this->plugin->setLastPing();
-        $expected = time();
-        $actual = $this->plugin->getLastPing();
-        $this->assertEquals($expected, $actual);
-
-        try {
-            $this->plugin->setLastPing('foo');
-            $this->fail('Expected exception was not thrown');
-        } catch (Exception $e) { }
-    }
-
-    /**
-     * Tests that a ping event is sent after the appropriate time period has
-     * lapsed since receiving an event.
-     *
-     * @depends testSetLastEvent
-     * @return void
-     */
-    public function testPing()
-    {
-        $pingEvent = 10;
-        $this->setConfig('ping.event', $pingEvent);
-        $lastEvent = time() - ($pingEvent + 1);
-        $this->plugin->setLastEvent($lastEvent);
-        $expected = time();
-        $this->assertEmitsEvent('ping', array($this->nick, $expected));
-        $this->plugin->onTick();
-        $actual = $this->plugin->getLastPing();
-        $this->assertEquals($expected, $actual);
-    }
-
-    /**
-     * Tests that a quit event is sent after the appropriate time period has
-     * lapsed since sending a ping event.
-     *
-     * @depends testPing
-     * @return void
-     */
-    public function testQuit()
-    {
-        $pingPing = 10;
-        $this->setConfig('ping.ping', $pingPing);
-        $lastPing = time() - ($pingPing + 1);
-        $this->plugin->setLastPing($lastPing);
-        $this->assertEmitsEvent('quit');
-        $this->plugin->onTick();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PongTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/PongTest.php
deleted file mode 100644 (file)
index e8351fe..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_Pong.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_PongTest extends Phergie_Plugin_TestCase
-{
-    /**
-     * Test that a pong event is sent when a ping event is received.
-     *
-     * @return void
-     */
-    public function testPong()
-    {
-        $expected = 'irc.freenode.net';
-        $event = $this->getMockEvent('ping', array($expected));
-        $this->plugin->setEvent($event);
-        $this->assertEmitsEvent('pong', array($expected));
-        $this->plugin->onPing();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/SpellCheckTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/SpellCheckTest.php
deleted file mode 100644 (file)
index 369a0c6..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_SpellCheck.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_SpellCheckTest extends Phergie_Plugin_TestCase
-{
-    /**
-     * Checks for the pspell extension.
-     *
-     * @return void
-     */
-    public function setUp()
-    {
-        parent::setUp();
-
-        if (!extension_loaded('pspell')) {
-            $this->markTestSkipped('pspell extension not available');
-        }
-    }
-
-    /**
-     * Tests for the plugin failing to load when the language setting is not
-     * specified.
-     *
-     * @return void
-     */
-    public function testLanguageSettingNotSet()
-    {
-        try {
-            $this->plugin->onLoad();
-            $this->fail('Expected exception was not thrown');
-        } catch (Phergie_Plugin_Exception $e) {
-            return;
-        }
-        $this->fail('Unexpected exception was thrown');
-    }
-
-    /**
-     * Tests for the plugin requiring the Command plugin as a dependency.
-     *
-     * @return void
-     */
-    public function testRequiresCommandPlugin()
-    {
-        $this->setConfig('spellcheck.lang', 'en');
-        $this->assertRequiresPlugin('Command');
-        $this->plugin->onLoad();
-    }
-
-    /**
-     * Tests for the plugin failing to load because of a dictionary error.
-     *
-     * @return void
-     */
-    public function testLoadDictionaryError()
-    {
-        $this->setConfig('spellcheck.lang', 'foo');
-        try {
-            $this->plugin->onLoad();
-            $this->fail('Expected exception not thrown');
-        } catch (Phergie_Plugin_Exception $e) {
-            return;
-        }
-        $this->fail('Unexpected exception was thrown');
-    }
-
-    /**
-     * Initializes a spell check event.
-     *
-     * @param string $word Word to be checked
-     *
-     * @return void
-     */
-    private function initializeSpellCheckEvent($word)
-    {
-        $this->setConfig('spellcheck.lang', 'en');
-        $this->plugin->onLoad();
-        $args = array(
-            'receiver' => $this->source,
-            'text' => 'spell ' . $word
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-    }
-
-    /**
-     * Checks for a specified response to a spell check event.
-     *
-     * @param string $word     Work being checked
-     * @param string $response Expected response
-     *
-     * @return void
-     */
-    private function checkForSpellCheckResponse($word, $response)
-    {
-        $this->assertEmitsEvent('privmsg', array($this->source, $response));
-        $this->plugin->onCommandSpell($word);
-    }
-
-    /**
-     * Tests for the plugin returning a response for a correctly spelled word.
-     *
-     * @return void
-     */
-    public function testRespondsForCorrectlySpelledWord()
-    {
-        $word = 'test';
-        $this->initializeSpellCheckEvent($word);
-        $response = $this->nick . ': The word "' . $word . '" seems to be spelled correctly.';
-        $this->checkForSpellCheckResponse($word, $response);
-    }
-
-    /**
-     * Tests for the plugin returning a response when it can't find any
-     * suggestions for a word.
-     *
-     * @return void
-     */
-    public function testRespondsWithoutSuggestions()
-    {
-        $word = 'kjlfljlkjljkljlj';
-        $this->initializeSpellCheckEvent($word);
-        $response = $this->nick . ': I could not find any suggestions for "' . $word . '".';
-        $this->checkForSpellCheckResponse($word, $response);
-    }
-
-    /**
-     * Tests for the plugin returning a response when it is able to find
-     * suggestions for a word.
-     *
-     * @return void
-     */
-    public function testRespondsWithSuggestions()
-    {
-        $word = 'teh';
-        $this->initializeSpellCheckEvent($word);
-        $response = $this->nick . ': Suggestions for "' . $word . '": the, Te, tech, Th, eh.';
-        $this->checkForSpellCheckResponse($word, $response);
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TerryChayTest.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TerryChayTest.php
deleted file mode 100644 (file)
index e58ac6f..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for Pherge_Plugin_TerryChay.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_TerryChayTest extends Phergie_Plugin_TestCase
-{
-    /**
-     * Chayism used as a consistent response when related events are
-     * triggered
-     *
-     * @var string
-     */
-    private $chayism = 'Terry Chay doesn\'t need a framework; he already knows everyone\'s code';
-
-    /**
-     * Configures the mock plugin handler to return a mock Http plugin with
-     * a mock response object populated with predetermined content.
-     *
-     * @return void
-     */
-    public function setUpHttpClient()
-    {
-        $response = $this->getMock('Phergie_Plugin_Http_Response');
-        $response
-            ->expects($this->any())
-            ->method('getContent')
-            ->will($this->returnValue($this->chayism));
-
-        $plugin = $this->getMock('Phergie_Plugin_Http');
-        $plugin
-            ->expects($this->any())
-            ->method('get')
-            ->will($this->returnValue($response));
-
-        $this->getMockPluginHandler()
-            ->expects($this->any())
-            ->method('getPlugin')
-            ->with('Http')
-            ->will($this->returnValue($plugin));
-    }
-
-    /**
-     * Tests that the plugin requires the Http plugin as a dependency.
-     *
-     * @return void
-     */
-    public function testRequiresHttpPlugin()
-    {
-        $this->assertRequiresPlugin('Http');
-        $this->plugin->onLoad();
-    }
-
-    /**
-     * Data provider for testPrivmsgTriggerReturnsChayism().
-     *
-     * @return array Enumerated array of enumerated arrays each containing
-     *               a set of parameters for a single call to
-     *               testPrivmsgTriggerReturnsChayism()
-     */
-    public function dataProviderTestPrivmsgTriggerReturnsChayism()
-    {
-        return array(
-            array('terry chay'),
-            array('terry  chay'),
-            array('tychay'),
-            array('!tychay'),
-            array('! tychay'),
-            array('foo tychay bar'),
-        );
-    }
-
-    /**
-     * Tests that appropriate triggers result in a response with a Chayism.
-     *
-     * @return void
-     * @dataProvider dataProviderTestPrivmsgTriggerReturnsChayism
-     */
-    public function testPrivmsgTriggerReturnsChayism($trigger)
-    {
-        $this->setConfig('command.prefix', '!');
-        $this->setUpHttpClient();
-        $args = array(
-            'receiver' => $this->source,
-            'text' => $trigger
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-        $this->assertEmitsEvent('privmsg', array($this->source, 'Fact: ' . $this->chayism));
-        $this->plugin->onPrivmsg();
-    }
-
-    /**
-     * Tests that lack of an appropriate trigger results in no response with
-     * a Chayism.
-     *
-     * @return void
-     */
-    public function testNoPrivmsgTriggerDoesNotReturnChayism()
-    {
-        $args = array(
-            'receiver' => $this->source,
-            'text' => 'foo bar baz'
-        );
-        $event = $this->getMockEvent('privmsg', $args);
-        $this->plugin->setEvent($event);
-        $this->assertDoesNotEmitEvent('privmsg', array($this->source, 'Fact: ' . $this->chayism));
-        $this->plugin->onPrivmsg();
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestCase.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestCase.php
deleted file mode 100644 (file)
index 941e7cb..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Unit test suite for plugin classes.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-abstract class Phergie_Plugin_TestCase extends PHPUnit_Framework_TestCase
-{
-    /**
-     * Mock configuration
-     *
-     * @var Phergie_Config
-     */
-    protected $config;
-
-    /**
-     * Associative array for configuration setting values, accessed by the
-     * mock configuration object using a callback
-     *
-     * @var array
-     */
-    protected $settings = array();
-
-    /**
-     * Mock connection
-     *
-     * @var Phergie_Connection
-     */
-    protected $connection;
-
-    /**
-     * Mock event handler
-     *
-     * @var Phergie_Event_Handler
-     */
-    protected $events;
-
-    /**
-     * Mock plugin handler
-     *
-     * @var Phergie_Plugin_Handler
-     */
-    protected $plugins;
-
-    /**
-     * Plugin instance being tested
-     *
-     * @var Phergie_Plugin_Abstract
-     */
-    protected $plugin;
-
-    /**
-     * Full name of the plugin class being tested, may be explicitly
-     * specified in subclasses but is otherwise automatically derived from
-     * the test case class name
-     *
-     * @var string
-     */
-    protected $pluginClass;
-
-    /**
-     * User nick used in any events requiring one
-     *
-     * @var string
-     */
-    protected $nick = 'nick';
-
-    /**
-     * Event source used in any events requiring one
-     *
-     * @var string
-     */
-    protected $source = '#channel';
-
-    /**
-     * Initializes instance properties.
-     *
-     * @return void
-     */
-    public function setUp()
-    {
-        if (empty($this->pluginClass)) {
-            $this->pluginClass = preg_replace('/Test$/', '', get_class($this));
-        }
-
-        if (empty($this->plugin)) {
-            $this->plugin = new $this->pluginClass;
-        }
-
-        $this->plugin->setConfig($this->getMockConfig());
-        $this->plugin->setConnection($this->getMockConnection());
-        $this->plugin->setEventHandler($this->getMockEventHandler());
-        $this->plugin->setPluginHandler($this->getMockPluginHandler());
-    }
-
-    /**
-     * Destroys all initialized instance properties.
-     *
-     * @return void
-     */
-    public function tearDown()
-    {
-        unset(
-            $this->plugins,
-            $this->events,
-            $this->connection,
-            $this->config,
-            $this->plugin
-        );
-    }
-
-    /**
-     * Returns a mock configuration object.
-     *
-     * @return Phergie_Config
-     */
-    protected function getMockConfig()
-    {
-        if (empty($this->config)) {
-            $this->config = $this->getMock('Phergie_Config', array('offsetExists', 'offsetGet'));
-            $this->config
-                ->expects($this->any())
-                ->method('offsetExists')
-                ->will($this->returnCallback(array($this, 'configOffsetExists')));
-            $this->config
-                ->expects($this->any())
-                ->method('offsetGet')
-                ->will($this->returnCallback(array($this, 'configOffsetGet')));
-        }
-        return $this->config;
-    }
-
-    /**
-     * Returns whether a specific configuration setting has a value. Only
-     * intended for use by this class, but must be public for PHPUnit to
-     * call them.
-     *
-     * @param string $name Name of the setting
-     *
-     * @return boolean TRUE if the setting has a value, FALSE otherwise
-     */
-    public function configOffsetExists($name)
-    {
-        return isset($this->settings[$name]);
-    }
-
-    /**
-     * Returns the value of a specific configuration setting. Only intended
-     * for use by this class, but must be public for PHPUnit to call them.
-     *
-     * @param string $name Name of the setting
-     *
-     * @return mixed Value of the setting
-     */
-    public function configOffsetGet($name)
-    {
-        return $this->settings[$name];
-    }
-
-    /**
-     * Returns a mock connection object.
-     *
-     * @return Phergie_Connection
-     */
-    protected function getMockConnection()
-    {
-        if (empty($this->connection)) {
-            $this->connection = $this->getMock('Phergie_Connection');
-            $this->connection
-                ->expects($this->any())
-                ->method('getNick')
-                ->will($this->returnValue($this->nick));
-        }
-        return $this->connection;
-    }
-
-    /**
-     * Returns a mock event handler object.
-     *
-     * @return Phergie_Event_Handler
-     */
-    protected function getMockEventHandler()
-    {
-        if (empty($this->events)) {
-            $this->events = $this->getMock('Phergie_Event_Handler', array('addEvent'));
-        }
-        return $this->events;
-    }
-
-    /**
-     * Returns a mock plugin handler object.
-     *
-     * @return Phergie_Plugin_Handler
-     */
-    protected function getMockPluginHandler()
-    {
-        if (empty($this->plugins)) {
-            $config = $this->getMockConfig();
-            $events = $this->getMockEventHandler();
-            $this->plugins = $this->getMock(
-                'Phergie_Plugin_Handler',
-                array(), // mock everything
-                array($config, $events)
-            );
-        }
-        return $this->plugins;
-    }
-
-    /**
-     * Returns a mock event object.
-     *
-     * @param string $type   Event type
-     * @param array  $args   Optional associative array of event arguments
-     * @param string $nick   Optional user nick to associate with the event
-     * @param string $source Optional user nick or channel name to associate
-     *        with the event as its source
-     *
-     * @return Phergie_Event_Request
-     */
-    protected function getMockEvent($type, array $args = array(),
-        $nick = null, $source = null
-    ) {
-        $methods = array('getNick', 'getSource');
-        foreach (array_keys($args) as $arg) {
-            if (is_int($arg) || ctype_digit($arg)) {
-                $methods[] = 'getArgument';
-            } else {
-                $methods[] = 'get' . ucfirst($arg);
-            }
-        }
-
-        $event = $this->getMock(
-            'Phergie_Event_Request',
-            $methods
-        );
-
-        $nick = $nick ? $nick : $this->nick;
-        $event
-            ->expects($this->any())
-            ->method('getNick')
-            ->will($this->returnValue($nick));
-
-        $source = $source ? $source : $this->source;
-        $event
-            ->expects($this->any())
-            ->method('getSource')
-            ->will($this->returnValue($source));
-
-        foreach ($args as $key => $value) {
-            if (is_int($key) || ctype_digit($key)) {
-                $event
-                    ->expects($this->any())
-                    ->method('getArgument')
-                    ->with($key)
-                    ->will($this->returnValue($value));
-            } else {
-                $event
-                    ->expects($this->any())
-                    ->method('get' . ucfirst($key))
-                    ->will($this->returnValue($value));
-            }
-        }
-
-        return $event;
-    }
-
-    /**
-     * Sets the value of a configuration setting.
-     *
-     * @param string $setting Name of the setting
-     * @param mixed  $value   Value for the setting
-     *
-     * @return void
-     */
-    protected function setConfig($setting, $value)
-    {
-        $this->settings[$setting] = $value;
-    }
-
-    /**
-     * Returns the absolute path to the Phergie/Plugin directory. Useful in
-     * conjunction with getMockDatabase().
-     *
-     * @param string $subpath Optional path to append to the directory path
-     *
-     * @return string Directory path
-     */
-    protected function getPluginsPath($subpath = null)
-    {
-        $path = realpath(dirname(__FILE__) . '/../../../Phergie/Plugin');
-        if (!empty($subpath)) {
-            $path .= '/' . ltrim($subpath, '/');
-        }
-        return $path;
-    }
-
-    /**
-     * Modifies the event handler to include an expectation of an event
-     * being added by the plugin being tested. Note that this must be called
-     * BEFORE executing the plugin code intended to initiate the event.
-     *
-     * @param string $type Event type
-     * @param array  $args Optional enumerated array of event arguments
-     *
-     * @return void
-     */
-    protected function assertEmitsEvent($type, array $args = array())
-    {
-        $this->events
-            ->expects($this->at(0))
-            ->method('addEvent')
-            ->with($this->plugin, $type, $args);
-    }
-
-    /**
-     * Modifies the event handler to include an expectation of an event NOT
-     * being added by the plugin being tested. Note that this must be called
-     * BEFORE executing plugin code that may initiate the event.
-     *
-     * @param string $type Event type
-     * @param array  $args Optional enumerated array of event arguments
-     *
-     * @return void
-     */
-    protected function assertDoesNotEmitEvent($type, array $args = array())
-    {
-        // Ugly hack to get around an issue in PHPUnit
-        // @link http://github.com/sebastianbergmann/phpunit-mock-objects/issues/issue/5#issue/5/comment/343524
-        $callback = create_function(
-            '$plugin, $type, $args',
-            'if (get_class($plugin) == "' . $this->pluginClass . '"
-            && $type == "' . $type . '"
-            && $args == "' . var_export($args, true) . '") {
-                trigger_error("Instance of ' . $this->pluginClass
-                . ' unexpectedly emitted event of type ' . $type
-                . '", E_USER_ERROR);
-            }'
-        );
-
-        $this->events
-            ->expects($this->any())
-            ->method('addEvent')
-            ->will($this->returnCallback($callback));
-    }
-
-    /**
-     * Modifies the plugin handler to include an expectation of a plugin
-     * being retrieved, indicating a dependency. Note that this must be
-     * called BEFORE executing the plugin code that may load that plugin
-     * dependency, which is usually located in onLoad().
-     *
-     * @param string $name Short name of the plugin required as a dependency
-     *
-     * @return void
-     */
-    public function assertRequiresPlugin($name)
-    {
-        $this->plugins
-            ->expects($this->atLeastOnce())
-            ->method('getPlugin')
-            ->with($name);
-    }
-
-    /**
-     * Creates an in-memory copy of a specified SQLite database file and
-     * returns a connection to it.
-     *
-     * @param string $path Path to the SQLite file to copy
-     *
-     * @return PDO Connection to the database copy
-     */
-    public function getMockDatabase($path)
-    {
-        $original = new PDO('sqlite:' . $path);
-        $copy = new PDO('sqlite::memory:');
-
-        $result = $original->query('SELECT sql FROM sqlite_master');
-        while ($sql = $result->fetchColumn()) {
-            $copy->exec($sql);
-        }
-
-        $tables = array();
-        $result = $original->query('SELECT name FROM sqlite_master WHERE type = "table"');
-        while ($table = $result->fetchColumn()) {
-            $tables[] = $table;
-        }
-
-        foreach ($tables as $table) {
-            $result = $original->query('SELECT * FROM ' . $table);
-            $insert = null;
-            $copy->beginTransaction();
-            while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
-                $columns = array_keys($row);
-                if (empty($insert)) {
-                    $insert = $copy->prepare(
-                        'INSERT INTO "' . $table . '" (' .
-                        '"' . implode('", "', $columns) . '"' .
-                        ') VALUES (' .
-                        ':' . implode(', :', $columns) .
-                        ')'
-                    );
-                }
-                $insert->execute($row);
-            }
-            $copy->commit();
-            unset($insert);
-        }
-
-        return $copy;
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestNonInstantiablePluginFromFile.php b/plugins/Irc/extlib/phergie/Tests/Phergie/Plugin/TestNonInstantiablePluginFromFile.php
deleted file mode 100644 (file)
index f9bddd1..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-/**
- * Creates a plugin on the filesystem that can be used by
- * Phergie_Plugin_Handler's addPath utility to be located and loaded.
- *
- * @category Phergie
- * @package  Phergie_Tests
- * @author   Phergie Development Team <team@phergie.org>
- * @license  http://phergie.org/license New BSD License
- * @link     http://pear.phergie.org/package/Phergie_Tests
- */
-class Phergie_Plugin_TestNonInstantiablePluginFromFile
-extends Phergie_Plugin_Abstract
-{
-    /**
-     * Private constructor to ensure that this class is not instantiable.
-     *
-     * @return void
-     */
-    private function __construct()
-    {
-    }
-}
diff --git a/plugins/Irc/extlib/phergie/Tests/TestHelper.php b/plugins/Irc/extlib/phergie/Tests/TestHelper.php
deleted file mode 100644 (file)
index e70af44..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
-
-error_reporting(E_ALL | E_STRICT);
-
-// Phergie components require Phergie_Autoload to function correctly.
-require_once dirname(__FILE__) . '/../Phergie/Autoload.php';
-Phergie_Autoload::registerAutoloader();
diff --git a/plugins/Irc/extlib/phergie/Tests/phpunit.xml b/plugins/Irc/extlib/phergie/Tests/phpunit.xml
deleted file mode 100644 (file)
index b96589e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-/**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie_Tests
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie_Tests
- */
--->
-<phpunit colors="true" bootstrap="./TestHelper.php">
-    <testsuite name="Phergie Test Suite">
-        <directory>./</directory>
-    </testsuite>
-</phpunit>
diff --git a/plugins/Irc/extlib/phergie/build.xml b/plugins/Irc/extlib/phergie/build.xml
deleted file mode 100644 (file)
index 7510c75..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project name="Phergie" default="core">
-
-    <tstamp>
-        <format property="DSTAMP" pattern="%Y-%m-%d" />
-    </tstamp>
-
-    <taskdef name="phergiepkg" classname="PhergiePackageTask" />
-    <taskdef name="phpdocumentor" classname="phing.tasks.ext.phpdoc.PhpDocumentorTask" />
-
-    <available file="./build.properties" property="have_properties_file" />
-
-    <property name="clean" value="true" />
-
-    <target name="input">
-
-        <if>
-            <equals arg1="${have_properties_file}" arg2="true" />
-            <then>
-                <property file="./build.properties" />
-            </then>
-            <else>
-                <input propertyname="build.srcdir" defaultvalue="./" message="Source directory" /> 
-                <input propertyname="build.dstdir" defaultvalue="./" message="Destination directory" /> 
-                <input propertyname="build.version.release" message="Release version" />
-                <input propertyname="build.version.api" message="API version" />
-                <input propertyname="build.stability.release" defaultvalue="stable" message="Release stability" validArgs="snapshot,devel,alpha,beta,stable" />
-                <input propertyname="build.stability.api" defaultvalue="stable"  message="API stability" validArgs="snapshot,devel,alpha,beta,stable" />
-                <input propertyname="build.notes" message="Release notes" />
-                <input propertyname="build.phpdep" defaultvalue="5.2.0" message="PHP version required" />
-                <input propertyname="build.pearinstallerdep" defaultvalue="1.9.0" message="PEAR installer version required" />
-            </else>
-        </if>
-
-        <fileset dir="${build.srcdir}" id="core">
-            <include name="phergie.php" />
-            <include name="phergie.bat" />
-            <include name="LICENSE" />
-            <include name="Settings.php.dist" />
-            <include name="Phergie/Autoload.php" />
-            <include name="Phergie/Bot.php" />
-            <include name="Phergie/Config/Exception.php" />
-            <include name="Phergie/Config.php" />
-            <include name="Phergie/Connection/Exception.php" />
-            <include name="Phergie/Connection/Handler.php" />
-            <include name="Phergie/Connection.php" />
-            <include name="Phergie/Db/Exception.php" />
-            <include name="Phergie/Db/Manager.php" />
-            <include name="Phergie/Db/Sqlite.php" />
-            <include name="Phergie/Driver/Abstract.php" />
-            <include name="Phergie/Driver/Exception.php" />
-            <include name="Phergie/Driver/Streams.php" />
-            <include name="Phergie/Event/Abstract.php" />
-            <include name="Phergie/Event/Command.php" />
-            <include name="Phergie/Event/Exception.php" />
-            <include name="Phergie/Event/Handler.php" />
-            <include name="Phergie/Event/Request.php" />
-            <include name="Phergie/Event/Response.php" />
-            <include name="Phergie/Exception.php" />
-            <include name="Phergie/Hostmask/Exception.php" />
-            <include name="Phergie/Hostmask.php" />
-            <include name="Phergie/Plugin/Abstract.php" />
-            <include name="Phergie/Plugin/Exception.php" />
-            <include name="Phergie/Plugin/Handler.php" />
-            <include name="Phergie/Ui/Abstract.php" />
-            <include name="Phergie/Ui/Console.php" />
-        </fileset>
-
-    </target>
-
-    <target name="core" depends="input">
-
-        <property name="build.tmpdir" value="Phergie-${build.version.release}" />
-        <property name="build.tarball" value="${build.dstdir}${build.tmpdir}.tgz" />
-
-        <delete file="${build.tarball}" quiet="true" />
-
-        <mkdir dir="${build.tmpdir}" />
-
-        <copy todir="${build.tmpdir}">
-            <fileset refid="core" />
-        </copy>
-
-        <reflexive file="${build.tmpdir}/Phergie/Bot.php">
-            <filterchain>
-                <replaceregexp>
-                    <regexp
-                        pattern="const VERSION = '[^']+';"
-                        replace="const VERSION = '${build.version.release}';"
-                    />
-                </replaceregexp>
-            </filterchain>
-        </reflexive>
-
-        <phergiepkg name="Phergie" dir="${build.tmpdir}">
-            <fileset refid="core" />
-            <option name="baseinstalldir" value="/" />
-            <option name="outputdirectory" value="${build.dstdir}" />
-            <option name="channel" value="pear.phergie.org" />
-            <option name="summary" value="Phergie core library" />
-            <option name="description" value="The Phergie package provides all files necessary to run a basic IRC bot." />
-            <option name="apiversion" value="${build.version.api}" />
-            <option name="apistability" value="${build.stability.api}" />
-            <option name="releaseversion" value="${build.version.release}" />
-            <option name="releasestability" value="${build.stability.release}" />
-            <option name="phpdep" value="${build.phpdep}" />
-            <option name="pearinstallerdep" value="${build.pearinstallerdep}" />
-            <option name="license" value="http://phergie.org/license New BSD License" />
-            <option name="packagetype" value="php" />
-            <option name="notes" value="${build.notes}" />
-            <mapping name="replacements">
-                <element>
-                    <element key="path" value="phergie.php" />
-                    <element key="type" value="pear-config" />
-                    <element key="from" value="/usr/bin/env php" />
-                    <element key="to" value="php_bin" />
-                </element>
-                <element>
-                    <element key="path" value="phergie.bat" />
-                    <element key="type" value="pear-config" />
-                    <element key="from" value="@php_bin@" />
-                    <element key="to" value="php_bin" />
-                </element>
-                <element>
-                    <element key="path" value="phergie.bat" />
-                    <element key="type" value="pear-config" />
-                    <element key="from" value="@bin_dir@" />
-                    <element key="to" value="bin_dir" />
-                </element>
-            </mapping>
-            <mapping name="exceptions">
-                <element key="phergie.php" value="script" />
-                <element key="phergie.bat" value="script" />
-            </mapping>
-            <mapping name="releases">
-                <element>
-                    <element key="installconditions">
-                        <element key="os" value="windows" />
-                    </element>
-                    <element key="filelist">
-                        <element key="install">
-                            <element key="phergie.php" value="phergie" />
-                        </element>
-                    </element>
-                </element>
-                <element>
-                    <element key="filelist">
-                        <element key="install">
-                            <element key="phergie.php" value="phergie" />
-                        </element>
-                        <element key="ignore">
-                            <element value="phergie.bat" />
-                        </element>
-                    </element>
-                </element>
-            </mapping>
-            <mapping name="deps">
-                <element>
-                    <element key="type" value="ext" />
-                    <element key="name" value="pcre" />
-                </element>
-                <element>
-                    <element key="type" value="ext" />
-                    <element key="name" value="reflection" />
-                </element>
-            </mapping>
-        </phergiepkg>
-
-        <phingcall target="build" />
-
-        <phingcall target="clean" />
-
-    </target>
-
-    <target name="plugin" depends="input">
-        
-        <if>
-            <equals arg1="${have_properties_file}" arg2="true" />
-            <then>
-                <property file="./build.properties" />
-            </then>
-            <else>
-                <input propertyname="build.plugin" message="Short plugin name" />
-                <input propertyname="build.summary" message="Plugin summary" />
-                <input propertyname="build.description" message="Plugin description" />
-            </else>
-        </if>
-
-        <property name="build.class" value="Phergie_Plugin_${build.plugin}" />
-        <property name="build.tmpdir" value="${build.class}-${build.version.release}" />
-        <property name="build.tarball" value="${build.dstdir}${build.tmpdir}.tgz" />
-
-        <fileset dir="${build.srcdir}" id="plugin">
-            <include name="Phergie/Plugin/${build.plugin}.php" />
-            <include name="Phergie/Plugin/${build.plugin}/**" />
-        </fileset>
-
-        <delete file="${build.tarball}" quiet="true" />
-
-        <mkdir dir="${build.tmpdir}" />
-
-        <copy todir="${build.tmpdir}">
-            <fileset refid="plugin" />
-        </copy>
-
-        <phergiepkg name="${build.class}" dir="${build.tmpdir}">
-            <fileset refid="plugin" />
-            <option name="baseinstalldir" value="/" />
-            <option name="outputdirectory" value="${build.dstdir}" />
-            <option name="channel" value="pear.phergie.org"/>
-            <option name="summary" value="${build.summary}"/>
-            <option name="description" value="${build.description}"/>
-            <option name="apiversion" value="${build.version.api}"/>
-            <option name="apistability" value="${build.stability.api}"/>
-            <option name="releaseversion" value="${build.version.release}"/>
-            <option name="releasestability" value="${build.stability.release}"/>
-            <option name="phpdep" value="${build.phpdep}" />
-            <option name="pearinstallerdep" value="${build.pearinstallerdep}" />
-            <option name="license" value="http://phergie.org/license New BSD License"/>
-            <option name="packagetype" value="php"/>
-            <option name="notes" value="${build.notes}"/>
-        </phergiepkg>
-
-        <phingcall target="build" />
-
-        <phingcall target="clean" />
-
-    </target>
-
-    <target name="docs" depends="input">
-        
-        <property name="build.tmpdir" value="Phergie_Docs-${build.version.release}" />
-        <property name="build.tarball" value="${build.dstdir}${build.tmpdir}.tgz" />
-
-        <delete file="${build.tarball}" quiet="true" />
-
-        <mkdir dir="${build.tmpdir}" />
-
-        <phpdocumentor title="API Documentation"
-            destdir="${build.tmpdir}/api"
-            output="HTML:Smarty:PHP">
-            <fileset refid="core" />
-            <projdocfileset dir=".">
-                <include name="LICENSE" />
-            </projdocfileset>
-        </phpdocumentor>
-
-        <phergiepkg name="Phergie_Docs" dir="${build.tmpdir}">
-            <fileset dir="${build.tmpdir}">
-                <include name="api**" />
-            </fileset>
-            <option name="baseinstalldir" value="/" />
-            <option name="outputdirectory" value="${build.dstdir}" />
-            <option name="channel" value="pear.phergie.org" />
-            <option name="summary" value="Phergie core library documentation" />
-            <option name="description" value="The Phergie_Docs package provides documentation for the Phergie core libraries." />
-            <option name="apiversion" value="${build.version.api}" />
-            <option name="apistability" value="${build.stability.api}" />
-            <option name="releaseversion" value="${build.version.release}" />
-            <option name="releasestability" value="${build.stability.release}" />
-            <option name="phpdep" value="${build.phpdep}" />
-            <option name="pearinstallerdep" value="${build.pearinstallerdep}" />
-            <option name="license" value="http://phergie.org/license New BSD License" />
-            <option name="packagetype" value="php" />
-            <option name="notes" value="${build.notes}" />
-            <mapping name="exceptions">
-                <element key="api" value="doc" />
-            </mapping>
-        </phergiepkg>
-
-        <phingcall target="build" />
-
-        <phingcall target="clean" />
-
-    </target>
-
-    <target name="build">
-
-        <tar destfile="${build.tarball}" compression="gzip">
-            <fileset dir="${build.dstdir}">
-                <include name="${build.tmpdir}**" />
-                <include name="package.xml" />
-            </fileset>
-        </tar>
-
-    </target>
-
-    <target name="clean">
-
-        <if>
-            <istrue value="${clean}" />
-            <then>
-                <delete dir="${build.tmpdir}" />
-                <delete file="${build.dstdir}package.xml" />
-            </then>
-        </if>
-
-    </target>
-
-</project>
diff --git a/plugins/Irc/extlib/phergie/phergie.bat b/plugins/Irc/extlib/phergie/phergie.bat
deleted file mode 100644 (file)
index 4eec11d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-@echo off
-REM  Phergie 
-REM 
-REM  PHP version 5
-REM 
-REM  LICENSE
-REM 
-REM  This source file is subject to the new BSD license that is bundled
-REM  with this package in the file LICENSE.
-REM  It is also available through the world-wide-web at this URL:
-REM  http://phergie.org/license
-
-set PHPBIN="@php_bin@"
-%PHPBIN% "@bin_dir@\phergie" %*
diff --git a/plugins/Irc/extlib/phergie/phergie.php b/plugins/Irc/extlib/phergie/phergie.php
deleted file mode 100644 (file)
index f0b9f6c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env php
-<?php
-/**
- * Phergie 
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category  Phergie
- * @package   Phergie
- * @author    Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license   http://phergie.org/license New BSD License
- * @link      http://pear.phergie.org/package/Phergie
- */
-
-/**
- * @see Phergie_Autoload
- */
-require 'Phergie/Autoload.php';
-Phergie_Autoload::registerAutoloader();
-
-$bot = new Phergie_Bot;
-
-if (!isset($argc)) {
-    echo
-        'The PHP setting register_argc_argv must be enabled for Phergie ', 
-        'configuration files to be specified using command line arguments; ',
-        'defaulting to Settings.php in the current working directory',
-        PHP_EOL;
-} else if ($argc > 0) {
-    // Skip the current file for manual installations
-    // ex: php phergie.php Settings.php
-    if (realpath($argv[0]) == __FILE__) {
-        array_shift($argv);
-    }
-
-    // If configuration files were specified, override default behavior
-    if (count($argv) > 0) {
-        $config = new Phergie_Config;
-        foreach ($argv as $file) {
-            $config->read($file);
-        }
-        $bot->setConfig($config);
-    }
-}
-
-$bot->run();
diff --git a/plugins/Irc/lib/channelresponsechannel.php b/plugins/Irc/lib/channelresponsechannel.php
deleted file mode 100644 (file)
index 3ddad28..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php\r
-/**\r
- * StatusNet, the distributed open-source microblogging tool\r
- *\r
- * Extend the IMChannel class to allow commands to send messages\r
- * to a channel instead of PMing a user\r
- *\r
- * PHP version 5\r
- *\r
- * LICENCE: This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- * @category  Network\r
- * @package   StatusNet\r
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
- * @copyright 2010 StatusNet, Inc.\r
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0\r
- * @link      http://status.net/\r
- */\r
-\r
-if (!defined('STATUSNET') && !defined('LACONICA')) {\r
-    exit(1);\r
-}\r
-\r
-class ChannelResponseChannel extends IMChannel {\r
-    protected $ircChannel;\r
-\r
-    /**\r
-    * Construct a ChannelResponseChannel\r
-    *\r
-    * @param IMplugin $imPlugin IMPlugin\r
-    * @param string $ircChannel IRC Channel to reply to\r
-    * @return ChannelResponseChannel\r
-    */\r
-    public function __construct($imPlugin, $ircChannel) {\r
-        $this->ircChannel = $ircChannel;\r
-        parent::__construct($imPlugin);\r
-    }\r
-\r
-    /**\r
-    * Send a message using the plugin\r
-    *\r
-    * @param User $user User\r
-    * @param string $text Message text\r
-    * @return void\r
-    */\r
-    public function output($user, $text) {\r
-        $text = $user->nickname.': ['.common_config('site', 'name') . '] ' . $text;\r
-        $this->imPlugin->sendMessage($this->ircChannel, $text);\r
-    }\r
-}\r
diff --git a/plugins/Irc/lib/fakeirc.php b/plugins/Irc/lib/fakeirc.php
deleted file mode 100644 (file)
index ea5e433..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Instead of sending IRC messages, retrieve the raw data that would be sent
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Network
- * @package   StatusNet
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-class FakeIrc extends Phergie_Driver_Streams {
-    public $would_be_sent = null;
-
-    /**
-    * Store the components for sending a command
-    *
-    * @param string $command Command
-    * @param array $args Arguments
-    * @return void
-    */
-    protected function send($command, $args = '') {
-        $this->would_be_sent = array('command' => $command, 'args' => $args);
-    }
-}
diff --git a/plugins/Irc/locale/Irc.pot b/plugins/Irc/locale/Irc.pot
deleted file mode 100644 (file)
index 5a4abae..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Service name for IRC.
-#: IrcPlugin.php:79
-msgid "IRC"
-msgstr ""
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#: IrcPlugin.php:296
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-#: IrcPlugin.php:346
-msgid "You must specify a host."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-#: IrcPlugin.php:350
-msgid "You must specify a username."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-#: IrcPlugin.php:354
-msgid "You must specify a \"real name\"."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-#: IrcPlugin.php:358
-msgid "You must specify a nickname."
-msgstr ""
-
-#. TRANS: Plugin description.
-#: IrcPlugin.php:401
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#: Irc_waiting_message.php:130
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-#: ircmanager.php:234
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-#: ircmanager.php:247
-msgid "Could not delete confirmation."
-msgstr ""
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-#: ircmanager.php:289
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/ca/LC_MESSAGES/Irc.po b/plugins/Irc/locale/ca/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 70819f3..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# Translation of StatusNet - Irc to Catalan (català)
-# Exported from translatewiki.net
-#
-# Author: Toniher
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:54+0000\n"
-"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"L'usuari «%1$s» a %2$s diu que el vostre nom %3$s li pertany. Si això fos "
-"veritat, podeu confirmar-ho clicant a l'URL: %4$s . (Si no podeu clicar-hi, "
-"copieu-la i enganxeu-la a la barra d'ubicació del vostre navegador). Si no "
-"fóssiu aquest usuari, o bé si no heu sol·licitat aquesta confirmació, "
-"simplement ignoreu el missatge."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Heu d'especificar un servidor central."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Heu d'especificar un nom d'usuari."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Heu d'especificar un «nom real»."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Heu d'especificar un sobrenom."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"El connector IRC permet als usuaris enviar i rebre avisos des d'una xarxa "
-"IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "No s'ha pogut eliminar la confirmació."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/de/LC_MESSAGES/Irc.po b/plugins/Irc/locale/de/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 1ed8c11..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# Translation of StatusNet - Irc to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Giftpflanze
-# Author: MF-Warburg
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:54+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Benutzer „%1$s“ auf %2$s sagt, dass dein Benutzername auf %3$s ihm gehört. "
-"Wenn das richtig ist, kannst du dies bestätigen, indem du auf diesen Link "
-"klickst: %4$s . (Wenn du ihn nicht anklicken kannst, kopieren ihn in die "
-"Adressleiste deines Browsers). Wenn du nicht dieser Benutzer bist, oder du "
-"diese Bestätigung nicht angefragt hast, ignoriere diese Nachricht einfach."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Du musst einen Host angeben."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Du musst einen Benutzernamen angeben."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Du musst einen \"echten Namen\" angeben."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Du musst einen Nick angeben."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Das IRC-Plugin erlaubt es Benutzern Nachrichten über ein IRC-Netwerk zu "
-"senden und zu empfangen."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Konnte Versuchszähler für %d nicht erhöhen."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Dein Nick ist nicht registriert, sodass die IRC-Verbindung nicht hergestellt "
-"werden kann."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Konnte Bestätigung nicht löschen."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr "Beim Einfügen des IRC-Queueitems ist ein Datenbankfehler aufgetreten."
diff --git a/plugins/Irc/locale/es/LC_MESSAGES/Irc.po b/plugins/Irc/locale/es/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index d05279f..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# Translation of StatusNet - Irc to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Armando-Martin
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:54+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"El usuario \"%1$s\" de  %2$s  ha dicho que su pseudónimo  %3$s le pertenece. "
-"Si eso es cierto, puede confirmarlo haciendo clic en esta dirección URL:  %4"
-"$s  . (Si no puede hacer clic en esa dirección, cópiela y péguela en la "
-"barra de direcciones del navegador). Si el usuario no es usted, o si no "
-"pidió esta confirmación, simplemente ignore este mensaje."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Debe especificar un servidor (host)."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Debe especificar un nombre de usuario."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Debe especificar un \"nombre real\"."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Debe especificar un alias."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"El complemento (plugin) IRC permite a los usuarios enviar y recibir mensajes "
-"mediante una red IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "No se pudo incrementar el número de intentos de %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Su pseudónimo (nickname) no está registrado, por lo que no se puede "
-"habilitar la conectividad IRC."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "No se pudo eliminar la confirmación."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Error de base de datos al insertar un elemento en la cola de espera de IRC."
diff --git a/plugins/Irc/locale/eu/LC_MESSAGES/Irc.po b/plugins/Irc/locale/eu/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 84e9a79..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-# Translation of StatusNet - Irc to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:54+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"%2$s guneko %1$s erabiltzaileak %3$s izena berea dela dio. Egia bada, URL "
-"honetan klik eginda baiezta dezakezu: %4$s . (Ezin baduzu klik egin, kopiatu "
-"eta zure nabigatzailearen helbide barran itsatsi).  Erailtzaile hori zu ez "
-"bazara, edo ez baduzu baieztapen-eskaririk egin, ez egin jaramonik mezu honi."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Host bat zehaztu behar duzu."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Erabiltzaile izen bat zehaztu behar duzu."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Benetako izen bat zehaztu behar duzu."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Ezizen bat zehaztu behar duzu."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"IRC pluginak erabiltzaileei IRC sare bidez oharrak bidali eta jasotzen uzten "
-"die."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Ezin izan da gehitu %d(r)entzako saiakera kopurua."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr "Zure ezizena erregistraturik ez dagoenez IRC koneksioa ezin da gaitu."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Ezin izan da baieztapena ezabatu."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr "Datubase akatsa IRC itxarote zerrendan elementu bat gehitzean."
diff --git a/plugins/Irc/locale/fi/LC_MESSAGES/Irc.po b/plugins/Irc/locale/fi/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 107acd1..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of StatusNet - Irc to Finnish (Suomi)
-# Exported from translatewiki.net
-#
-# Author: Nike
-# Author: XTL
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-27 12:36+0000\n"
-"PO-Revision-Date: 2011-04-27 12:37:25+0000\n"
-"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-04-17 22:40:37+0000\n"
-"X-Generator: MediaWiki 1.18alpha (r87008); Translate extension (2011-04-26)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: fi\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr ""
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"IRC-liitännäinen mahdollistaa viestien lähettämisen ja vastaanottamisen IRC-"
-"verkkoa käyttäen."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-#, fuzzy
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"IRC-nimimerkkiäsi ei ole rekisteröity, joten IRC-yhteyttä ei voida ottaa "
-"käyttöön"
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr ""
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/fr/LC_MESSAGES/Irc.po b/plugins/Irc/locale/fr/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 39971df..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# Translation of StatusNet - Irc to French (français)
-# Exported from translatewiki.net
-#
-# Author: Coyau
-# Author: Gomoko
-# Author: Hashar
-# Author: IAlex
-# Author: Od1n
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:54+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"L’utilisateur \"%1$s\" sur %2$s a déclaré que votre nom affiché %3$s lui "
-"appartient. Si c'est le cas, vous pouvez le confirmer en cliquant sur cette "
-"URL: %4$s. (Si vous ne pouvez pas cliquer dessus, copiez-collez l’URL dans "
-"la barre d’adresse de votre navigateur). Si cet utilisateur n’est pas vous, "
-"ou si vous n’avez pas vous-même demandé cette confirmation, veuillez "
-"simplement ignorer ce message."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Vous devez indiquer un hôte."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Vous devez indiquer un nom d'utilisateur"
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Vous devez indiquer un « vrai nom »."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Vous devez indiquer un pseudonyme."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Le plugin IRC permet aux utilisateurs d'envoyer et de recevoir des messages "
-"depuis un réseau IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Impossible d'augmenter le décompte de l'objet %d"
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Votre pseudo n'est pas enregistré, la connexion IRC ne peut donc pas être "
-"activée"
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Échec de la suppression de la confirmation."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Erreur de base de données lors de l'insertion d'un élément de file d'attente "
-"IRC."
diff --git a/plugins/Irc/locale/gl/LC_MESSAGES/Irc.po b/plugins/Irc/locale/gl/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index b160215..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Translation of StatusNet - Irc to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"O usuario \"%1$s\" de %2$s dixo que o pseudónimo %3$s perténcelle a el ou "
-"ela. Se é certo, pódeo confirmar premendo neste enderezo URL: %4$s. (Se non "
-"pode premer nel, copie e pegue o enderezo na barra de enderezos do "
-"navegador.) Se ese usuario non é vostede ou se non solicitou esta "
-"confirmación, ignore esta mensaxe."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Cómpre especificar un provedor de hospedaxe."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Cómpre especificar un nome de usuario."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Cómpre especificar un nome real."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Cómpre especificar un alcume."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"O complemento IRC permite aos usuarios enviar e recibir mensaxes desde a "
-"rede de IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Non se puido incrementar o número de intentos de %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"O seu alcume non está rexistrado, de modo que non se pode activar a "
-"conectividade IRC."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Non se puido borrar a confirmación."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr "Erro na base de datos ao inserir un elemento na cola de espera de IRC."
diff --git a/plugins/Irc/locale/ia/LC_MESSAGES/Irc.po b/plugins/Irc/locale/ia/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 2e4de9d..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# Translation of StatusNet - Irc to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Le usator \"%1$s\" de %2$s ha dicite que tu pseudonymo de %3$s pertine a "
-"ille o illa. Si isto es correcte, tu pote confirmar lo con un clic super "
-"iste URL: %4$s . (Si tu non pote cliccar super illo, copia-e-colla lo in le "
-"barra de adresse de tu navigator del web.) Si tu non es iste usator, o si tu "
-"non requestava iste confirmation, simplemente ignora iste message."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Es necessari specificar un host."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Es necessari specificar un nomine de usator."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Es necessari specificar un \"nomine real\"."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Es necessari specificar un pseudonymo."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Le plug-in de IRC permitte que usatores invia e recipe notas per un rete de "
-"IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Non poteva incrementar le numero de tentativas pro %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Tu pseudonymo non es registrate, dunque le connexion a IRC non pote esser "
-"activate."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Non poteva deler le confirmation."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Error del base de datos durante le insertion de un elemento in le cauda de "
-"attender de IRC."
diff --git a/plugins/Irc/locale/it/LC_MESSAGES/Irc.po b/plugins/Irc/locale/it/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 2f04a15..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# Translation of StatusNet - Irc to Italian (italiano)
-# Exported from translatewiki.net
-#
-# Author: GreenFox
-# Author: Ximo17
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"L'utente \"%1$s\" su %2$s ha detto che il tuo nome visualizzato %3$s gli "
-"appartiene. Se è vero, puoi confermare cliccando su questa URL: %4$s . (Se "
-"non riesci a cliccare, copia e incolla la URL nella barra degli indirizzi "
-"del tuo browser). Se quest'utente non sei tu, o se non hai richiesto tu "
-"questa conferma, ignora semplicemente questo messaggio."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "È necessario specificare un host."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "È necessario specificare un nome utente."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "È necessario specificare un \"nome reale\"."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "È necessario specificare un nickname."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Il plugin per IRC consente agli utenti di inviare e ricevere le notizie "
-"tramite la rete IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Impossibile incrementare il conteggio dei tentativi per %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Il tuo nickname non è registrato di conseguenza la connettività IRC non "
-"potrà essere attivata."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Impossibile eliminare la conferma."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Errore nel database nell'inserimento dell'oggetto della coda d'attesa su IRC."
diff --git a/plugins/Irc/locale/ja/LC_MESSAGES/Irc.po b/plugins/Irc/locale/ja/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 6437900..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-# Translation of StatusNet - Irc to Japanese (日本語)
-# Exported from translatewiki.net
-#
-# Author: Shirayuki
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "ホストを指定してください。"
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "ユーザー名を指定してください。"
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "「本名」を指定してください。"
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "ニックネームを指定してください。"
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr ""
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/mk/LC_MESSAGES/Irc.po b/plugins/Irc/locale/mk/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 8aa8bed..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Translation of StatusNet - Irc to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Корисникот „%1$s“ на %2$s има изјавено дека Вашиот прекар на %3$s е всушност "
-"негов. Ако ова е вистина, можете да потврдите стискајќи на оваа URL-адреса: %"
-"4$s . (Ако не можете да ја стиснете, прекопирајте ја во адресната лента на "
-"прелистувачот). Ако ова не сте Вие, или ако не ја имате побарано оваа "
-"потврда, слободно занемарете ја поракава."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Мора да наведете домаќин."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Мора да наведете корисничко име."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Мора да наведете „вистинско име“."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Мора да наведете прекар."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Приклучокот за IRC им овозможува на корисниците да испраќаат и примаат "
-"забелешки преку мрежата на IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Не можев да го дополнам бројот на обиди за %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Вашиот прекар не е регистриран, па затоа не може да се овозможи поврзувањето "
-"со IRC."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Не можев да ја избришам потврдата."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr "Грешка во базата при вметнувањето на редицата на чекање за IRC ."
diff --git a/plugins/Irc/locale/nl/LC_MESSAGES/Irc.po b/plugins/Irc/locale/nl/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 8736972..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# Translation of StatusNet - Irc to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: SPQRobin
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Gebruiker \"%1$s\" op de site %2$s heeft aangegeven dat de schermnaam %3$s "
-"van hem is. Als dat klopt, dan kunt u dit bevestigen door op deze verwijzing "
-"te klikken: %4$s. Als u hier niet op kunt klikken, kopieer en plak deze "
-"verwijzing naar in de adresbalk van uw webbrowser. Als u deze gebruiker niet "
-"bent, of u hebt niet om deze bevestiging gevraagd, negeer dit bericht dan."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "U moet een host opgeven."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "U moet een gebruikersnaam opgeven."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "U moet een echte naam opgeven."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "U moet een gebruikersnaam opgeven."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Maakt het mogelijk om mededelingen te zenden naar en ontvangen van een IRC-"
-"netwerk."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Het was niet mogelijk om het aantal pogingen voor %d op te hogen"
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Uw gebruikersnaam is niet geregistreerd en daarom kan er geen koppeling met "
-"IRC worden gemaakt."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "De bevestiging kon niet verwijderd worden."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Er is een databasefout opgetreden tijdens het invoegen van het IRC-queueitem."
diff --git a/plugins/Irc/locale/sv/LC_MESSAGES/Irc.po b/plugins/Irc/locale/sv/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 1d47845..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# Translation of StatusNet - Irc to Swedish (svenska)
-# Exported from translatewiki.net
-#
-# Author: Lokal Profil
-# Author: WikiPhoenix
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Swedish <https://translatewiki.net/wiki/Portal:sv>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: sv\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Du måste ange en värd."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Du måste ange ett användarnamn."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Du måste ange ett \"riktigt namn\"."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Du måste ange ett smeknamn."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"IRC-tillägget tillåter användare skicka och ta emot meddelanden över IRC-"
-"nätverket."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Ditt smeknamn är inte registrerat, så IRC-anslutningar kan inte aktiveras."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr ""
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/tl/LC_MESSAGES/Irc.po b/plugins/Irc/locale/tl/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 45a8208..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# Translation of StatusNet - Irc to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:55+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Sinabi ng tagagamit na si \"%1$s\" sa %2$s na ang bansag mong %3$s ay pag-"
-"aari nila. Kung iyan ay totoo, matitiyak mo sa pamamagitan ng pagpindot sa "
-"URL na ito: %4$s. (Kung hindi mo ito mapindot, kopyahin at idikit ito sa "
-"loob ng halang ng tirahan ng iyong pantingin-tingin). Kung hindi ikaw ang "
-"tagagamit na iyan, o hindi mo hiniling ang pagtitiyak na ito, huwag na "
-"lamang pansinin ang mensaheng ito."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Dapat kang tumukoy ng isang tagapagpasinaya."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Dapat kang tumukoy ng isang pangalan ng tagagamit."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Dapat kang tumukoy ng isang \"tunay na pangalan\"."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Dapat kang tumukoy ng isang palayaw."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Ang pampasak na IRC ay nagpapahintulot sa mga tagagamit na makapagpadala at "
-"makatanggap ng mga pabatid sa ibabaw ng kalambatan ng IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Hindi masudlungan ang bilang ng mga pagtatangka para sa %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr "Hindi nakatala ang palayaw mo kaya't hindi mapagana ang ugnay ng IRC."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Hindi mabura ang pagtitiyak."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
-"Kamalian ng kalipunan ng dato sa pagsisingit ng IRD na naghihintay ng bagay "
-"ng pila."
diff --git a/plugins/Irc/locale/tr/LC_MESSAGES/Irc.po b/plugins/Irc/locale/tr/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 9b9026c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# Translation of StatusNet - Irc to Turkish (Türkçe)
-# Exported from translatewiki.net
-#
-# Author: Emperyan
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:56+0000\n"
-"Language-Team: Turkish <https://translatewiki.net/wiki/Portal:tr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Bir ana bilgisayar belirtmeniz gerekir."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Bir kullanıcı adı belirtmelisiniz."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "\"Gerçek adınızı\" belirtmelisiniz."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Bir takma ad belirtmelisiniz."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr ""
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Onay silinemedi."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr ""
diff --git a/plugins/Irc/locale/uk/LC_MESSAGES/Irc.po b/plugins/Irc/locale/uk/LC_MESSAGES/Irc.po
deleted file mode 100644 (file)
index 77f1968..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Translation of StatusNet - Irc to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Irc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:08:56+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:50:23+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-irc\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Service name for IRC.
-msgid "IRC"
-msgstr "IRC"
-
-#. TRANS: Body text for e-mail confirmation message for IRC.
-#. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename,
-#. TRANS: %3$s is the plugin display name ("IRC"), %4$s is the confirm address URL.
-#, php-format
-msgid ""
-"User \"%1$s\" on %2$s has said that your %3$s screenname belongs to them. If "
-"that's true, you can confirm by clicking on this URL: %4$s . (If you cannot "
-"click it, copy-and-paste it into the address bar of your browser). If that "
-"user is not you, or if you did not request this confirmation, just ignore "
-"this message."
-msgstr ""
-"Користувач «%1$s» на сайті %2$s повідомив, що ваш псевдонім %3$s належить "
-"йому. Якщо це дійсно так, ви можете підтвердити це просто перейшовши за "
-"наступною ланкою: %4$s. (Якщо ви не можете натиснути на посилання, то "
-"скопіюйте адресу до адресного рядка вашого веб-оглядача.) Якщо ви не є "
-"згаданим користувачем, не підтверджуйте нічого, просто проігноруйте це "
-"повідомлення."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a host."
-msgstr "Ви повинні вказати хост.."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a username."
-msgstr "Ви повинні зазначити ім’я користувача."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a \"real name\"."
-msgstr "Ви повинні зазначити «справжнє ім’я»."
-
-#. TRANS: Exception thrown when initialising the IRC plugin fails because of an incorrect configuration.
-msgid "You must specify a nickname."
-msgstr "Ви повинні зазначити псевдонім."
-
-#. TRANS: Plugin description.
-msgid ""
-"The IRC plugin allows users to send and receive notices over an IRC network."
-msgstr ""
-"Додаток IRC дозволяє користувачам надсилати і отримувати дописи у мережі IRC."
-
-#. TRANS: Exception thrown when an IRC attempts count could not be updated.\r
-#. TRANS: %d is the object ID for which the count could not be updated.\r
-#, php-format
-msgid "Could not increment attempts count for %d."
-msgstr "Не вдалося збільшити кількість спроб для %d."
-
-#. TRANS: Message given when using an unregistered IRC nickname.
-msgid "Your nickname is not registered so IRC connectivity cannot be enabled."
-msgstr ""
-"Ваш псевдонім не зареєстровано і тому підключення до IRC увімкнути неможливо."
-
-#. TRANS: Server error thrown on database error when deleting IRC nickname confirmation.
-msgid "Could not delete confirmation."
-msgstr "Не вдалося видалити підтвердження."
-
-#. TRANS: Server exception thrown when an IRC waiting queue item could not be added to the database.
-msgid "Database error inserting IRC waiting queue item."
-msgstr "Помилка бази даних при вставці елемента черги очікування IRC."
index 0efaec99b201b8b6d61e0d42f54070242393bfec..8eeb1004b0890d7a912f57db0014003f300f21e1 100644 (file)
@@ -58,7 +58,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
         return parent::onAutoload($cls);
     }
 
-    function onEndShowPageNotice($action)
+    function onEndShowPageNotice(Action $action)
     {
         $name = $action->trimmed('action');
         $instr = false;
index 095cfe03d7cbe765b891f97433e9576756f022c7..c0473fb597633a75929b96edc397e7153ed2039f 100644 (file)
@@ -49,7 +49,7 @@ class OembedproxyAction extends OembedAction
     function handle(array $args=array())
     {
         // Trigger short error responses; not a human-readable web page.
-        StatusNet::setApi(true);
+        GNUsocial::setApi(true);
 
         // We're not a general oEmbed proxy service; limit to valid sessions.
         $token = $this->trimmed('token');
index 7356607ce248db2fe9f6efabcf0796478c9bfa4a..91e3edac406b3ef8ac79fae0f242d846f07af230 100644 (file)
@@ -102,7 +102,7 @@ class MapstractionPlugin extends Plugin
                                     urlencode($this->apikey)));
             break;
         case 'microsoft':
-            $action->script((StatusNet::isHTTPS()?'https':'http') + '://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6');
+            $action->script((GNUsocial::isHTTPS()?'https':'http') + '://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6');
             break;
         case 'openlayers':
             // Use our included stripped & minified OpenLayers.
index cb51e980f3760c95e5345b16a77a032f8c72c877..e2d6c876745d061eef174919f2bf156dab21e178 100644 (file)
@@ -51,7 +51,7 @@ class MinifyPlugin extends Plugin
      *
      * @return boolean hook return
      */
-    function onStartInitializeRouter($m)
+    function onStartInitializeRouter(URLMapper $m)
     {
         $m->connect('main/min',
                     array('action' => 'minify'));
index 66ad948e6d9cb376b5d6c38cbd231fd4de43cb2b..d45864bd6c537b6137de6b0b797331ea2379daa2 100644 (file)
@@ -46,11 +46,11 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
  */
 class Notice_title extends Managed_DataObject
 {
-    const MAXCHARS = 255;
+    const MAXCHARS = 191;   // not 255 because utf8mb4 takes more space
 
     public $__table = 'notice_title'; // table name
     public $notice_id;                         // int(11)  primary_key not_null
-    public $title;                             // varchar(255)
+    public $title;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                           // datetime()   not_null
     public $modified;                          // timestamp()   not_null default_CURRENT_TIMESTAMP
 
index 1dab72b2e0fc95d941dc6c3f8bdcaf38094911dd..95514112ca63e08c7518175ca82e1502d9910f3e 100644 (file)
@@ -30,7 +30,7 @@ class PushCallbackAction extends Action
 {
     protected function handle()
     {
-        StatusNet::setApi(true); // Minimize error messages to aid in debugging
+        GNUsocial::setApi(true); // Minimize error messages to aid in debugging
         parent::handle();
         if ($this->isPost()) {
             return $this->handlePost();
index 5ab1fc23d833d435787eda24144c363ee15dcc93..5d0b9fbf903f64686388e4eeefc494bdddccc511 100644 (file)
@@ -49,7 +49,7 @@ class PushHubAction extends Action
 
     protected function prepare(array $args=array())
     {
-        StatusNet::setApi(true); // reduce exception reports to aid in debugging
+        GNUsocial::setApi(true); // reduce exception reports to aid in debugging
         return parent::prepare($args);
     }
 
index f6dcd72856a5df993ba90dde5c89889a002ea514..149d57f63cc76b996e9bd4701c3c8f51bb366e9c 100644 (file)
@@ -62,7 +62,7 @@ class FeedSub extends Managed_DataObject
     public $__table = 'feedsub';
 
     public $id;
-    public $uri;
+    public $uri;    // varchar(191)   not 255 because utf8mb4 takes more space
 
     // PuSH subscription data
     public $huburi;
@@ -80,7 +80,7 @@ class FeedSub extends Managed_DataObject
         return array(
             'fields' => array(
                 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'FeedSub local unique id'),
-                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'FeedSub uri'),
+                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'FeedSub uri'),
                 'huburi' => array('type' => 'text', 'description' => 'FeedSub hub-uri'),
                 'secret' => array('type' => 'text', 'description' => 'FeedSub stored secret'),
                 'sub_state' => array('type' => 'enum("subscribe","active","unsubscribe","inactive","nohub")', 'not null' => true, 'description' => 'subscription state'),
index 96c6986cdf7923b7446e25b43f98179baeec2831..c9d65c56a7a45b09a6beff359f1d2753207eeb23 100644 (file)
@@ -31,8 +31,8 @@ class HubSub extends Managed_DataObject
     public $__table = 'hubsub';
 
     public $hashkey; // sha1(topic . '|' . $callback); (topic, callback) key is too long for myisam in utf8
-    public $topic;
-    public $callback;
+    public $topic;      // varchar(191)   not 255 because utf8mb4 takes more space
+    public $callback;   // varchar(191)   not 255 because utf8mb4 takes more space
     public $secret;
     public $lease;
     public $sub_start;
@@ -55,8 +55,8 @@ class HubSub extends Managed_DataObject
         return array(
             'fields' => array(
                 'hashkey' => array('type' => 'char', 'not null' => true, 'length' => 40, 'description' => 'HubSub hashkey'),
-                'topic' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'HubSub topic'),
-                'callback' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'HubSub callback'),
+                'topic' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'HubSub topic'),
+                'callback' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'HubSub callback'),
                 'secret' => array('type' => 'text', 'description' => 'HubSub stored secret'),
                 'lease' => array('type' => 'int', 'description' => 'HubSub leasetime'),
                 'sub_start' => array('type' => 'datetime', 'description' => 'subscription start'),
index d5ad33a91e8c258582d0f7cc33d473af55a602e6..cdf1353fc198e38742663da065cd6be700475891 100644 (file)
@@ -51,12 +51,12 @@ class Ostatus_profile extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'uri' => array('type' => 'varchar', 'length' => 255, 'not null' => true),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'not null' => true),
                 'profile_id' => array('type' => 'integer'),
                 'group_id' => array('type' => 'integer'),
                 'peopletag_id' => array('type' => 'integer'),
-                'feeduri' => array('type' => 'varchar', 'length' => 255),
-                'salmonuri' => array('type' => 'varchar', 'length' => 255),
+                'feeduri' => array('type' => 'varchar', 'length' => 191),
+                'salmonuri' => array('type' => 'varchar', 'length' => 191),
                 'avatar' => array('type' => 'text'),
                 'created' => array('type' => 'datetime', 'not null' => true),
                 'modified' => array('type' => 'datetime', 'not null' => true),
@@ -622,7 +622,7 @@ class Ostatus_profile extends Managed_DataObject
 
         // Get (safe!) HTML and text versions of the content
 
-        $rendered = $this->purify($sourceContent);
+        $rendered = common_purify($sourceContent);
         $content = common_strip_html($rendered);
 
         $shortened = common_shorten_links($content);
@@ -789,7 +789,7 @@ class Ostatus_profile extends Managed_DataObject
 
         // Get (safe!) HTML and text versions of the content
 
-        $rendered = $this->purify($sourceContent);
+        $rendered = common_purify($sourceContent);
         $content = common_strip_html($rendered);
 
         $shortened = common_shorten_links($content);
@@ -915,17 +915,6 @@ class Ostatus_profile extends Managed_DataObject
         return $saved;
     }
 
-    /**
-     * Clean up HTML
-     */
-    protected function purify($html)
-    {
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*');
-        return htmLawed($html, $config);
-    }
-
     /**
      * Filters a list of recipient ID URIs to just those for local delivery.
      * @param Profile local profile of sender
@@ -1132,6 +1121,11 @@ class Ostatus_profile extends Managed_DataObject
      */
     public static function ensureFeedURL($feed_url, array $hints=array())
     {
+        $oprofile = Ostatus_profile::getKV('feeduri', $feed_url);
+        if ($oprofile instanceof Ostatus_profile) {
+            return $oprofile;
+        }
+
         $discover = new FeedDiscovery();
 
         $feeduri = $discover->discoverFromFeedURL($feed_url);
@@ -1263,10 +1257,12 @@ class Ostatus_profile extends Managed_DataObject
         $temp_filename = tempnam(common_get_temp_dir(), 'listener_avatar');
         try {
             $imgData = HTTPClient::quickGet($url);
+
             // Make sure it's at least an image file. ImageFile can do the rest.
             if (false === getimagesizefromstring($imgData)) {
                 throw new UnsupportedMediaException(_('Downloaded group avatar was not an image.'));
             }
+
             file_put_contents($temp_filename, $imgData);
             unset($imgData);    // No need to carry this in memory.
 
@@ -1807,8 +1803,8 @@ class Ostatus_profile extends Managed_DataObject
         }
 
         if (!empty($location)) {
-            if (mb_strlen($location) > 255) {
-                $location = mb_substr($note, 0, 255 - 3) . ' … ';
+            if (mb_strlen($location) > 191) {   // not 255 because utf8mb4 takes more space
+                $location = mb_substr($note, 0, 191 - 3) . ' … ';
             }
         }
 
@@ -2099,13 +2095,15 @@ class Ostatus_profile extends Managed_DataObject
                                    'text/html');
 
         $filepath = File::path($filename);
+        $fileurl = File::url($filename);
 
         file_put_contents($filepath, $final);
 
         $file = new File;
 
         $file->filename = $filename;
-        $file->url      = File::url($filename);
+        $file->urlhash  = File::hashurl($fileurl);
+        $file->url      = $fileurl;
         $file->size     = filesize($filepath);
         $file->date     = time();
         $file->mimetype = 'text/html';
index 6cecc323e0986e8247a9b218598b8c857f443ba8..88a6a58383577c8bc11af34801bca4c82aee5f4d 100644 (file)
@@ -40,7 +40,7 @@ class Ostatus_source extends Managed_DataObject
         return array(
             'fields' => array(
                 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'Notice ID relation'),
-                'profile_uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'Profile URI'),
+                'profile_uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'Profile URI'),
                 'method' => array('type' => 'enum("push","salmon")', 'not null' => true, 'description' => 'source method'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index eb68632d38ff3f5e4821f530803ef6d6c07bbd2f..fdfb58df08d84e311a94b1c48975eb0e87e301f0 100644 (file)
@@ -37,7 +37,7 @@ class SalmonAction extends Action
 
     protected function prepare(array $args=array())
     {
-        StatusNet::setApi(true); // Send smaller error pages
+        GNUsocial::setApi(true); // Send smaller error pages
 
         parent::prepare($args);
 
@@ -245,7 +245,12 @@ class SalmonAction extends Action
                 // Step 4: Is the newly introduced https://example.com/user/1 URI in the list of aliases
                 //         presented by http://example.com/user/1 (i.e. do they both say they are the same identity?)
                 if (in_array($e->object_uri, $doublecheck_aliases)) {
-                    common_debug('These identities both say they are each other: "'.$aliased_uri.'" and "'.$e->object_uri);
+                    common_debug('URIFIX These identities both say they are each other: "'.$aliased_uri.'" and "'.$e->object_uri.'"');
+                    $orig = clone($oprofile);
+                    $oprofile->uri = $e->object_uri;
+                    common_debug('URIFIX Updating Ostatus_profile URI for '.$aliased_uri.' to '.$oprofile->uri);
+                    $oprofile->updateWithKeys($orig, 'uri');    // 'uri' is the primary key column
+                    unset($orig);
                     $this->oprofile = $oprofile;
                     break;  // don't iterate through aliases anymore
                 }
index a366103a021f92cca829e3c12039397ddfc34588..44e5d1a72bad57e2a46e38a2a3f7e72d741861d3 100644 (file)
@@ -182,7 +182,7 @@ class OembedPlugin extends Plugin
         case 'video':
         case 'link':
             if (!empty($oembed->html)
-                    && (StatusNet::isAjax() || common_config('attachments', 'show_html'))) {
+                    && (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
                 require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
                 $config = array(
                     'safe'=>1,
index 32dfca0968d3351084969bf490c48a821865015b..6bd7860c562fe72212d131caeb930c5177ce211e 100644 (file)
@@ -31,14 +31,14 @@ class File_oembed extends Managed_DataObject
     public $type;                            // varchar(20)
     public $mimetype;                        // varchar(50)
     public $provider;                        // varchar(50)
-    public $provider_url;                    // varchar(255)
+    public $provider_url;                    // varchar(191)   not 255 because utf8mb4 takes more space
     public $width;                           // int(4)
     public $height;                          // int(4)
     public $html;                            // text()
-    public $title;                           // varchar(255)
+    public $title;                           // varchar(191)   not 255 because utf8mb4 takes more space
     public $author_name;                     // varchar(50)
-    public $author_url;                      // varchar(255)
-    public $url;                             // varchar(255)
+    public $author_url;                      // varchar(191)   not 255 because utf8mb4 takes more space
+    public $url;                             // varchar(191)   not 255 because utf8mb4 takes more space
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
     public static function schemaDef()
@@ -50,14 +50,14 @@ class File_oembed extends Managed_DataObject
                 'type' => array('type' => 'varchar', 'length' => 20, 'description' => 'oEmbed type: photo, video, link, rich'),
                 'mimetype' => array('type' => 'varchar', 'length' => 50, 'description' => 'mime type of resource'),
                 'provider' => array('type' => 'varchar', 'length' => 50, 'description' => 'name of this oEmbed provider'),
-                'provider_url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL of this oEmbed provider'),
+                'provider_url' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL of this oEmbed provider'),
                 'width' => array('type' => 'int', 'description' => 'width of oEmbed resource when available'),
                 'height' => array('type' => 'int', 'description' => 'height of oEmbed resource when available'),
                 'html' => array('type' => 'text', 'description' => 'html representation of this oEmbed resource when applicable'),
-                'title' => array('type' => 'varchar', 'length' => 255, 'description' => 'title of oEmbed resource when available'),
+                'title' => array('type' => 'varchar', 'length' => 191, 'description' => 'title of oEmbed resource when available'),
                 'author_name' => array('type' => 'varchar', 'length' => 50, 'description' => 'author name for this oEmbed resource'),
-                'author_url' => array('type' => 'varchar', 'length' => 255, 'description' => 'author URL for this oEmbed resource'),
-                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL for this oEmbed resource when applicable (photo, link)'),
+                'author_url' => array('type' => 'varchar', 'length' => 191, 'description' => 'author URL for this oEmbed resource'),
+                'url' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL for this oEmbed resource when applicable (photo, link)'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
             ),
             'primary key' => array('file_id'),
index 7568af496099f0a655b0db1c7392f81322089b02..5cd71e6e17797a4665a775d0db36a7c6eef9ad52 100644 (file)
@@ -273,7 +273,7 @@ class OpenIDPlugin extends Plugin
      *
      * @return boolean hook return
      */
-    function onEndLoginGroupNav($action)
+    function onEndLoginGroupNav(Action $action)
     {
         $this->showOpenIDLoginTab($action);
 
@@ -453,7 +453,7 @@ class OpenIDPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onEndShowPageNotice($action)
+    function onEndShowPageNotice(Action $action)
     {
         $name = $action->trimmed('action');
 
@@ -547,13 +547,13 @@ class OpenIDPlugin extends Plugin
                              array(
                                  'fields' => array(
                                      'server_url' => array('type' => 'blob', 'not null' => true),
-                                     'handle' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => ''), // character set latin1,
+                                     'handle' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'default' => ''), // character set latin1,
                                      'secret' => array('type' => 'blob'),
                                      'issued' => array('type' => 'int'),
                                      'lifetime' => array('type' => 'int'),
                                      'assoc_type' => array('type' => 'varchar', 'length' => 64),
                                  ),
-                                 'primary key' => array(array('server_url', 255), 'handle'),
+                                 'primary key' => array(array('server_url', 191), 'handle'),
                              ));
         $schema->ensureTable('oid_nonces',
                              array(
@@ -563,7 +563,7 @@ class OpenIDPlugin extends Plugin
                                      'salt' => array('type' => 'char', 'length' => 40),
                                  ),
                                  'unique keys' => array(
-                                     'oid_nonces_server_url_timestamp_salt_key' => array(array('server_url', 255), 'timestamp', 'salt'),
+                                     'oid_nonces_server_url_timestamp_salt_key' => array(array('server_url', 191), 'timestamp', 'salt'),
                                  ),
                              ));
 
index baff5cd7f96ce8ee24a30c12d2d1cb8f33964d8f..7e53d8ec959893f1dd80ac5724f91175d0765e29 100644 (file)
@@ -13,8 +13,8 @@ class User_openid extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'user_openid';                     // table name
-    public $canonical;                       // varchar(255)  primary_key not_null
-    public $display;                         // varchar(255)  unique_key not_null
+    public $canonical;                       // varchar(191)  primary_key not_null
+    public $display;                         // varchar(191)  unique_key not_null
     public $user_id;                         // int(4)   not_null
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -26,8 +26,8 @@ class User_openid extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'canonical' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'OpenID canonical string'),
-                'display' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'OpenID display string'),
+                'canonical' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'OpenID canonical string'),
+                'display' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'OpenID display string'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'User ID for OpenID owner'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index ec09e179e439d3a2704bf70fc82e73ceb7b6933c..575854c332f8eb185ebc02eec77925657e6d3ac3 100644 (file)
@@ -13,7 +13,7 @@ class User_openid_trustroot extends Managed_DataObject
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'user_openid_trustroot';                     // table name
-    public $trustroot;                         // varchar(255) primary_key not_null
+    public $trustroot;                         // varchar(191) primary_key not_null   not 255 because utf8mb4 takes more space
     public $user_id;                         // int(4)  primary_key not_null
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -25,7 +25,7 @@ class User_openid_trustroot extends Managed_DataObject
     {
         return array(
             'fields' => array(
-                'trustroot' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'OpenID trustroot string'),
+                'trustroot' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'OpenID trustroot string'),
                 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'User ID for OpenID trustroot owner'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 32f11f12ce4fefacbf1b9dc1c4e9c327cbe9b22a..fdd484caefff0b5264c24940cb65b79ca9eb3bf9 100644 (file)
@@ -40,7 +40,7 @@ class OpportunisticQMPlugin extends Plugin {
      * When the page has finished rendering, let's do some cron jobs
      * if we have the time.
      */
-    public function onEndActionExecute($status, Action $action)
+    public function onEndActionExecute(Action $action)
     {
         if ($action instanceof RunqueueAction) {
             return true;
index e313bef5487e75b720d5c98d42206176dee1a15e..09d6765fbac74e62fbed816c477708e0f4a430e2 100644 (file)
@@ -125,7 +125,7 @@ class NewPollAction extends Action
     function newPoll()
     {
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
         try {
             if (empty($this->question)) {
index c2b577209e29b54acc2112f809a7e1bfb508367a..c78038478daae2244a9d4a24852d49a9d5b1639d 100644 (file)
@@ -74,7 +74,7 @@ class RespondPollAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->user = common_current_user();
index 850b5fc0578ed47e30ccaaded8e0196e9fe70827..1296733c99c9b1fa0f96291526dec3cbc305bdc2 100644 (file)
@@ -47,7 +47,7 @@ class Poll extends Managed_DataObject
 {
     public $__table = 'poll'; // table name
     public $id;          // char(36) primary key not null -> UUID
-    public $uri;
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $profile_id;  // int -> profile.id
     public $question;    // text
     public $options;     // text; newline(?)-delimited
@@ -62,7 +62,7 @@ class Poll extends Managed_DataObject
             'description' => 'Per-notice poll data for Poll plugin',
             'fields' => array(
                 'id' => array('type' => 'char', 'length' => 36, 'not null' => true, 'description' => 'UUID'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'not null' => true),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'not null' => true),
                 'profile_id' => array('type' => 'int'),
                 'question' => array('type' => 'text'),
                 'options' => array('type' => 'text'),
index 0700780921d8be972b8ca362b815092e134a3435..0a828bf46908d29f570b6f21da9b2abe91f1e8cc 100644 (file)
@@ -46,7 +46,7 @@ class Poll_response extends Managed_DataObject
 {
     public $__table = 'poll_response'; // table name
     public $id;          // char(36) primary key not null -> UUID
-    public $uri;          // varchar(255)
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $poll_id;     // char(36) -> poll.id UUID
     public $profile_id;  // int -> profile.id
     public $selection;   // int -> choice #
@@ -61,7 +61,7 @@ class Poll_response extends Managed_DataObject
             'description' => 'Record of responses to polls',
             'fields' => array(
                 'id' => array('type' => 'char', 'length' => 36, 'not null' => true, 'description' => 'UUID of the response'),
-                'uri' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'description' => 'UUID to the response notice'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'not null' => true, 'description' => 'UUID to the response notice'),
                 'poll_id' => array('type' => 'char', 'length' => 36, 'not null' => true, 'description' => 'UUID of poll being responded to'),
                 'profile_id' => array('type' => 'int'),
                 'selection' => array('type' => 'int'),
index 52e69a3aa62d6571220fc381d6e32e7e3dca15e2..2cafde91fc9f14939917010305a5eb43ed18b15a 100644 (file)
@@ -74,7 +74,7 @@ class QnaclosequestionAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->user = common_current_user();
index 1a16a3fa6b9ad790950781b283d020825e729e22..561ea2e01639587117edda5f790a89b2ad61ae04 100644 (file)
@@ -74,7 +74,7 @@ class QnanewanswerAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
         common_debug("in qnanewanswer");
         $this->user = common_current_user();
index c7a126e703bf88c1976bd4952e201d8460ae8b66..24a91f69c957fc975bfb364c3781b1bbd691cf8d 100644 (file)
@@ -121,7 +121,7 @@ class QnanewquestionAction extends Action
     function newQuestion()
     {
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
         try {
             if (empty($this->title)) {
index 43ce50429c1cdb9838dee790efcab8dfc9d562b9..92fcfd8c92997afbfc236caf650c284ab82daaa0 100644 (file)
@@ -73,7 +73,7 @@ class QnareviseanswerAction extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->user = common_current_user();
index ee0cd45860d7b4a75bea9617d696d5b0af3fd04f..00395d82e50f418528559537ce04ba61cbd97d2f 100644 (file)
@@ -74,7 +74,7 @@ class Qnavote extends Action
     {
         parent::prepare($argarray);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         $this->user = common_current_user();
index 1eb74a66c6411b587bd30ab7ea5778f12cc7f3c1..d04159f9b9375e529240ffdb49d71ed331c7830c 100644 (file)
@@ -48,7 +48,7 @@ class QnA_Answer extends Managed_DataObject
 
     public $__table = 'qna_answer'; // table name
     public $id;          // char(36) primary key not null -> UUID
-    public $uri;         // varchar(255)
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $question_id; // char(36) -> question.id UUID
     public $profile_id;  // int -> question.id
     public $best;        // (boolean) int -> whether the question asker has marked this as the best answer
@@ -71,7 +71,7 @@ class QnA_Answer extends Managed_DataObject
                 ),
                 'uri'      => array(
                     'type'        => 'varchar',
-                    'length'      => 255,
+                    'length'      => 191,
                     'not null'    => true,
                     'description' => 'UUID to the answer notice',
                 ),
index 977f93fe4704022fb02d34d4e801cd554a6a5877..079f09fb6bf46143383d64a343a1f37ba93ba8e6 100644 (file)
@@ -48,7 +48,7 @@ class QnA_Question extends Managed_DataObject
 
     public $__table = 'qna_question'; // table name
     public $id;          // char(36) primary key not null -> UUID
-    public $uri;
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $profile_id;  // int -> profile.id
     public $title;       // text
     public $description; // text
@@ -71,7 +71,7 @@ class QnA_Question extends Managed_DataObject
                 ),
                 'uri' => array(
                     'type'     => 'varchar',
-                    'length'   => 255,
+                    'length'   => 191,
                     'not null' => true
                 ),
                 'profile_id'  => array('type' => 'int'),
index 1b71ac903e98bd62528bcc8117c86fee4fc9545f..87890d15f84415844359cc7e55503fe345ad12ef 100644 (file)
@@ -175,7 +175,7 @@ class RSSCloudPlugin extends Plugin
             array(
                 'fields' => array(
                     'subscribed' => array('type' => 'int', 'not null' => true),
-                    'url' => array('type' => 'varchar', 'length' => '255', 'not null' => true),
+                    'url' => array('type' => 'varchar', 'length' => '191', 'not null' => true),
                     'failures' => array('type' => 'int', 'not null' => true, 'default' => 0),
                     'created' => array('type' => 'datetime', 'not null' => true),
                     'modified' => array('type' => 'timestamp', 'not null' => true),
index 5d6f0ff99afc75272168bfcd536a05852a1417a4..7541593433f905c9209bf9aaf2f2eb203585c8c2 100644 (file)
@@ -53,9 +53,9 @@ class Realtime_channel extends Managed_DataObject
     public $__table = 'realtime_channel'; // table name
 
     public $user_id;       // int -> user.id, can be null
-    public $action;        // string
-    public $arg1;          // argument
-    public $arg2;          // argument, usually null
+    public $action;        // varchar(191)                  not 255 because utf8mb4 takes more space
+    public $arg1;          // varchar(191)   argument       not 255 because utf8mb4 takes more space
+    public $arg2;          // varchar(191)   usually null   not 255 because utf8mb4 takes more space
     public $channel_key;   // 128-bit shared secret key
     public $audience;      // listener count
     public $created;       // created date
@@ -73,15 +73,15 @@ class Realtime_channel extends Managed_DataObject
                                    'not null' => false,
                                    'description' => 'user viewing page; can be null'),
                 'action' => array('type' => 'varchar',
-                                  'length' => 255,
+                                  'length' => 191,
                                   'not null' => true,
                                   'description' => 'page being viewed'),
                 'arg1' => array('type' => 'varchar',
-                                'length' => 255,
+                                'length' => 191,
                                 'not null' => false,
                                 'description' => 'page argument, like username or tag'),
                 'arg2' => array('type' => 'varchar',
-                                'length' => 255,
+                                'length' => 191,
                                 'not null' => false,
                                 'description' => 'second page argument, like tag for showstream'),
                 'channel_key' => array('type' => 'varchar',
index 220d85b7e4b10355e4f64ac021524bacb37c4e78..b6035bfac56227814ffb7d0e3b8945577b8a861c 100644 (file)
@@ -62,7 +62,7 @@ if (have_option('u', 'universe')) {
     if ($sn->find()) {
         while ($sn->fetch()) {
             $server = $sn->getServerName();
-            StatusNet::init($server);
+            GNUsocial::init($server);
             cleanupChannels();
         }
     }
index 3b77caff139888c890bfc722bf65e78e6c570897..f205b4c15ac0ce8fc73f2c81d7a807fe38be4e7d 100644 (file)
@@ -71,7 +71,7 @@ class RecaptchaPlugin extends Plugin
     {
         if (isset($action->recaptchaPluginNeedsOutput) && $action->recaptchaPluginNeedsOutput) {
             // Load the AJAX API
-            if (StatusNet::isHTTPS()) {
+            if (GNUsocial::isHTTPS()) {
                 $url = "https://www.google.com/recaptcha/api/js/recaptcha_ajax.js";
             } else {
                 $url = "http://www.google.com/recaptcha/api/js/recaptcha_ajax.js";
index ee7a88e2dfc163b70600ebc3e4aceb99b9a2ef18..de43da3aa7583a2a28ddfebfcc89b25ef820c8a6 100644 (file)
@@ -67,7 +67,7 @@ class SearchsubAction extends Action
     {
         parent::prepare($args);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         // Only allow POST requests
diff --git a/plugins/Spotify/locale/Spotify.pot b/plugins/Spotify/locale/Spotify.pot
deleted file mode 100644 (file)
index 067d910..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Plugin description.
-#: SpotifyPlugin.php:84
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
diff --git a/plugins/Spotify/locale/de/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/de/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index 3db2743..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - Spotify to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: ChrisiPK
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr "Schöne <a href=\"http://www.spotify.com\">Spotify</a>-URLs erstellen."
diff --git a/plugins/Spotify/locale/es/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/es/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index b57a11f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Translation of StatusNet - Spotify to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Armando-Martin
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
-"Crear direcciones URL para <a href=\"http://www.spotify.com\">Spotify</a>."
diff --git a/plugins/Spotify/locale/fr/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/fr/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index 52f3ad5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Translation of StatusNet - Spotify to French (français)
-# Exported from translatewiki.net
-#
-# Author: Gomoko
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr "Créer de jolies URLs <a href=\"http://www.spotify.com\">Spotify</a>."
diff --git a/plugins/Spotify/locale/gl/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/gl/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index d933770..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - Spotify to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
-"Crear enderezos URL para <a href=\"http://www.spotify.com\">Spotify</a>."
diff --git a/plugins/Spotify/locale/he/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/he/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index 28f1678..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - Spotify to Hebrew (עברית)
-# Exported from translatewiki.net
-#
-# Author: Amire80
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Language-Team: Hebrew <https://translatewiki.net/wiki/Portal:he>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr "יצירת כתובות יפות ל־<a href=\"http://www.spotify.com\">Spotify</a>."
diff --git a/plugins/Spotify/locale/ia/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/ia/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index 3185173..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - Spotify to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr "Crear belle URLs de <a href=\"http://www.spotify.com\">Spotify</a>."
diff --git a/plugins/Spotify/locale/mk/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/mk/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index b1c86f1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - Spotify to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:06+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
-"Правете интересни и убави URL-адреси со <a href=\"http://www.spotify.com"
-"\">Spotify</a>."
diff --git a/plugins/Spotify/locale/nl/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/nl/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index be97552..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - Spotify to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:07+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr "Maak mooie <a href=\"http://www.spotify.com\">Spotify-URL's</a>."
diff --git a/plugins/Spotify/locale/sv/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/sv/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index fa3b155..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - Spotify to Swedish (svenska)
-# Exported from translatewiki.net
-#
-# Author: WikiPhoenix
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:07+0000\n"
-"Language-Team: Swedish <https://translatewiki.net/wiki/Portal:sv>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: sv\n"
-"X-Message-Group: #out-statusnet-plugin-spotify\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
-"Skapa vackra <a href=\"http://www.spotify.com\">Spotify</a>-webbadresser."
diff --git a/plugins/Spotify/locale/tl/LC_MESSAGES/Spotify.po b/plugins/Spotify/locale/tl/LC_MESSAGES/Spotify.po
deleted file mode 100644 (file)
index 64c13c1..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Translation of StatusNet - Spotify to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - Spotify\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:07+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-19 11:23:27+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Create pretty <a href=\"http://www.spotify.com\">Spotify</a> URLs."
-msgstr ""
-"Lumikha ng marilag na mga URL ng <a href=\"http://www.spotify.com\">Spotify</"
-"a>."
index f60d78e526b42b0eeb86c8a05600abfa04ec4600..a87081bd4c85353398fcb17299e4580e6480d708 100644 (file)
@@ -67,7 +67,7 @@ class TagsubAction extends Action
     {
         parent::prepare($args);
         if ($this->boolean('ajax')) {
-            StatusNet::setApi(true);
+            GNUsocial::setApi(true);
         }
 
         // Only allow POST requests
diff --git a/plugins/TinyMCE/icons/placeholder.png b/plugins/TinyMCE/icons/placeholder.png
deleted file mode 100644 (file)
index 911f257..0000000
Binary files a/plugins/TinyMCE/icons/placeholder.png and /dev/null differ
diff --git a/plugins/TinyMCE/icons/placeholder.xcf b/plugins/TinyMCE/icons/placeholder.xcf
deleted file mode 100644 (file)
index e05f8a9..0000000
Binary files a/plugins/TinyMCE/icons/placeholder.xcf and /dev/null differ
diff --git a/plugins/TinyMCE/js/jquery.tinymce.js b/plugins/TinyMCE/js/jquery.tinymce.js
deleted file mode 100644 (file)
index 4866c2a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(b){var e,d,a=[],c=window;b.fn.tinymce=function(j){var p=this,g,k,h,m,i,l="",n="";if(!p.length){return p}if(!j){return tinyMCE.get(p[0].id)}function o(){var r=[],q=0;if(f){f();f=null}p.each(function(t,u){var s,w=u.id,v=j.oninit;if(!w){u.id=w=tinymce.DOM.uniqueId()}s=new tinymce.Editor(w,j);r.push(s);if(v){s.onInit.add(function(){var x,y=v;if(++q==r.length){if(tinymce.is(y,"string")){x=(y.indexOf(".")===-1)?null:tinymce.resolve(y.replace(/\.\w+$/,""));y=tinymce.resolve(y)}y.apply(x||tinymce,r)}})}});b.each(r,function(t,s){s.render()})}if(!c.tinymce&&!d&&(g=j.script_url)){d=1;h=g.substring(0,g.lastIndexOf("/"));if(/_(src|dev)\.js/g.test(g)){n="_src"}m=g.lastIndexOf("?");if(m!=-1){l=g.substring(m+1)}c.tinyMCEPreInit=c.tinyMCEPreInit||{base:h,suffix:n,query:l};if(g.indexOf("gzip")!=-1){i=j.language||"en";g=g+(/\?/.test(g)?"&":"?")+"js=true&core=true&suffix="+escape(n)+"&themes="+escape(j.theme)+"&plugins="+escape(j.plugins)+"&languages="+i;if(!c.tinyMCE_GZ){tinyMCE_GZ={start:function(){tinymce.suffix=n;function q(r){tinymce.ScriptLoader.markDone(tinyMCE.baseURI.toAbsolute(r))}q("langs/"+i+".js");q("themes/"+j.theme+"/editor_template"+n+".js");q("themes/"+j.theme+"/langs/"+i+".js");b.each(j.plugins.split(","),function(s,r){if(r){q("plugins/"+r+"/editor_plugin"+n+".js");q("plugins/"+r+"/langs/"+i+".js")}})},end:function(){}}}}b.ajax({type:"GET",url:g,dataType:"script",cache:true,success:function(){tinymce.dom.Event.domLoaded=1;d=2;if(j.script_loaded){j.script_loaded()}o();b.each(a,function(q,r){r()})}})}else{if(d===1){a.push(o)}else{o()}}return p};b.extend(b.expr[":"],{tinymce:function(g){return g.id&&!!tinyMCE.get(g.id)}});function f(){function i(l){if(l==="remove"){this.each(function(n,o){var m=h(o);if(m){m.remove()}})}this.find("span.mceEditor,div.mceEditor").each(function(n,o){var m=tinyMCE.get(o.id.replace(/_parent$/,""));if(m){m.remove()}})}function k(n){var m=this,l;if(n!==e){i.call(m);m.each(function(p,q){var o;if(o=tinyMCE.get(q.id)){o.setContent(n)}})}else{if(m.length>0){if(l=tinyMCE.get(m[0].id)){return l.getContent()}}}}function h(m){var l=null;(m)&&(m.id)&&(c.tinymce)&&(l=tinyMCE.get(m.id));return l}function g(l){return !!((l)&&(l.length)&&(c.tinymce)&&(l.is(":tinymce")))}var j={};b.each(["text","html","val"],function(n,l){var o=j[l]=b.fn[l],m=(l==="text");b.fn[l]=function(s){var p=this;if(!g(p)){return o.apply(p,arguments)}if(s!==e){k.call(p.filter(":tinymce"),s);o.apply(p.not(":tinymce"),arguments);return p}else{var r="";var q=arguments;(m?p:p.eq(0)).each(function(u,v){var t=h(v);r+=t?(m?t.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):t.getContent()):o.apply(b(v),q)});return r}}});b.each(["append","prepend"],function(n,m){var o=j[m]=b.fn[m],l=(m==="prepend");b.fn[m]=function(q){var p=this;if(!g(p)){return o.apply(p,arguments)}if(q!==e){p.filter(":tinymce").each(function(s,t){var r=h(t);r&&r.setContent(l?q+r.getContent():r.getContent()+q)});o.apply(p.not(":tinymce"),arguments);return p}}});b.each(["remove","replaceWith","replaceAll","empty"],function(m,l){var n=j[l]=b.fn[l];b.fn[l]=function(){i.call(this,l);return n.apply(this,arguments)}});j.attr=b.fn.attr;b.fn.attr=function(n,q,o){var m=this;if((!n)||(n!=="value")||(!g(m))){return j.attr.call(m,n,q,o)}if(q!==e){k.call(m.filter(":tinymce"),q);j.attr.call(m.not(":tinymce"),n,q,o);return m}else{var p=m[0],l=h(p);return l?l.getContent():j.attr.call(b(p),n,q,o)}}}})(jQuery);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/langs/en.js b/plugins/TinyMCE/js/langs/en.js
deleted file mode 100644 (file)
index 8a80d46..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-tinyMCE.addI18n({en:{\r
-common:{\r
-edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",\r
-apply:"Apply",\r
-insert:"Insert",\r
-update:"Update",\r
-cancel:"Cancel",\r
-close:"Close",\r
-browse:"Browse",\r
-class_name:"Class",\r
-not_set:"-- Not set --",\r
-clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",\r
-clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",\r
-popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",\r
-invalid_data:"{#field} is invalid",\r
-invalid_data_number:"{#field} must be a number",\r
-invalid_data_min:"{#field} must be a number greater than {#min}",\r
-invalid_data_size:"{#field} must be a number or percentage",\r
-more_colors:"More colors"\r
-},\r
-colors:{\r
-'000000':'Black',\r
-'993300':'Burnt orange',\r
-'333300':'Dark olive',\r
-'003300':'Dark green',\r
-'003366':'Dark azure',\r
-'000080':'Navy Blue',\r
-'333399':'Indigo',\r
-'333333':'Very dark gray',\r
-'800000':'Maroon',\r
-'FF6600':'Orange',\r
-'808000':'Olive',\r
-'008000':'Green',\r
-'008080':'Teal',\r
-'0000FF':'Blue',\r
-'666699':'Grayish blue',\r
-'808080':'Gray',\r
-'FF0000':'Red',\r
-'FF9900':'Amber',\r
-'99CC00':'Yellow green',\r
-'339966':'Sea green',\r
-'33CCCC':'Turquoise',\r
-'3366FF':'Royal blue',\r
-'800080':'Purple',\r
-'999999':'Medium gray',\r
-'FF00FF':'Magenta',\r
-'FFCC00':'Gold',\r
-'FFFF00':'Yellow',\r
-'00FF00':'Lime',\r
-'00FFFF':'Aqua',\r
-'00CCFF':'Sky blue',\r
-'993366':'Brown',\r
-'C0C0C0':'Silver',\r
-'FF99CC':'Pink',\r
-'FFCC99':'Peach',\r
-'FFFF99':'Light yellow',\r
-'CCFFCC':'Pale green',\r
-'CCFFFF':'Pale cyan',\r
-'99CCFF':'Light sky blue',\r
-'CC99FF':'Plum',\r
-'FFFFFF':'White'\r
-},\r
-contextmenu:{\r
-align:"Alignment",\r
-left:"Left",\r
-center:"Center",\r
-right:"Right",\r
-full:"Full"\r
-},\r
-insertdatetime:{\r
-date_fmt:"%Y-%m-%d",\r
-time_fmt:"%H:%M:%S",\r
-insertdate_desc:"Insert date",\r
-inserttime_desc:"Insert time",\r
-months_long:"January,February,March,April,May,June,July,August,September,October,November,December",\r
-months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",\r
-day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",\r
-day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"\r
-},\r
-print:{\r
-print_desc:"Print"\r
-},\r
-preview:{\r
-preview_desc:"Preview"\r
-},\r
-directionality:{\r
-ltr_desc:"Direction left to right",\r
-rtl_desc:"Direction right to left"\r
-},\r
-layer:{\r
-insertlayer_desc:"Insert new layer",\r
-forward_desc:"Move forward",\r
-backward_desc:"Move backward",\r
-absolute_desc:"Toggle absolute positioning",\r
-content:"New layer..."\r
-},\r
-save:{\r
-save_desc:"Save",\r
-cancel_desc:"Cancel all changes"\r
-},\r
-nonbreaking:{\r
-nonbreaking_desc:"Insert non-breaking space character"\r
-},\r
-iespell:{\r
-iespell_desc:"Run spell checking",\r
-download:"ieSpell not detected. Do you want to install it now?"\r
-},\r
-advhr:{\r
-advhr_desc:"Horizontal rule"\r
-},\r
-emotions:{\r
-emotions_desc:"Emotions"\r
-},\r
-searchreplace:{\r
-search_desc:"Find",\r
-replace_desc:"Find/Replace"\r
-},\r
-advimage:{\r
-image_desc:"Insert/edit image"\r
-},\r
-advlink:{\r
-link_desc:"Insert/edit link"\r
-},\r
-xhtmlxtras:{\r
-cite_desc:"Citation",\r
-abbr_desc:"Abbreviation",\r
-acronym_desc:"Acronym",\r
-del_desc:"Deletion",\r
-ins_desc:"Insertion",\r
-attribs_desc:"Insert/Edit Attributes"\r
-},\r
-style:{\r
-desc:"Edit CSS Style"\r
-},\r
-paste:{\r
-paste_text_desc:"Paste as Plain Text",\r
-paste_word_desc:"Paste from Word",\r
-selectall_desc:"Select All",\r
-plaintext_mode_sticky:"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.",\r
-plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
-},\r
-paste_dlg:{\r
-text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
-text_linebreaks:"Keep linebreaks",\r
-word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
-},\r
-table:{\r
-desc:"Inserts a new table",\r
-row_before_desc:"Insert row before",\r
-row_after_desc:"Insert row after",\r
-delete_row_desc:"Delete row",\r
-col_before_desc:"Insert column before",\r
-col_after_desc:"Insert column after",\r
-delete_col_desc:"Remove column",\r
-split_cells_desc:"Split merged table cells",\r
-merge_cells_desc:"Merge table cells",\r
-row_desc:"Table row properties",\r
-cell_desc:"Table cell properties",\r
-props_desc:"Table properties",\r
-paste_row_before_desc:"Paste table row before",\r
-paste_row_after_desc:"Paste table row after",\r
-cut_row_desc:"Cut table row",\r
-copy_row_desc:"Copy table row",\r
-del:"Delete table",\r
-row:"Row",\r
-col:"Column",\r
-cell:"Cell"\r
-},\r
-autosave:{\r
-unload_msg:"The changes you made will be lost if you navigate away from this page.",\r
-restore_content:"Restore auto-saved content.",\r
-warning_message:"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?."\r
-},\r
-fullscreen:{\r
-desc:"Toggle fullscreen mode"\r
-},\r
-media:{\r
-desc:"Insert / edit embedded media",\r
-edit:"Edit embedded media"\r
-},\r
-fullpage:{\r
-desc:"Document properties"\r
-},\r
-template:{\r
-desc:"Insert predefined template content"\r
-},\r
-visualchars:{\r
-desc:"Visual control characters on/off."\r
-},\r
-spellchecker:{\r
-desc:"Toggle spellchecker",\r
-menu:"Spellchecker settings",\r
-ignore_word:"Ignore word",\r
-ignore_words:"Ignore all",\r
-langs:"Languages",\r
-wait:"Please wait...",\r
-sug:"Suggestions",\r
-no_sug:"No suggestions",\r
-no_mpell:"No misspellings found.",\r
-learn_word:"Learn word" \r
-},\r
-pagebreak:{\r
-desc:"Insert page break."\r
-},\r
-advlist:{\r
-types:"Types",\r
-def:"Default",\r
-lower_alpha:"Lower alpha",\r
-lower_greek:"Lower greek",\r
-lower_roman:"Lower roman",\r
-upper_alpha:"Upper alpha",\r
-upper_roman:"Upper roman",\r
-circle:"Circle",\r
-disc:"Disc",\r
-square:"Square"\r
-},\r
-aria:{\r
-rich_text_area:"Rich Text Area"\r
-},\r
-wordcount:{\r
-words: 'Words: '\r
-}\r
-}});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/license.txt b/plugins/TinyMCE/js/license.txt
deleted file mode 100644 (file)
index 60d6d4c..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE\r
-                      Version 2.1, February 1999\r
-\r
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-[This is the first released version of the Lesser GPL.  It also counts\r
- as the successor of the GNU Library Public License, version 2, hence\r
- the version number 2.1.]\r
-\r
-                           Preamble\r
-\r
-  The licenses for most software are designed to take away your\r
-freedom to share and change it.  By contrast, the GNU General Public\r
-Licenses are intended to guarantee your freedom to share and change\r
-free software--to make sure the software is free for all its users.\r
-\r
-  This license, the Lesser General Public License, applies to some\r
-specially designated software packages--typically libraries--of the\r
-Free Software Foundation and other authors who decide to use it.  You\r
-can use it too, but we suggest you first think carefully about whether\r
-this license or the ordinary General Public License is the better\r
-strategy to use in any particular case, based on the explanations below.\r
-\r
-  When we speak of free software, we are referring to freedom of use,\r
-not price.  Our General Public Licenses are designed to make sure that\r
-you have the freedom to distribute copies of free software (and charge\r
-for this service if you wish); that you receive source code or can get\r
-it if you want it; that you can change the software and use pieces of\r
-it in new free programs; and that you are informed that you can do\r
-these things.\r
-\r
-  To protect your rights, we need to make restrictions that forbid\r
-distributors to deny you these rights or to ask you to surrender these\r
-rights.  These restrictions translate to certain responsibilities for\r
-you if you distribute copies of the library or if you modify it.\r
-\r
-  For example, if you distribute copies of the library, whether gratis\r
-or for a fee, you must give the recipients all the rights that we gave\r
-you.  You must make sure that they, too, receive or can get the source\r
-code.  If you link other code with the library, you must provide\r
-complete object files to the recipients, so that they can relink them\r
-with the library after making changes to the library and recompiling\r
-it.  And you must show them these terms so they know their rights.\r
-\r
-  We protect your rights with a two-step method: (1) we copyright the\r
-library, and (2) we offer you this license, which gives you legal\r
-permission to copy, distribute and/or modify the library.\r
-\r
-  To protect each distributor, we want to make it very clear that\r
-there is no warranty for the free library.  Also, if the library is\r
-modified by someone else and passed on, the recipients should know\r
-that what they have is not the original version, so that the original\r
-author's reputation will not be affected by problems that might be\r
-introduced by others.\r
-\r
-  Finally, software patents pose a constant threat to the existence of\r
-any free program.  We wish to make sure that a company cannot\r
-effectively restrict the users of a free program by obtaining a\r
-restrictive license from a patent holder.  Therefore, we insist that\r
-any patent license obtained for a version of the library must be\r
-consistent with the full freedom of use specified in this license.\r
-\r
-  Most GNU software, including some libraries, is covered by the\r
-ordinary GNU General Public License.  This license, the GNU Lesser\r
-General Public License, applies to certain designated libraries, and\r
-is quite different from the ordinary General Public License.  We use\r
-this license for certain libraries in order to permit linking those\r
-libraries into non-free programs.\r
-\r
-  When a program is linked with a library, whether statically or using\r
-a shared library, the combination of the two is legally speaking a\r
-combined work, a derivative of the original library.  The ordinary\r
-General Public License therefore permits such linking only if the\r
-entire combination fits its criteria of freedom.  The Lesser General\r
-Public License permits more lax criteria for linking other code with\r
-the library.\r
-\r
-  We call this license the "Lesser" General Public License because it\r
-does Less to protect the user's freedom than the ordinary General\r
-Public License.  It also provides other free software developers Less\r
-of an advantage over competing non-free programs.  These disadvantages\r
-are the reason we use the ordinary General Public License for many\r
-libraries.  However, the Lesser license provides advantages in certain\r
-special circumstances.\r
-\r
-  For example, on rare occasions, there may be a special need to\r
-encourage the widest possible use of a certain library, so that it becomes\r
-a de-facto standard.  To achieve this, non-free programs must be\r
-allowed to use the library.  A more frequent case is that a free\r
-library does the same job as widely used non-free libraries.  In this\r
-case, there is little to gain by limiting the free library to free\r
-software only, so we use the Lesser General Public License.\r
-\r
-  In other cases, permission to use a particular library in non-free\r
-programs enables a greater number of people to use a large body of\r
-free software.  For example, permission to use the GNU C Library in\r
-non-free programs enables many more people to use the whole GNU\r
-operating system, as well as its variant, the GNU/Linux operating\r
-system.\r
-\r
-  Although the Lesser General Public License is Less protective of the\r
-users' freedom, it does ensure that the user of a program that is\r
-linked with the Library has the freedom and the wherewithal to run\r
-that program using a modified version of the Library.\r
-\r
-  The precise terms and conditions for copying, distribution and\r
-modification follow.  Pay close attention to the difference between a\r
-"work based on the library" and a "work that uses the library".  The\r
-former contains code derived from the library, whereas the latter must\r
-be combined with the library in order to run.\r
-\r
-                 GNU LESSER GENERAL PUBLIC LICENSE\r
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
-  0. This License Agreement applies to any software library or other\r
-program which contains a notice placed by the copyright holder or\r
-other authorized party saying it may be distributed under the terms of\r
-this Lesser General Public License (also called "this License").\r
-Each licensee is addressed as "you".\r
-\r
-  A "library" means a collection of software functions and/or data\r
-prepared so as to be conveniently linked with application programs\r
-(which use some of those functions and data) to form executables.\r
-\r
-  The "Library", below, refers to any such software library or work\r
-which has been distributed under these terms.  A "work based on the\r
-Library" means either the Library or any derivative work under\r
-copyright law: that is to say, a work containing the Library or a\r
-portion of it, either verbatim or with modifications and/or translated\r
-straightforwardly into another language.  (Hereinafter, translation is\r
-included without limitation in the term "modification".)\r
-\r
-  "Source code" for a work means the preferred form of the work for\r
-making modifications to it.  For a library, complete source code means\r
-all the source code for all modules it contains, plus any associated\r
-interface definition files, plus the scripts used to control compilation\r
-and installation of the library.\r
-\r
-  Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope.  The act of\r
-running a program using the Library is not restricted, and output from\r
-such a program is covered only if its contents constitute a work based\r
-on the Library (independent of the use of the Library in a tool for\r
-writing it).  Whether that is true depends on what the Library does\r
-and what the program that uses the Library does.\r
-  \r
-  1. You may copy and distribute verbatim copies of the Library's\r
-complete source code as you receive it, in any medium, provided that\r
-you conspicuously and appropriately publish on each copy an\r
-appropriate copyright notice and disclaimer of warranty; keep intact\r
-all the notices that refer to this License and to the absence of any\r
-warranty; and distribute a copy of this License along with the\r
-Library.\r
-\r
-  You may charge a fee for the physical act of transferring a copy,\r
-and you may at your option offer warranty protection in exchange for a\r
-fee.\r
-\r
-  2. You may modify your copy or copies of the Library or any portion\r
-of it, thus forming a work based on the Library, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
-    a) The modified work must itself be a software library.\r
-\r
-    b) You must cause the files modified to carry prominent notices\r
-    stating that you changed the files and the date of any change.\r
-\r
-    c) You must cause the whole of the work to be licensed at no\r
-    charge to all third parties under the terms of this License.\r
-\r
-    d) If a facility in the modified Library refers to a function or a\r
-    table of data to be supplied by an application program that uses\r
-    the facility, other than as an argument passed when the facility\r
-    is invoked, then you must make a good faith effort to ensure that,\r
-    in the event an application does not supply such function or\r
-    table, the facility still operates, and performs whatever part of\r
-    its purpose remains meaningful.\r
-\r
-    (For example, a function in a library to compute square roots has\r
-    a purpose that is entirely well-defined independent of the\r
-    application.  Therefore, Subsection 2d requires that any\r
-    application-supplied function or table used by this function must\r
-    be optional: if the application does not supply it, the square\r
-    root function must still compute square roots.)\r
-\r
-These requirements apply to the modified work as a whole.  If\r
-identifiable sections of that work are not derived from the Library,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works.  But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Library, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote\r
-it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Library.\r
-\r
-In addition, mere aggregation of another work not based on the Library\r
-with the Library (or with a work based on the Library) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
-  3. You may opt to apply the terms of the ordinary GNU General Public\r
-License instead of this License to a given copy of the Library.  To do\r
-this, you must alter all the notices that refer to this License, so\r
-that they refer to the ordinary GNU General Public License, version 2,\r
-instead of to this License.  (If a newer version than version 2 of the\r
-ordinary GNU General Public License has appeared, then you can specify\r
-that version instead if you wish.)  Do not make any other change in\r
-these notices.\r
-\r
-  Once this change is made in a given copy, it is irreversible for\r
-that copy, so the ordinary GNU General Public License applies to all\r
-subsequent copies and derivative works made from that copy.\r
-\r
-  This option is useful when you wish to copy part of the code of\r
-the Library into a program that is not a library.\r
-\r
-  4. You may copy and distribute the Library (or a portion or\r
-derivative of it, under Section 2) in object code or executable form\r
-under the terms of Sections 1 and 2 above provided that you accompany\r
-it with the complete corresponding machine-readable source code, which\r
-must be distributed under the terms of Sections 1 and 2 above on a\r
-medium customarily used for software interchange.\r
-\r
-  If distribution of object code is made by offering access to copy\r
-from a designated place, then offering equivalent access to copy the\r
-source code from the same place satisfies the requirement to\r
-distribute the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
-  5. A program that contains no derivative of any portion of the\r
-Library, but is designed to work with the Library by being compiled or\r
-linked with it, is called a "work that uses the Library".  Such a\r
-work, in isolation, is not a derivative work of the Library, and\r
-therefore falls outside the scope of this License.\r
-\r
-  However, linking a "work that uses the Library" with the Library\r
-creates an executable that is a derivative of the Library (because it\r
-contains portions of the Library), rather than a "work that uses the\r
-library".  The executable is therefore covered by this License.\r
-Section 6 states terms for distribution of such executables.\r
-\r
-  When a "work that uses the Library" uses material from a header file\r
-that is part of the Library, the object code for the work may be a\r
-derivative work of the Library even though the source code is not.\r
-Whether this is true is especially significant if the work can be\r
-linked without the Library, or if the work is itself a library.  The\r
-threshold for this to be true is not precisely defined by law.\r
-\r
-  If such an object file uses only numerical parameters, data\r
-structure layouts and accessors, and small macros and small inline\r
-functions (ten lines or less in length), then the use of the object\r
-file is unrestricted, regardless of whether it is legally a derivative\r
-work.  (Executables containing this object code plus portions of the\r
-Library will still fall under Section 6.)\r
-\r
-  Otherwise, if the work is a derivative of the Library, you may\r
-distribute the object code for the work under the terms of Section 6.\r
-Any executables containing that work also fall under Section 6,\r
-whether or not they are linked directly with the Library itself.\r
-\r
-  6. As an exception to the Sections above, you may also combine or\r
-link a "work that uses the Library" with the Library to produce a\r
-work containing portions of the Library, and distribute that work\r
-under terms of your choice, provided that the terms permit\r
-modification of the work for the customer's own use and reverse\r
-engineering for debugging such modifications.\r
-\r
-  You must give prominent notice with each copy of the work that the\r
-Library is used in it and that the Library and its use are covered by\r
-this License.  You must supply a copy of this License.  If the work\r
-during execution displays copyright notices, you must include the\r
-copyright notice for the Library among them, as well as a reference\r
-directing the user to the copy of this License.  Also, you must do one\r
-of these things:\r
-\r
-    a) Accompany the work with the complete corresponding\r
-    machine-readable source code for the Library including whatever\r
-    changes were used in the work (which must be distributed under\r
-    Sections 1 and 2 above); and, if the work is an executable linked\r
-    with the Library, with the complete machine-readable "work that\r
-    uses the Library", as object code and/or source code, so that the\r
-    user can modify the Library and then relink to produce a modified\r
-    executable containing the modified Library.  (It is understood\r
-    that the user who changes the contents of definitions files in the\r
-    Library will not necessarily be able to recompile the application\r
-    to use the modified definitions.)\r
-\r
-    b) Use a suitable shared library mechanism for linking with the\r
-    Library.  A suitable mechanism is one that (1) uses at run time a\r
-    copy of the library already present on the user's computer system,\r
-    rather than copying library functions into the executable, and (2)\r
-    will operate properly with a modified version of the library, if\r
-    the user installs one, as long as the modified version is\r
-    interface-compatible with the version that the work was made with.\r
-\r
-    c) Accompany the work with a written offer, valid for at\r
-    least three years, to give the same user the materials\r
-    specified in Subsection 6a, above, for a charge no more\r
-    than the cost of performing this distribution.\r
-\r
-    d) If distribution of the work is made by offering access to copy\r
-    from a designated place, offer equivalent access to copy the above\r
-    specified materials from the same place.\r
-\r
-    e) Verify that the user has already received a copy of these\r
-    materials or that you have already sent this user a copy.\r
-\r
-  For an executable, the required form of the "work that uses the\r
-Library" must include any data and utility programs needed for\r
-reproducing the executable from it.  However, as a special exception,\r
-the materials to be distributed need not include anything that is\r
-normally distributed (in either source or binary form) with the major\r
-components (compiler, kernel, and so on) of the operating system on\r
-which the executable runs, unless that component itself accompanies\r
-the executable.\r
-\r
-  It may happen that this requirement contradicts the license\r
-restrictions of other proprietary libraries that do not normally\r
-accompany the operating system.  Such a contradiction means you cannot\r
-use both them and the Library together in an executable that you\r
-distribute.\r
-\r
-  7. You may place library facilities that are a work based on the\r
-Library side-by-side in a single library together with other library\r
-facilities not covered by this License, and distribute such a combined\r
-library, provided that the separate distribution of the work based on\r
-the Library and of the other library facilities is otherwise\r
-permitted, and provided that you do these two things:\r
-\r
-    a) Accompany the combined library with a copy of the same work\r
-    based on the Library, uncombined with any other library\r
-    facilities.  This must be distributed under the terms of the\r
-    Sections above.\r
-\r
-    b) Give prominent notice with the combined library of the fact\r
-    that part of it is a work based on the Library, and explaining\r
-    where to find the accompanying uncombined form of the same work.\r
-\r
-  8. You may not copy, modify, sublicense, link with, or distribute\r
-the Library except as expressly provided under this License.  Any\r
-attempt otherwise to copy, modify, sublicense, link with, or\r
-distribute the Library is void, and will automatically terminate your\r
-rights under this License.  However, parties who have received copies,\r
-or rights, from you under this License will not have their licenses\r
-terminated so long as such parties remain in full compliance.\r
-\r
-  9. You are not required to accept this License, since you have not\r
-signed it.  However, nothing else grants you permission to modify or\r
-distribute the Library or its derivative works.  These actions are\r
-prohibited by law if you do not accept this License.  Therefore, by\r
-modifying or distributing the Library (or any work based on the\r
-Library), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Library or works based on it.\r
-\r
-  10. Each time you redistribute the Library (or any work based on the\r
-Library), the recipient automatically receives a license from the\r
-original licensor to copy, distribute, link with or modify the Library\r
-subject to these terms and conditions.  You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties with\r
-this License.\r
-\r
-  11. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License.  If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Library at all.  For example, if a patent\r
-license would not permit royalty-free redistribution of the Library by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Library.\r
-\r
-If any portion of this section is held invalid or unenforceable under any\r
-particular circumstance, the balance of the section is intended to apply,\r
-and the section as a whole is intended to apply in other circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system which is\r
-implemented by public license practices.  Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
-  12. If the distribution and/or use of the Library is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Library under this License may add\r
-an explicit geographical distribution limitation excluding those countries,\r
-so that distribution is permitted only in or among countries not thus\r
-excluded.  In such case, this License incorporates the limitation as if\r
-written in the body of this License.\r
-\r
-  13. The Free Software Foundation may publish revised and/or new\r
-versions of the Lesser General Public License from time to time.\r
-Such new versions will be similar in spirit to the present version,\r
-but may differ in detail to address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number.  If the Library\r
-specifies a version number of this License which applies to it and\r
-"any later version", you have the option of following the terms and\r
-conditions either of that version or of any later version published by\r
-the Free Software Foundation.  If the Library does not specify a\r
-license version number, you may choose any version ever published by\r
-the Free Software Foundation.\r
-\r
-  14. If you wish to incorporate parts of the Library into other free\r
-programs whose distribution conditions are incompatible with these,\r
-write to the author to ask for permission.  For software which is\r
-copyrighted by the Free Software Foundation, write to the Free\r
-Software Foundation; we sometimes make exceptions for this.  Our\r
-decision will be guided by the two goals of preserving the free status\r
-of all derivatives of our free software and of promoting the sharing\r
-and reuse of software generally.\r
-\r
-                           NO WARRANTY\r
-\r
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
-\r
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
-DAMAGES.\r
-\r
-                    END OF TERMS AND CONDITIONS\r
-\r
-           How to Apply These Terms to Your New Libraries\r
-\r
-  If you develop a new library, and you want it to be of the greatest\r
-possible use to the public, we recommend making it free software that\r
-everyone can redistribute and change.  You can do so by permitting\r
-redistribution under these terms (or, alternatively, under the terms of the\r
-ordinary General Public License).\r
-\r
-  To apply these terms, attach the following notices to the library.  It is\r
-safest to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least the\r
-"copyright" line and a pointer to where the full notice is found.\r
-\r
-    <one line to give the library's name and a brief idea of what it does.>\r
-    Copyright (C) <year>  <name of author>\r
-\r
-    This library is free software; you can redistribute it and/or\r
-    modify it under the terms of the GNU Lesser General Public\r
-    License as published by the Free Software Foundation; either\r
-    version 2.1 of the License, or (at your option) any later version.\r
-\r
-    This library is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-    Lesser General Public License for more details.\r
-\r
-    You should have received a copy of the GNU Lesser General Public\r
-    License along with this library; if not, write to the Free Software\r
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the library, if\r
-necessary.  Here is a sample; alter the names:\r
-\r
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
-\r
-  <signature of Ty Coon>, 1 April 1990\r
-  Ty Coon, President of Vice\r
-\r
-That's all there is to it!\r
-\r
-\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/css/advhr.css b/plugins/TinyMCE/js/plugins/advhr/css/advhr.css
deleted file mode 100644 (file)
index 0e22834..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-input.radio {border:1px none #000; background:transparent; vertical-align:middle;}\r
-.panel_wrapper div.current {height:80px;}\r
-#width {width:50px; vertical-align:middle;}\r
-#width2 {width:50px; vertical-align:middle;}\r
-#size {width:100px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/editor_plugin.js b/plugins/TinyMCE/js/plugins/advhr/editor_plugin.js
deleted file mode 100644 (file)
index 4d3b062..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js
deleted file mode 100644 (file)
index 0c652d3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.AdvancedHRPlugin', {\r
-               init : function(ed, url) {\r
-                       // Register commands\r
-                       ed.addCommand('mceAdvancedHr', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/rule.htm',\r
-                                       width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),\r
-                                       height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('advhr', {\r
-                               title : 'advhr.advhr_desc',\r
-                               cmd : 'mceAdvancedHr'\r
-                       });\r
-\r
-                       ed.onNodeChange.add(function(ed, cm, n) {\r
-                               cm.setActive('advhr', n.nodeName == 'HR');\r
-                       });\r
-\r
-                       ed.onClick.add(function(ed, e) {\r
-                               e = e.target;\r
-\r
-                               if (e.nodeName === 'HR')\r
-                                       ed.selection.select(e);\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Advanced HR',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/js/rule.js b/plugins/TinyMCE/js/plugins/advhr/js/rule.js
deleted file mode 100644 (file)
index b6cbd66..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-var AdvHRDialog = {\r
-       init : function(ed) {\r
-               var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;\r
-\r
-               w = dom.getAttrib(n, 'width');\r
-               f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');\r
-               f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';\r
-               f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');\r
-               selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');\r
-       },\r
-\r
-       update : function() {\r
-               var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';\r
-\r
-               h = '<hr';\r
-\r
-               if (f.size.value) {\r
-                       h += ' size="' + f.size.value + '"';\r
-                       st += ' height:' + f.size.value + 'px;';\r
-               }\r
-\r
-               if (f.width.value) {\r
-                       h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';\r
-                       st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';\r
-               }\r
-\r
-               if (f.noshade.checked) {\r
-                       h += ' noshade="noshade"';\r
-                       st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';\r
-               }\r
-\r
-               if (ed.settings.inline_styles)\r
-                       h += ' style="' + tinymce.trim(st) + '"';\r
-\r
-               h += ' />';\r
-\r
-               ed.execCommand("mceInsertContent", false, h);\r
-               tinyMCEPopup.close();\r
-       }\r
-};\r
-\r
-tinyMCEPopup.requireLangPack();\r
-tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js
deleted file mode 100644 (file)
index ad6a7b6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-tinyMCE.addI18n('en.advhr_dlg',{\r
-normal:"Normal",\r
-width:"Width",\r
-widthunits:"Units",\r
-size:"Height",\r
-noshade:"No shadow"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/rule.htm b/plugins/TinyMCE/js/plugins/advhr/rule.htm
deleted file mode 100644 (file)
index 843e1f8..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advhr.advhr_desc}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/rule.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <link href="css/advhr.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body role="application">\r
-<form onsubmit="AdvHRDialog.update();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                       <tr role="group" aria-labelledby="width_label">\r
-                                               <td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>\r
-                                               <td class="nowrap">\r
-                                                       <input id="width" name="width" type="text" value="" class="mceFocus" />\r
-                                                       <span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>\r
-                                                       <select name="width2" id="width2" aria-labelledby="width_unit_label">\r
-                                                               <option value="">px</option>\r
-                                                               <option value="%">%</option>\r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td><label for="size">{#advhr_dlg.size}</label></td>\r
-                                               <td><select id="size" name="size">\r
-                                                       <option value="">{#advhr_dlg.normal}</option>\r
-                                                       <option value="1">1</option>\r
-                                                       <option value="2">2</option>\r
-                                                       <option value="3">3</option>\r
-                                                       <option value="4">4</option>\r
-                                                       <option value="5">5</option>\r
-                                               </select></td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td><label for="noshade">{#advhr_dlg.noshade}</label></td>\r
-                                               <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>\r
-                                       </tr>\r
-                       </table>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/css/advimage.css b/plugins/TinyMCE/js/plugins/advimage/css/advimage.css
deleted file mode 100644 (file)
index 0a6251a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#src_list, #over_list, #out_list {width:280px;}\r
-.mceActionPanel {margin-top:7px;}\r
-.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}\r
-.checkbox {border:0;}\r
-.panel_wrapper div.current {height:305px;}\r
-#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}\r
-#align, #classlist {width:150px;}\r
-#width, #height {vertical-align:middle; width:50px; text-align:center;}\r
-#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}\r
-#class_list {width:180px;}\r
-input {width: 280px;}\r
-#constrain, #onmousemovecheck {width:auto;}\r
-#id, #dir, #lang, #usemap, #longdesc {width:200px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/editor_plugin.js b/plugins/TinyMCE/js/plugins/advimage/editor_plugin.js
deleted file mode 100644 (file)
index 4c7a9c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js
deleted file mode 100644 (file)
index 2625dd2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.AdvancedImagePlugin', {\r
-               init : function(ed, url) {\r
-                       // Register commands\r
-                       ed.addCommand('mceAdvImage', function() {\r
-                               // Internal image object like a flash placeholder\r
-                               if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)\r
-                                       return;\r
-\r
-                               ed.windowManager.open({\r
-                                       file : url + '/image.htm',\r
-                                       width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),\r
-                                       height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('image', {\r
-                               title : 'advimage.image_desc',\r
-                               cmd : 'mceAdvImage'\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Advanced image',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advimage/image.htm b/plugins/TinyMCE/js/plugins/advimage/image.htm
deleted file mode 100644 (file)
index ed16b3d..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advimage_dlg.dialog_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/image.js"></script>\r
-       <link href="css/advimage.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="advimage" style="display: none" role="application" aria-labelledby="app_title">\r
-       <span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>\r
-       <form onsubmit="ImageDialog.insert();return false;" action="#"> \r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>\r
-                               <li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                               <legend>{#advimage_dlg.general}</legend>\r
-\r
-                                               <table role="presentation" class="properties">\r
-                                                       <tr>\r
-                                                               <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>\r
-                                                               <td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr> \r
-                                                                               <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td> \r
-                                                                               <td id="srcbrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><label for="src_list">{#advimage_dlg.image_list}</label></td>\r
-                                                               <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>\r
-                                                       </tr>\r
-                                                       <tr> \r
-                                                               <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> \r
-                                                               <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td> \r
-                                                       </tr> \r
-                                                       <tr> \r
-                                                               <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td> \r
-                                                               <td colspan="2"><input id="title" name="title" type="text" value="" /></td> \r
-                                                       </tr>\r
-                                               </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#advimage_dlg.preview}</legend>\r
-                                       <div id="prev"></div>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="appearance_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#advimage_dlg.tab_appearance}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr> \r
-                                                       <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td> \r
-                                                       <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();"> \r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="baseline">{#advimage_dlg.align_baseline}</option>\r
-                                                                       <option value="top">{#advimage_dlg.align_top}</option>\r
-                                                                       <option value="middle">{#advimage_dlg.align_middle}</option>\r
-                                                                       <option value="bottom">{#advimage_dlg.align_bottom}</option>\r
-                                                                       <option value="text-top">{#advimage_dlg.align_texttop}</option>\r
-                                                                       <option value="text-bottom">{#advimage_dlg.align_textbottom}</option>\r
-                                                                       <option value="left">{#advimage_dlg.align_left}</option>\r
-                                                                       <option value="right">{#advimage_dlg.align_right}</option>\r
-                                                               </select> \r
-                                                       </td>\r
-                                                       <td rowspan="6" valign="top">\r
-                                                               <div class="alignPreview">\r
-                                                                       <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />\r
-                                                                       Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam\r
-                                                                       nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum\r
-                                                                       edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam\r
-                                                                       erat volutpat.\r
-                                                               </div>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr role="group" aria-labelledby="widthlabel">\r
-                                                       <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>\r
-                                                       <td class="nowrap">\r
-                                                               <span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>\r
-                                                               <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x \r
-                                                               <span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>\r
-                                                               <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td>&nbsp;</td>\r
-                                                       <td><table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>\r
-                                                                               <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>\r
-                                                                       </tr>\r
-                                                               </table></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td> \r
-                                                       <td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr> \r
-                                                       <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td> \r
-                                                       <td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td> \r
-                                                       <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="class_list">{#class_name}</label></td>\r
-                                                       <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td> \r
-                                                       <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td> \r
-                                               </tr>\r
-\r
-                                               <!-- <tr>\r
-                                                       <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td> \r
-                                                       <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> \r
-                                               </tr> -->\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#advimage_dlg.swap_image}</legend>\r
-\r
-                                       <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />\r
-                                       <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">\r
-                                                       <tr>\r
-                                                               <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td> \r
-                                                               <td><table role="presentation" border="0" cellspacing="0" cellpadding="0"> \r
-                                                                       <tr> \r
-                                                                               <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td> \r
-                                                                               <td id="onmouseoversrccontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><label for="over_list">{#advimage_dlg.image_list}</label></td>\r
-                                                               <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
-                                                       </tr>\r
-                                                       <tr> \r
-                                                               <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> \r
-                                                               <td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0"> \r
-                                                                       <tr> \r
-                                                                               <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td> \r
-                                                                               <td id="onmouseoutsrccontainer">&nbsp;</td>\r
-                                                                       </tr> \r
-                                                               </table></td> \r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><label for="out_list">{#advimage_dlg.image_list}</label></td>\r
-                                                               <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
-                                                       </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#advimage_dlg.misc}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td> \r
-                                                       <td><input id="id" name="id" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#advimage_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#advimage_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td> \r
-                                                       <td>\r
-                                                               <input id="lang" name="lang" type="text" value="" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td> \r
-                                                       <td>\r
-                                                               <input id="usemap" name="usemap" type="text" value="" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>\r
-                                                       <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="longdesc" name="longdesc" type="text" value="" /></td>\r
-                                                                               <td id="longdesccontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                       </table></td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body> \r
-</html> \r
diff --git a/plugins/TinyMCE/js/plugins/advimage/img/sample.gif b/plugins/TinyMCE/js/plugins/advimage/img/sample.gif
deleted file mode 100644 (file)
index 53bf689..0000000
Binary files a/plugins/TinyMCE/js/plugins/advimage/img/sample.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/advimage/js/image.js b/plugins/TinyMCE/js/plugins/advimage/js/image.js
deleted file mode 100644 (file)
index f222486..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-var ImageDialog = {\r
-       preInit : function() {\r
-               var url;\r
-\r
-               tinyMCEPopup.requireLangPack();\r
-\r
-               if (url = tinyMCEPopup.getParam("external_image_list_url"))\r
-                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
-       },\r
-\r
-       init : function(ed) {\r
-               var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');\r
-\r
-               tinyMCEPopup.resizeToInnerSize();\r
-               this.fillClassList('class_list');\r
-               this.fillFileList('src_list', fl);\r
-               this.fillFileList('over_list', fl);\r
-               this.fillFileList('out_list', fl);\r
-               TinyMCE_EditableSelects.init();\r
-\r
-               if (n.nodeName == 'IMG') {\r
-                       nl.src.value = dom.getAttrib(n, 'src');\r
-                       nl.width.value = dom.getAttrib(n, 'width');\r
-                       nl.height.value = dom.getAttrib(n, 'height');\r
-                       nl.alt.value = dom.getAttrib(n, 'alt');\r
-                       nl.title.value = dom.getAttrib(n, 'title');\r
-                       nl.vspace.value = this.getAttrib(n, 'vspace');\r
-                       nl.hspace.value = this.getAttrib(n, 'hspace');\r
-                       nl.border.value = this.getAttrib(n, 'border');\r
-                       selectByValue(f, 'align', this.getAttrib(n, 'align'));\r
-                       selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);\r
-                       nl.style.value = dom.getAttrib(n, 'style');\r
-                       nl.id.value = dom.getAttrib(n, 'id');\r
-                       nl.dir.value = dom.getAttrib(n, 'dir');\r
-                       nl.lang.value = dom.getAttrib(n, 'lang');\r
-                       nl.usemap.value = dom.getAttrib(n, 'usemap');\r
-                       nl.longdesc.value = dom.getAttrib(n, 'longdesc');\r
-                       nl.insert.value = ed.getLang('update');\r
-\r
-                       if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))\r
-                               nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');\r
-\r
-                       if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))\r
-                               nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');\r
-\r
-                       if (ed.settings.inline_styles) {\r
-                               // Move attribs to styles\r
-                               if (dom.getAttrib(n, 'align'))\r
-                                       this.updateStyle('align');\r
-\r
-                               if (dom.getAttrib(n, 'hspace'))\r
-                                       this.updateStyle('hspace');\r
-\r
-                               if (dom.getAttrib(n, 'border'))\r
-                                       this.updateStyle('border');\r
-\r
-                               if (dom.getAttrib(n, 'vspace'))\r
-                                       this.updateStyle('vspace');\r
-                       }\r
-               }\r
-\r
-               // Setup browse button\r
-               document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
-               if (isVisible('srcbrowser'))\r
-                       document.getElementById('src').style.width = '260px';\r
-\r
-               // Setup browse button\r
-               document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');\r
-               if (isVisible('overbrowser'))\r
-                       document.getElementById('onmouseoversrc').style.width = '260px';\r
-\r
-               // Setup browse button\r
-               document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');\r
-               if (isVisible('outbrowser'))\r
-                       document.getElementById('onmouseoutsrc').style.width = '260px';\r
-\r
-               // If option enabled default contrain proportions to checked\r
-               if (ed.getParam("advimage_constrain_proportions", true))\r
-                       f.constrain.checked = true;\r
-\r
-               // Check swap image if valid data\r
-               if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)\r
-                       this.setSwapImage(true);\r
-               else\r
-                       this.setSwapImage(false);\r
-\r
-               this.changeAppearance();\r
-               this.showPreviewImage(nl.src.value, 1);\r
-       },\r
-\r
-       insert : function(file, title) {\r
-               var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];\r
-\r
-               if (f.src.value === '') {\r
-                       if (ed.selection.getNode().nodeName == 'IMG') {\r
-                               ed.dom.remove(ed.selection.getNode());\r
-                               ed.execCommand('mceRepaint');\r
-                       }\r
-\r
-                       tinyMCEPopup.close();\r
-                       return;\r
-               }\r
-\r
-               if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {\r
-                       if (!f.alt.value) {\r
-                               tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {\r
-                                       if (s)\r
-                                               t.insertAndClose();\r
-                               });\r
-\r
-                               return;\r
-                       }\r
-               }\r
-\r
-               t.insertAndClose();\r
-       },\r
-\r
-       insertAndClose : function() {\r
-               var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;\r
-\r
-               tinyMCEPopup.restoreSelection();\r
-\r
-               // Fixes crash in Safari\r
-               if (tinymce.isWebKit)\r
-                       ed.getWin().focus();\r
-\r
-               if (!ed.settings.inline_styles) {\r
-                       args = {\r
-                               vspace : nl.vspace.value,\r
-                               hspace : nl.hspace.value,\r
-                               border : nl.border.value,\r
-                               align : getSelectValue(f, 'align')\r
-                       };\r
-               } else {\r
-                       // Remove deprecated values\r
-                       args = {\r
-                               vspace : '',\r
-                               hspace : '',\r
-                               border : '',\r
-                               align : ''\r
-                       };\r
-               }\r
-\r
-               tinymce.extend(args, {\r
-                       src : nl.src.value.replace(/ /g, '%20'),\r
-                       width : nl.width.value,\r
-                       height : nl.height.value,\r
-                       alt : nl.alt.value,\r
-                       title : nl.title.value,\r
-                       'class' : getSelectValue(f, 'class_list'),\r
-                       style : nl.style.value,\r
-                       id : nl.id.value,\r
-                       dir : nl.dir.value,\r
-                       lang : nl.lang.value,\r
-                       usemap : nl.usemap.value,\r
-                       longdesc : nl.longdesc.value\r
-               });\r
-\r
-               args.onmouseover = args.onmouseout = '';\r
-\r
-               if (f.onmousemovecheck.checked) {\r
-                       if (nl.onmouseoversrc.value)\r
-                               args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";\r
-\r
-                       if (nl.onmouseoutsrc.value)\r
-                               args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";\r
-               }\r
-\r
-               el = ed.selection.getNode();\r
-\r
-               if (el && el.nodeName == 'IMG') {\r
-                       ed.dom.setAttribs(el, args);\r
-               } else {\r
-                       ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});\r
-                       ed.dom.setAttribs('__mce_tmp', args);\r
-                       ed.dom.setAttrib('__mce_tmp', 'id', '');\r
-                       ed.undoManager.add();\r
-               }\r
-\r
-               tinyMCEPopup.editor.execCommand('mceRepaint');\r
-               tinyMCEPopup.editor.focus();\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       getAttrib : function(e, at) {\r
-               var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;\r
-\r
-               if (ed.settings.inline_styles) {\r
-                       switch (at) {\r
-                               case 'align':\r
-                                       if (v = dom.getStyle(e, 'float'))\r
-                                               return v;\r
-\r
-                                       if (v = dom.getStyle(e, 'vertical-align'))\r
-                                               return v;\r
-\r
-                                       break;\r
-\r
-                               case 'hspace':\r
-                                       v = dom.getStyle(e, 'margin-left')\r
-                                       v2 = dom.getStyle(e, 'margin-right');\r
-\r
-                                       if (v && v == v2)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-\r
-                               case 'vspace':\r
-                                       v = dom.getStyle(e, 'margin-top')\r
-                                       v2 = dom.getStyle(e, 'margin-bottom');\r
-                                       if (v && v == v2)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-\r
-                               case 'border':\r
-                                       v = 0;\r
-\r
-                                       tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {\r
-                                               sv = dom.getStyle(e, 'border-' + sv + '-width');\r
-\r
-                                               // False or not the same as prev\r
-                                               if (!sv || (sv != v && v !== 0)) {\r
-                                                       v = 0;\r
-                                                       return false;\r
-                                               }\r
-\r
-                                               if (sv)\r
-                                                       v = sv;\r
-                                       });\r
-\r
-                                       if (v)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-                       }\r
-               }\r
-\r
-               if (v = dom.getAttrib(e, at))\r
-                       return v;\r
-\r
-               return '';\r
-       },\r
-\r
-       setSwapImage : function(st) {\r
-               var f = document.forms[0];\r
-\r
-               f.onmousemovecheck.checked = st;\r
-               setBrowserDisabled('overbrowser', !st);\r
-               setBrowserDisabled('outbrowser', !st);\r
-\r
-               if (f.over_list)\r
-                       f.over_list.disabled = !st;\r
-\r
-               if (f.out_list)\r
-                       f.out_list.disabled = !st;\r
-\r
-               f.onmouseoversrc.disabled = !st;\r
-               f.onmouseoutsrc.disabled  = !st;\r
-       },\r
-\r
-       fillClassList : function(id) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
-\r
-               if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {\r
-                       cl = [];\r
-\r
-                       tinymce.each(v.split(';'), function(v) {\r
-                               var p = v.split('=');\r
-\r
-                               cl.push({'title' : p[0], 'class' : p[1]});\r
-                       });\r
-               } else\r
-                       cl = tinyMCEPopup.editor.dom.getClasses();\r
-\r
-               if (cl.length > 0) {\r
-                       lst.options.length = 0;\r
-                       lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
-\r
-                       tinymce.each(cl, function(o) {\r
-                               lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);\r
-                       });\r
-               } else\r
-                       dom.remove(dom.getParent(id, 'tr'));\r
-       },\r
-\r
-       fillFileList : function(id, l) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
-\r
-               l = typeof(l) === 'function' ? l() : window[l];\r
-               lst.options.length = 0;\r
-\r
-               if (l && l.length > 0) {\r
-                       lst.options[lst.options.length] = new Option('', '');\r
-\r
-                       tinymce.each(l, function(o) {\r
-                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
-                       });\r
-               } else\r
-                       dom.remove(dom.getParent(id, 'tr'));\r
-       },\r
-\r
-       resetImageData : function() {\r
-               var f = document.forms[0];\r
-\r
-               f.elements.width.value = f.elements.height.value = '';\r
-       },\r
-\r
-       updateImageData : function(img, st) {\r
-               var f = document.forms[0];\r
-\r
-               if (!st) {\r
-                       f.elements.width.value = img.width;\r
-                       f.elements.height.value = img.height;\r
-               }\r
-\r
-               this.preloadImg = img;\r
-       },\r
-\r
-       changeAppearance : function() {\r
-               var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');\r
-\r
-               if (img) {\r
-                       if (ed.getParam('inline_styles')) {\r
-                               ed.dom.setAttrib(img, 'style', f.style.value);\r
-                       } else {\r
-                               img.align = f.align.value;\r
-                               img.border = f.border.value;\r
-                               img.hspace = f.hspace.value;\r
-                               img.vspace = f.vspace.value;\r
-                       }\r
-               }\r
-       },\r
-\r
-       changeHeight : function() {\r
-               var f = document.forms[0], tp, t = this;\r
-\r
-               if (!f.constrain.checked || !t.preloadImg) {\r
-                       return;\r
-               }\r
-\r
-               if (f.width.value == "" || f.height.value == "")\r
-                       return;\r
-\r
-               tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;\r
-               f.height.value = tp.toFixed(0);\r
-       },\r
-\r
-       changeWidth : function() {\r
-               var f = document.forms[0], tp, t = this;\r
-\r
-               if (!f.constrain.checked || !t.preloadImg) {\r
-                       return;\r
-               }\r
-\r
-               if (f.width.value == "" || f.height.value == "")\r
-                       return;\r
-\r
-               tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;\r
-               f.width.value = tp.toFixed(0);\r
-       },\r
-\r
-       updateStyle : function(ty) {\r
-               var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});\r
-\r
-               if (tinyMCEPopup.editor.settings.inline_styles) {\r
-                       // Handle align\r
-                       if (ty == 'align') {\r
-                               dom.setStyle(img, 'float', '');\r
-                               dom.setStyle(img, 'vertical-align', '');\r
-\r
-                               v = getSelectValue(f, 'align');\r
-                               if (v) {\r
-                                       if (v == 'left' || v == 'right')\r
-                                               dom.setStyle(img, 'float', v);\r
-                                       else\r
-                                               img.style.verticalAlign = v;\r
-                               }\r
-                       }\r
-\r
-                       // Handle border\r
-                       if (ty == 'border') {\r
-                               b = img.style.border ? img.style.border.split(' ') : [];\r
-                               bStyle = dom.getStyle(img, 'border-style');\r
-                               bColor = dom.getStyle(img, 'border-color');\r
-\r
-                               dom.setStyle(img, 'border', '');\r
-\r
-                               v = f.border.value;\r
-                               if (v || v == '0') {\r
-                                       if (v == '0')\r
-                                               img.style.border = isIE ? '0' : '0 none none';\r
-                                       else {\r
-                                               if (b.length == 3 && b[isIE ? 2 : 1])\r
-                                                       bStyle = b[isIE ? 2 : 1];\r
-                                               else if (!bStyle || bStyle == 'none')\r
-                                                       bStyle = 'solid';\r
-                                               if (b.length == 3 && b[isIE ? 0 : 2])\r
-                                                       bColor = b[isIE ? 0 : 2];\r
-                                               else if (!bColor || bColor == 'none')\r
-                                                       bColor = 'black';\r
-                                               img.style.border = v + 'px ' + bStyle + ' ' + bColor;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       // Handle hspace\r
-                       if (ty == 'hspace') {\r
-                               dom.setStyle(img, 'marginLeft', '');\r
-                               dom.setStyle(img, 'marginRight', '');\r
-\r
-                               v = f.hspace.value;\r
-                               if (v) {\r
-                                       img.style.marginLeft = v + 'px';\r
-                                       img.style.marginRight = v + 'px';\r
-                               }\r
-                       }\r
-\r
-                       // Handle vspace\r
-                       if (ty == 'vspace') {\r
-                               dom.setStyle(img, 'marginTop', '');\r
-                               dom.setStyle(img, 'marginBottom', '');\r
-\r
-                               v = f.vspace.value;\r
-                               if (v) {\r
-                                       img.style.marginTop = v + 'px';\r
-                                       img.style.marginBottom = v + 'px';\r
-                               }\r
-                       }\r
-\r
-                       // Merge\r
-                       dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');\r
-               }\r
-       },\r
-\r
-       changeMouseMove : function() {\r
-       },\r
-\r
-       showPreviewImage : function(u, st) {\r
-               if (!u) {\r
-                       tinyMCEPopup.dom.setHTML('prev', '');\r
-                       return;\r
-               }\r
-\r
-               if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))\r
-                       this.resetImageData();\r
-\r
-               u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);\r
-\r
-               if (!st)\r
-                       tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');\r
-               else\r
-                       tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');\r
-       }\r
-};\r
-\r
-ImageDialog.preInit();\r
-tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js
deleted file mode 100644 (file)
index d8f11e0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-tinyMCE.addI18n('en.advimage_dlg',{\r
-tab_general:"General",\r
-tab_appearance:"Appearance",\r
-tab_advanced:"Advanced",\r
-general:"General",\r
-title:"Title",\r
-preview:"Preview",\r
-constrain_proportions:"Constrain proportions",\r
-langdir:"Language direction",\r
-langcode:"Language code",\r
-long_desc:"Long description link",\r
-style:"Style",\r
-classes:"Classes",\r
-ltr:"Left to right",\r
-rtl:"Right to left",\r
-id:"Id",\r
-map:"Image map",\r
-swap_image:"Swap image",\r
-alt_image:"Alternative image",\r
-mouseover:"for mouse over",\r
-mouseout:"for mouse out",\r
-misc:"Miscellaneous",\r
-example_img:"Appearance preview image",\r
-missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.",\r
-dialog_title:"Insert/edit image",\r
-src:"Image URL",\r
-alt:"Image description",\r
-list:"Image list",\r
-border:"Border",\r
-dimensions:"Dimensions",\r
-width:"Width",\r
-height:"Height",\r
-vspace:"Vertical space",\r
-hspace:"Horizontal space",\r
-align:"Alignment",\r
-align_baseline:"Baseline",\r
-align_top:"Top",\r
-align_middle:"Middle",\r
-align_bottom:"Bottom",\r
-align_texttop:"Text top",\r
-align_textbottom:"Text bottom",\r
-align_left:"Left",\r
-align_right:"Right",\r
-image_list:"Image list"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/css/advlink.css b/plugins/TinyMCE/js/plugins/advlink/css/advlink.css
deleted file mode 100644 (file)
index 1436431..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.mceLinkList, .mceAnchorList, #targetlist {width:280px;}\r
-.mceActionPanel {margin-top:7px;}\r
-.panel_wrapper div.current {height:320px;}\r
-#classlist, #title, #href {width:280px;}\r
-#popupurl, #popupname {width:200px;}\r
-#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}\r
-#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}\r
-#events_panel input {width:200px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advlink/editor_plugin.js b/plugins/TinyMCE/js/plugins/advlink/editor_plugin.js
deleted file mode 100644 (file)
index 983fe5a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js
deleted file mode 100644 (file)
index 14e46a7..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {\r
-               init : function(ed, url) {\r
-                       this.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceAdvLink', function() {\r
-                               var se = ed.selection;\r
-\r
-                               // No selection and not in link\r
-                               if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))\r
-                                       return;\r
-\r
-                               ed.windowManager.open({\r
-                                       file : url + '/link.htm',\r
-                                       width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),\r
-                                       height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('link', {\r
-                               title : 'advlink.link_desc',\r
-                               cmd : 'mceAdvLink'\r
-                       });\r
-\r
-                       ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');\r
-\r
-                       ed.onNodeChange.add(function(ed, cm, n, co) {\r
-                               cm.setDisabled('link', co && n.nodeName != 'A');\r
-                               cm.setActive('link', n.nodeName == 'A' && !n.name);\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Advanced link',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/js/advlink.js b/plugins/TinyMCE/js/plugins/advlink/js/advlink.js
deleted file mode 100644 (file)
index 837c937..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-/* Functions for the advlink plugin popup */\r
-\r
-tinyMCEPopup.requireLangPack();\r
-\r
-var templates = {\r
-       "window.open" : "window.open('${url}','${target}','${options}')"\r
-};\r
-\r
-function preinit() {\r
-       var url;\r
-\r
-       if (url = tinyMCEPopup.getParam("external_link_list_url"))\r
-               document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
-}\r
-\r
-function changeClass() {\r
-       var f = document.forms[0];\r
-\r
-       f.classes.value = getSelectValue(f, 'classlist');\r
-}\r
-\r
-function init() {\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       var formObj = document.forms[0];\r
-       var inst = tinyMCEPopup.editor;\r
-       var elm = inst.selection.getNode();\r
-       var action = "insert";\r
-       var html;\r
-\r
-       document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');\r
-       document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');\r
-       document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');\r
-\r
-       // Link list\r
-       html = getLinkListHTML('linklisthref','href');\r
-       if (html == "")\r
-               document.getElementById("linklisthrefrow").style.display = 'none';\r
-       else\r
-               document.getElementById("linklisthrefcontainer").innerHTML = html;\r
-\r
-       // Anchor list\r
-       html = getAnchorListHTML('anchorlist','href');\r
-       if (html == "")\r
-               document.getElementById("anchorlistrow").style.display = 'none';\r
-       else\r
-               document.getElementById("anchorlistcontainer").innerHTML = html;\r
-\r
-       // Resize some elements\r
-       if (isVisible('hrefbrowser'))\r
-               document.getElementById('href').style.width = '260px';\r
-\r
-       if (isVisible('popupurlbrowser'))\r
-               document.getElementById('popupurl').style.width = '180px';\r
-\r
-       elm = inst.dom.getParent(elm, "A");\r
-       if (elm != null && elm.nodeName == "A")\r
-               action = "update";\r
-\r
-       formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); \r
-\r
-       setPopupControlsDisabled(true);\r
-\r
-       if (action == "update") {\r
-               var href = inst.dom.getAttrib(elm, 'href');\r
-               var onclick = inst.dom.getAttrib(elm, 'onclick');\r
-\r
-               // Setup form data\r
-               setFormValue('href', href);\r
-               setFormValue('title', inst.dom.getAttrib(elm, 'title'));\r
-               setFormValue('id', inst.dom.getAttrib(elm, 'id'));\r
-               setFormValue('style', inst.dom.getAttrib(elm, "style"));\r
-               setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));\r
-               setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));\r
-               setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));\r
-               setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));\r
-               setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));\r
-               setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));\r
-               setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
-               setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
-               setFormValue('type', inst.dom.getAttrib(elm, 'type'));\r
-               setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));\r
-               setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));\r
-               setFormValue('onclick', onclick);\r
-               setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));\r
-               setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));\r
-               setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));\r
-               setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));\r
-               setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));\r
-               setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));\r
-               setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));\r
-               setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));\r
-               setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));\r
-               setFormValue('target', inst.dom.getAttrib(elm, 'target'));\r
-               setFormValue('classes', inst.dom.getAttrib(elm, 'class'));\r
-\r
-               // Parse onclick data\r
-               if (onclick != null && onclick.indexOf('window.open') != -1)\r
-                       parseWindowOpen(onclick);\r
-               else\r
-                       parseFunction(onclick);\r
-\r
-               // Select by the values\r
-               selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));\r
-               selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));\r
-               selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));\r
-               selectByValue(formObj, 'linklisthref', href);\r
-\r
-               if (href.charAt(0) == '#')\r
-                       selectByValue(formObj, 'anchorlist', href);\r
-\r
-               addClassesToList('classlist', 'advlink_styles');\r
-\r
-               selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);\r
-               selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);\r
-       } else\r
-               addClassesToList('classlist', 'advlink_styles');\r
-}\r
-\r
-function checkPrefix(n) {\r
-       if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))\r
-               n.value = 'mailto:' + n.value;\r
-\r
-       if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))\r
-               n.value = 'http://' + n.value;\r
-}\r
-\r
-function setFormValue(name, value) {\r
-       document.forms[0].elements[name].value = value;\r
-}\r
-\r
-function parseWindowOpen(onclick) {\r
-       var formObj = document.forms[0];\r
-\r
-       // Preprocess center code\r
-       if (onclick.indexOf('return false;') != -1) {\r
-               formObj.popupreturn.checked = true;\r
-               onclick = onclick.replace('return false;', '');\r
-       } else\r
-               formObj.popupreturn.checked = false;\r
-\r
-       var onClickData = parseLink(onclick);\r
-\r
-       if (onClickData != null) {\r
-               formObj.ispopup.checked = true;\r
-               setPopupControlsDisabled(false);\r
-\r
-               var onClickWindowOptions = parseOptions(onClickData['options']);\r
-               var url = onClickData['url'];\r
-\r
-               formObj.popupname.value = onClickData['target'];\r
-               formObj.popupurl.value = url;\r
-               formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');\r
-               formObj.popupheight.value = getOption(onClickWindowOptions, 'height');\r
-\r
-               formObj.popupleft.value = getOption(onClickWindowOptions, 'left');\r
-               formObj.popuptop.value = getOption(onClickWindowOptions, 'top');\r
-\r
-               if (formObj.popupleft.value.indexOf('screen') != -1)\r
-                       formObj.popupleft.value = "c";\r
-\r
-               if (formObj.popuptop.value.indexOf('screen') != -1)\r
-                       formObj.popuptop.value = "c";\r
-\r
-               formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";\r
-               formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";\r
-               formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";\r
-               formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";\r
-               formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";\r
-               formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";\r
-               formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";\r
-\r
-               buildOnClick();\r
-       }\r
-}\r
-\r
-function parseFunction(onclick) {\r
-       var formObj = document.forms[0];\r
-       var onClickData = parseLink(onclick);\r
-\r
-       // TODO: Add stuff here\r
-}\r
-\r
-function getOption(opts, name) {\r
-       return typeof(opts[name]) == "undefined" ? "" : opts[name];\r
-}\r
-\r
-function setPopupControlsDisabled(state) {\r
-       var formObj = document.forms[0];\r
-\r
-       formObj.popupname.disabled = state;\r
-       formObj.popupurl.disabled = state;\r
-       formObj.popupwidth.disabled = state;\r
-       formObj.popupheight.disabled = state;\r
-       formObj.popupleft.disabled = state;\r
-       formObj.popuptop.disabled = state;\r
-       formObj.popuplocation.disabled = state;\r
-       formObj.popupscrollbars.disabled = state;\r
-       formObj.popupmenubar.disabled = state;\r
-       formObj.popupresizable.disabled = state;\r
-       formObj.popuptoolbar.disabled = state;\r
-       formObj.popupstatus.disabled = state;\r
-       formObj.popupreturn.disabled = state;\r
-       formObj.popupdependent.disabled = state;\r
-\r
-       setBrowserDisabled('popupurlbrowser', state);\r
-}\r
-\r
-function parseLink(link) {\r
-       link = link.replace(new RegExp('&#39;', 'g'), "'");\r
-\r
-       var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");\r
-\r
-       // Is function name a template function\r
-       var template = templates[fnName];\r
-       if (template) {\r
-               // Build regexp\r
-               var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));\r
-               var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";\r
-               var replaceStr = "";\r
-               for (var i=0; i<variableNames.length; i++) {\r
-                       // Is string value\r
-                       if (variableNames[i].indexOf("'${") != -1)\r
-                               regExp += "'(.*)'";\r
-                       else // Number value\r
-                               regExp += "([0-9]*)";\r
-\r
-                       replaceStr += "$" + (i+1);\r
-\r
-                       // Cleanup variable name\r
-                       variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");\r
-\r
-                       if (i != variableNames.length-1) {\r
-                               regExp += "\\s*,\\s*";\r
-                               replaceStr += "<delim>";\r
-                       } else\r
-                               regExp += ".*";\r
-               }\r
-\r
-               regExp += "\\);?";\r
-\r
-               // Build variable array\r
-               var variables = [];\r
-               variables["_function"] = fnName;\r
-               var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');\r
-               for (var i=0; i<variableNames.length; i++)\r
-                       variables[variableNames[i]] = variableValues[i];\r
-\r
-               return variables;\r
-       }\r
-\r
-       return null;\r
-}\r
-\r
-function parseOptions(opts) {\r
-       if (opts == null || opts == "")\r
-               return [];\r
-\r
-       // Cleanup the options\r
-       opts = opts.toLowerCase();\r
-       opts = opts.replace(/;/g, ",");\r
-       opts = opts.replace(/[^0-9a-z=,]/g, "");\r
-\r
-       var optionChunks = opts.split(',');\r
-       var options = [];\r
-\r
-       for (var i=0; i<optionChunks.length; i++) {\r
-               var parts = optionChunks[i].split('=');\r
-\r
-               if (parts.length == 2)\r
-                       options[parts[0]] = parts[1];\r
-       }\r
-\r
-       return options;\r
-}\r
-\r
-function buildOnClick() {\r
-       var formObj = document.forms[0];\r
-\r
-       if (!formObj.ispopup.checked) {\r
-               formObj.onclick.value = "";\r
-               return;\r
-       }\r
-\r
-       var onclick = "window.open('";\r
-       var url = formObj.popupurl.value;\r
-\r
-       onclick += url + "','";\r
-       onclick += formObj.popupname.value + "','";\r
-\r
-       if (formObj.popuplocation.checked)\r
-               onclick += "location=yes,";\r
-\r
-       if (formObj.popupscrollbars.checked)\r
-               onclick += "scrollbars=yes,";\r
-\r
-       if (formObj.popupmenubar.checked)\r
-               onclick += "menubar=yes,";\r
-\r
-       if (formObj.popupresizable.checked)\r
-               onclick += "resizable=yes,";\r
-\r
-       if (formObj.popuptoolbar.checked)\r
-               onclick += "toolbar=yes,";\r
-\r
-       if (formObj.popupstatus.checked)\r
-               onclick += "status=yes,";\r
-\r
-       if (formObj.popupdependent.checked)\r
-               onclick += "dependent=yes,";\r
-\r
-       if (formObj.popupwidth.value != "")\r
-               onclick += "width=" + formObj.popupwidth.value + ",";\r
-\r
-       if (formObj.popupheight.value != "")\r
-               onclick += "height=" + formObj.popupheight.value + ",";\r
-\r
-       if (formObj.popupleft.value != "") {\r
-               if (formObj.popupleft.value != "c")\r
-                       onclick += "left=" + formObj.popupleft.value + ",";\r
-               else\r
-                       onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";\r
-       }\r
-\r
-       if (formObj.popuptop.value != "") {\r
-               if (formObj.popuptop.value != "c")\r
-                       onclick += "top=" + formObj.popuptop.value + ",";\r
-               else\r
-                       onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";\r
-       }\r
-\r
-       if (onclick.charAt(onclick.length-1) == ',')\r
-               onclick = onclick.substring(0, onclick.length-1);\r
-\r
-       onclick += "');";\r
-\r
-       if (formObj.popupreturn.checked)\r
-               onclick += "return false;";\r
-\r
-       // tinyMCE.debug(onclick);\r
-\r
-       formObj.onclick.value = onclick;\r
-\r
-       if (formObj.href.value == "")\r
-               formObj.href.value = url;\r
-}\r
-\r
-function setAttrib(elm, attrib, value) {\r
-       var formObj = document.forms[0];\r
-       var valueElm = formObj.elements[attrib.toLowerCase()];\r
-       var dom = tinyMCEPopup.editor.dom;\r
-\r
-       if (typeof(value) == "undefined" || value == null) {\r
-               value = "";\r
-\r
-               if (valueElm)\r
-                       value = valueElm.value;\r
-       }\r
-\r
-       // Clean up the style\r
-       if (attrib == 'style')\r
-               value = dom.serializeStyle(dom.parseStyle(value), 'a');\r
-\r
-       dom.setAttrib(elm, attrib, value);\r
-}\r
-\r
-function getAnchorListHTML(id, target) {\r
-       var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";\r
-\r
-       for (i=0, len=nodes.length; i<len; i++) {\r
-               if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")\r
-                       html += '<option value="#' + name + '">' + name + '</option>';\r
-       }\r
-\r
-       if (html == "")\r
-               return "";\r
-\r
-       html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'\r
-               + ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'\r
-               + '>'\r
-               + '<option value="">---</option>'\r
-               + html\r
-               + '</select>';\r
-\r
-       return html;\r
-}\r
-\r
-function insertAction() {\r
-       var inst = tinyMCEPopup.editor;\r
-       var elm, elementArray, i;\r
-\r
-       elm = inst.selection.getNode();\r
-       checkPrefix(document.forms[0].href);\r
-\r
-       elm = inst.dom.getParent(elm, "A");\r
-\r
-       // Remove element if there is no href\r
-       if (!document.forms[0].href.value) {\r
-               i = inst.selection.getBookmark();\r
-               inst.dom.remove(elm, 1);\r
-               inst.selection.moveToBookmark(i);\r
-               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-               tinyMCEPopup.close();\r
-               return;\r
-       }\r
-\r
-       // Create new anchor elements\r
-       if (elm == null) {\r
-               inst.getDoc().execCommand("unlink", false, null);\r
-               tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});\r
-\r
-               elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});\r
-               for (i=0; i<elementArray.length; i++)\r
-                       setAllAttribs(elm = elementArray[i]);\r
-       } else\r
-               setAllAttribs(elm);\r
-\r
-       // Don't move caret if selection was image\r
-       if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {\r
-               inst.focus();\r
-               inst.selection.select(elm);\r
-               inst.selection.collapse(0);\r
-               tinyMCEPopup.storeSelection();\r
-       }\r
-\r
-       tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function setAllAttribs(elm) {\r
-       var formObj = document.forms[0];\r
-       var href = formObj.href.value.replace(/ /g, '%20');\r
-       var target = getSelectValue(formObj, 'targetlist');\r
-\r
-       setAttrib(elm, 'href', href);\r
-       setAttrib(elm, 'title');\r
-       setAttrib(elm, 'target', target == '_self' ? '' : target);\r
-       setAttrib(elm, 'id');\r
-       setAttrib(elm, 'style');\r
-       setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));\r
-       setAttrib(elm, 'rel');\r
-       setAttrib(elm, 'rev');\r
-       setAttrib(elm, 'charset');\r
-       setAttrib(elm, 'hreflang');\r
-       setAttrib(elm, 'dir');\r
-       setAttrib(elm, 'lang');\r
-       setAttrib(elm, 'tabindex');\r
-       setAttrib(elm, 'accesskey');\r
-       setAttrib(elm, 'type');\r
-       setAttrib(elm, 'onfocus');\r
-       setAttrib(elm, 'onblur');\r
-       setAttrib(elm, 'onclick');\r
-       setAttrib(elm, 'ondblclick');\r
-       setAttrib(elm, 'onmousedown');\r
-       setAttrib(elm, 'onmouseup');\r
-       setAttrib(elm, 'onmouseover');\r
-       setAttrib(elm, 'onmousemove');\r
-       setAttrib(elm, 'onmouseout');\r
-       setAttrib(elm, 'onkeypress');\r
-       setAttrib(elm, 'onkeydown');\r
-       setAttrib(elm, 'onkeyup');\r
-\r
-       // Refresh in old MSIE\r
-       if (tinyMCE.isMSIE5)\r
-               elm.outerHTML = elm.outerHTML;\r
-}\r
-\r
-function getSelectValue(form_obj, field_name) {\r
-       var elm = form_obj.elements[field_name];\r
-\r
-       if (!elm || elm.options == null || elm.selectedIndex == -1)\r
-               return "";\r
-\r
-       return elm.options[elm.selectedIndex].value;\r
-}\r
-\r
-function getLinkListHTML(elm_id, target_form_element, onchange_func) {\r
-       if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)\r
-               return "";\r
-\r
-       var html = "";\r
-\r
-       html += '<select id="' + elm_id + '" name="' + elm_id + '"';\r
-       html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
-       html += 'this.options[this.selectedIndex].value;';\r
-\r
-       if (typeof(onchange_func) != "undefined")\r
-               html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';\r
-\r
-       html += '"><option value="">---</option>';\r
-\r
-       for (var i=0; i<tinyMCELinkList.length; i++)\r
-               html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';\r
-\r
-       html += '</select>';\r
-\r
-       return html;\r
-\r
-       // tinyMCE.debug('-- image list start --', html, '-- image list end --');\r
-}\r
-\r
-function getTargetListHTML(elm_id, target_form_element) {\r
-       var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');\r
-       var html = '';\r
-\r
-       html += '<select id="' + elm_id + '" name="' + elm_id + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
-       html += 'this.options[this.selectedIndex].value;">';\r
-       html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';\r
-       html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';\r
-       html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';\r
-       html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';\r
-\r
-       for (var i=0; i<targets.length; i++) {\r
-               var key, value;\r
-\r
-               if (targets[i] == "")\r
-                       continue;\r
-\r
-               key = targets[i].split('=')[0];\r
-               value = targets[i].split('=')[1];\r
-\r
-               html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';\r
-       }\r
-\r
-       html += '</select>';\r
-\r
-       return html;\r
-}\r
-\r
-// While loading\r
-preinit();\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js
deleted file mode 100644 (file)
index 19dff29..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-tinyMCE.addI18n('en.advlink_dlg',{\r
-title:"Insert/edit link",\r
-url:"Link URL",\r
-target:"Target",\r
-titlefield:"Title",\r
-is_email:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",\r
-is_external:"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",\r
-list:"Link list",\r
-general_tab:"General",\r
-popup_tab:"Popup",\r
-events_tab:"Events",\r
-advanced_tab:"Advanced",\r
-general_props:"General properties",\r
-popup_props:"Popup properties",\r
-event_props:"Events",\r
-advanced_props:"Advanced properties",\r
-popup_opts:"Options",\r
-anchor_names:"Anchors",\r
-target_same:"Open in this window / frame",\r
-target_parent:"Open in parent window / frame",\r
-target_top:"Open in top frame (replaces all frames)",\r
-target_blank:"Open in new window",\r
-popup:"Javascript popup",\r
-popup_url:"Popup URL",\r
-popup_name:"Window name",\r
-popup_return:"Insert 'return false'",\r
-popup_scrollbars:"Show scrollbars",\r
-popup_statusbar:"Show status bar",\r
-popup_toolbar:"Show toolbars",\r
-popup_menubar:"Show menu bar",\r
-popup_location:"Show location bar",\r
-popup_resizable:"Make window resizable",\r
-popup_dependent:"Dependent (Mozilla/Firefox only)",\r
-popup_size:"Size",\r
-width:"Width",\r
-height:"Height",\r
-popup_position:"Position (X/Y)",\r
-id:"Id",\r
-style:"Style",\r
-classes:"Classes",\r
-target_name:"Target name",\r
-langdir:"Language direction",\r
-target_langcode:"Target language",\r
-langcode:"Language code",\r
-encoding:"Target character encoding",\r
-mime:"Target MIME type",\r
-rel:"Relationship page to target",\r
-rev:"Relationship target to page",\r
-tabindex:"Tabindex",\r
-accesskey:"Accesskey",\r
-ltr:"Left to right",\r
-rtl:"Right to left",\r
-link_list:"Link list"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/link.htm b/plugins/TinyMCE/js/plugins/advlink/link.htm
deleted file mode 100644 (file)
index 8ab7c2a..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advlink_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="js/advlink.js"></script>\r
-       <link href="css/advlink.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">\r
-       <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>\r
-       <form onsubmit="insertAction();return false;" action="#">\r
-               <div class="tabs" role="presentation">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>\r
-                               <li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>\r
-                               <li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper" role="presentation">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#advlink_dlg.general_props}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0" role="presentation">\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>\r
-                                                               <td><table border="0" cellspacing="0" cellpadding="0">\r
-                                                       <tr>\r
-                                                               <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>\r
-                                                               <td id="hrefbrowsercontainer">&nbsp;</td>\r
-                                                       </tr>\r
-                                                       </table></td>\r
-                                               </tr>\r
-                                               <tr id="linklisthrefrow">\r
-                                                       <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>\r
-                                                       <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>\r
-                                               </tr>\r
-                                               <tr id="anchorlistrow">\r
-                                                       <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>\r
-                                                       <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>\r
-                                                       <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>\r
-                                                       <td><input id="title" name="title" type="text" value="" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
-                                                       <td>\r
-                                                                <select id="classlist" name="classlist" onchange="changeClass();">\r
-                                                                       <option value="" selected="selected">{#not_set}</option>\r
-                                                                </select>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="popup_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#advlink_dlg.popup_props}</legend>\r
-\r
-                                       <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />\r
-                                       <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>\r
-\r
-                                       <table border="0" cellpadding="0" cellspacing="4" role="presentation" >\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>\r
-                                                       <td>\r
-                                                               <table border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>\r
-                                                                               <td id="popupurlbrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>\r
-                                                       <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>\r
-                                               </tr>\r
-                                               <tr role="group" aria-labelledby="popup_size_label">\r
-                                                       <td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>\r
-                                                       <td class="nowrap">\r
-                                                               <span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>\r
-                                                               <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x\r
-                                                               <span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>\r
-                                                               <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px\r
-                                                       </td>\r
-                                               </tr>\r
-                                               <tr role="group" aria-labelledby="popup_position_label center_hint">\r
-                                                       <td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>\r
-                                                       <td class="nowrap">\r
-                                                               <span style="display:none" id="x_voiceLabel">X</span>\r
-                                                               <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /                                \r
-                                                               <span style="display:none" id="y_voiceLabel">Y</span>\r
-                                                               <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-\r
-                                       <fieldset>\r
-                                               <legend>{#advlink_dlg.popup_opts}</legend>\r
-\r
-                                               <table border="0" cellpadding="0" cellspacing="4" role="presentation" >\r
-                                                       <tr>\r
-                                                               <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>\r
-                                                               <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>\r
-                                                               <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>\r
-                                                               <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>\r
-                                                               <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>\r
-                                                               <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>\r
-                                                               <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>\r
-                                                       </tr>\r
-                                               </table>\r
-                                       </fieldset>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                       <fieldset>\r
-                                       <legend>{#advlink_dlg.advanced_props}</legend>\r
-\r
-                                       <table border="0" cellpadding="0" cellspacing="4" role="presentation" >\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td> \r
-                                                       <td><input id="id" name="id" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>\r
-                                                       <td><input type="text" id="style" name="style" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>\r
-                                                       <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>\r
-                                                       <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="dir" name="dir"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#advlink_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#advlink_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>\r
-                                                       <td><input type="text" id="hreflang" name="hreflang" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td> \r
-                                                       <td>\r
-                                                               <input id="lang" name="lang" type="text" value="" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>\r
-                                                       <td><input type="text" id="charset" name="charset" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>\r
-                                                       <td><input type="text" id="type" name="type" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>\r
-                                                       <td><select id="rel" name="rel"> \r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="lightbox">Lightbox</option> \r
-                                                                       <option value="alternate">Alternate</option> \r
-                                                                       <option value="designates">Designates</option> \r
-                                                                       <option value="stylesheet">Stylesheet</option> \r
-                                                                       <option value="start">Start</option> \r
-                                                                       <option value="next">Next</option> \r
-                                                                       <option value="prev">Prev</option> \r
-                                                                       <option value="contents">Contents</option> \r
-                                                                       <option value="index">Index</option> \r
-                                                                       <option value="glossary">Glossary</option> \r
-                                                                       <option value="copyright">Copyright</option> \r
-                                                                       <option value="chapter">Chapter</option> \r
-                                                                       <option value="subsection">Subsection</option> \r
-                                                                       <option value="appendix">Appendix</option> \r
-                                                                       <option value="help">Help</option> \r
-                                                                       <option value="bookmark">Bookmark</option>\r
-                                                                       <option value="nofollow">No Follow</option>\r
-                                                                       <option value="tag">Tag</option>\r
-                                                               </select> \r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>\r
-                                                       <td><select id="rev" name="rev"> \r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="alternate">Alternate</option> \r
-                                                                       <option value="designates">Designates</option> \r
-                                                                       <option value="stylesheet">Stylesheet</option> \r
-                                                                       <option value="start">Start</option> \r
-                                                                       <option value="next">Next</option> \r
-                                                                       <option value="prev">Prev</option> \r
-                                                                       <option value="contents">Contents</option> \r
-                                                                       <option value="index">Index</option> \r
-                                                                       <option value="glossary">Glossary</option> \r
-                                                                       <option value="copyright">Copyright</option> \r
-                                                                       <option value="chapter">Chapter</option> \r
-                                                                       <option value="subsection">Subsection</option> \r
-                                                                       <option value="appendix">Appendix</option> \r
-                                                                       <option value="help">Help</option> \r
-                                                                       <option value="bookmark">Bookmark</option> \r
-                                                               </select> \r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>\r
-                                                       <td><input type="text" id="tabindex" name="tabindex" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>\r
-                                                       <td><input type="text" id="accesskey" name="accesskey" value="" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                                       <legend>{#advlink_dlg.event_props}</legend>\r
-\r
-                                       <table border="0" cellpadding="0" cellspacing="4" role="presentation" >\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onfocus">onfocus</label></td> \r
-                                                       <td><input id="onfocus" name="onfocus" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onblur">onblur</label></td> \r
-                                                       <td><input id="onblur" name="onblur" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onclick">onclick</label></td> \r
-                                                       <td><input id="onclick" name="onclick" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="ondblclick">ondblclick</label></td> \r
-                                                       <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onmousedown">onmousedown</label></td> \r
-                                                       <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onmouseup">onmouseup</label></td> \r
-                                                       <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onmouseover">onmouseover</label></td> \r
-                                                       <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onmousemove">onmousemove</label></td> \r
-                                                       <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onmouseout">onmouseout</label></td> \r
-                                                       <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onkeypress">onkeypress</label></td> \r
-                                                       <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onkeydown">onkeydown</label></td> \r
-                                                       <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="onkeyup">onkeyup</label></td> \r
-                                                       <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/advlist/editor_plugin.js b/plugins/TinyMCE/js/plugins/advlist/editor_plugin.js
deleted file mode 100644 (file)
index 8895112..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("data-mce-style")}}i.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(k){if(f.isIE7&&k.styles.listStyleType=="lower-greek"){return}k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js
deleted file mode 100644 (file)
index 13ef02d..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.plugins.AdvListPlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       function buildFormats(str) {\r
-                               var formats = [];\r
-\r
-                               each(str.split(/,/), function(type) {\r
-                                       formats.push({\r
-                                               title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),\r
-                                               styles : {\r
-                                                       listStyleType : type == 'default' ? '' : type\r
-                                               }\r
-                                       });\r
-                               });\r
-\r
-                               return formats;\r
-                       };\r
-\r
-                       // Setup number formats from config or default\r
-                       t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");\r
-                       t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");\r
-\r
-                       if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))\r
-                               t.isIE7 = true;\r
-               },\r
-\r
-               createControl: function(name, cm) {\r
-                       var t = this, btn, format;\r
-\r
-                       if (name == 'numlist' || name == 'bullist') {\r
-                               // Default to first item if it's a default item\r
-                               if (t[name][0].title == 'advlist.def')\r
-                                       format = t[name][0];\r
-\r
-                               function hasFormat(node, format) {\r
-                                       var state = true;\r
-\r
-                                       each(format.styles, function(value, name) {\r
-                                               // Format doesn't match\r
-                                               if (t.editor.dom.getStyle(node, name) != value) {\r
-                                                       state = false;\r
-                                                       return false;\r
-                                               }\r
-                                       });\r
-\r
-                                       return state;\r
-                               };\r
-\r
-                               function applyListFormat() {\r
-                                       var list, ed = t.editor, dom = ed.dom, sel = ed.selection;\r
-\r
-                                       // Check for existing list element\r
-                                       list = dom.getParent(sel.getNode(), 'ol,ul');\r
-\r
-                                       // Switch/add list type if needed\r
-                                       if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))\r
-                                               ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');\r
-\r
-                                       // Append styles to new list element\r
-                                       if (format) {\r
-                                               list = dom.getParent(sel.getNode(), 'ol,ul');\r
-                                               if (list) {\r
-                                                       dom.setStyles(list, format.styles);\r
-                                                       list.removeAttribute('data-mce-style');\r
-                                               }\r
-                                       }\r
-                                       ed.focus();\r
-                               };\r
-\r
-                               btn = cm.createSplitButton(name, {\r
-                                       title : 'advanced.' + name + '_desc',\r
-                                       'class' : 'mce_' + name,\r
-                                       onclick : function() {\r
-                                               applyListFormat();\r
-                                       }\r
-                               });\r
-\r
-                               btn.onRenderMenu.add(function(btn, menu) {\r
-                                       menu.onShowMenu.add(function() {\r
-                                               var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList;\r
-\r
-                                               if (list || format) {\r
-                                                       fmtList = t[name];\r
-\r
-                                                       // Unselect existing items\r
-                                                       each(menu.items, function(item) {\r
-                                                               var state = true;\r
-\r
-                                                               item.setSelected(0);\r
-\r
-                                                               if (list && !item.isDisabled()) {\r
-                                                                       each(fmtList, function(fmt) {\r
-                                                                               if (fmt.id == item.id) {\r
-                                                                                       if (!hasFormat(list, fmt)) {\r
-                                                                                               state = false;\r
-                                                                                               return false;\r
-                                                                                       }\r
-                                                                               }\r
-                                                                       });\r
-\r
-                                                                       if (state)\r
-                                                                               item.setSelected(1);\r
-                                                               }\r
-                                                       });\r
-\r
-                                                       // Select the current format\r
-                                                       if (!list)\r
-                                                               menu.items[format.id].setSelected(1);\r
-                                               }\r
-                                       });\r
-\r
-                                       menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);\r
-\r
-                                       each(t[name], function(item) {\r
-                                               // IE<8 doesn't support lower-greek, skip it\r
-                                               if (t.isIE7 && item.styles.listStyleType == 'lower-greek')\r
-                                                       return;\r
-\r
-                                               item.id = t.editor.dom.uniqueId();\r
-\r
-                                               menu.add({id : item.id, title : item.title, onclick : function() {\r
-                                                       format = item;\r
-                                                       applyListFormat();\r
-                                               }});\r
-                                       });\r
-                               });\r
-\r
-                               return btn;\r
-                       }\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Advanced lists',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autolink/editor_plugin.js b/plugins/TinyMCE/js/plugins/autolink/editor_plugin.js
deleted file mode 100644 (file)
index c0f683a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;if(tinyMCE.isIE){return}a.onKeyDown.add(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng().cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("mceInsertLink",false,h[1]+h[2]);i.selection.moveToBookmark(k);if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autolink/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/autolink/editor_plugin_src.js
deleted file mode 100644 (file)
index ddfe049..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
-       tinymce.create('tinymce.plugins.AutolinkPlugin', {
-       /**
-       * Initializes the plugin, this will be executed after the plugin has been created.
-       * This call is done before the editor instance has finished it's initialization so use the onInit event
-       * of the editor instance to intercept that event.
-       *
-       * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-       * @param {string} url Absolute URL to where the plugin is located.
-       */
-
-       init : function(ed, url) {
-               var t = this;
-
-               // Internet Explorer has built-in automatic linking
-               if (tinyMCE.isIE)
-                       return;
-
-               // Add a key down handler
-               ed.onKeyDown.add(function(ed, e) {
-                       if (e.keyCode == 13)
-                               return t.handleEnter(ed);
-                       });
-
-               ed.onKeyPress.add(function(ed, e) {
-                       if (e.which == 41)
-                               return t.handleEclipse(ed);
-               });
-
-               // Add a key up handler
-               ed.onKeyUp.add(function(ed, e) {
-                       if (e.keyCode == 32)
-                               return t.handleSpacebar(ed);
-                       });
-              },
-
-               handleEclipse : function(ed) {
-                       this.parseCurrentLine(ed, -1, '(', true);
-               },
-
-               handleSpacebar : function(ed) {
-                        this.parseCurrentLine(ed, 0, '', true);
-                },
-
-               handleEnter : function(ed) {
-                       this.parseCurrentLine(ed, -1, '', false);
-               },
-
-               parseCurrentLine : function(ed, end_offset, delimiter, goback) {
-                       var r, end, start, endContainer, bookmark, text, matches, prev, len;
-
-                       // We need at least five characters to form a URL,
-                       // hence, at minimum, five characters from the beginning of the line.
-                       r = ed.selection.getRng().cloneRange();
-                       if (r.startOffset < 5) {
-                               // During testing, the caret is placed inbetween two text nodes. 
-                               // The previous text node contains the URL.
-                               prev = r.endContainer.previousSibling;
-                               if (prev == null) {
-                                       if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
-                                               return;
-
-                                       prev = r.endContainer.firstChild.nextSibling;
-                               }
-                               len = prev.length;
-                               r.setStart(prev, len);
-                               r.setEnd(prev, len);
-
-                               if (r.endOffset < 5)
-                                       return;
-
-                               end = r.endOffset;
-                               endContainer = prev;
-                       } else {
-                               endContainer = r.endContainer;
-
-                               // Get a text node
-                               if (endContainer.nodeType != 3 && endContainer.firstChild) {
-                                       while (endContainer.nodeType != 3 && endContainer.firstChild)
-                                               endContainer = endContainer.firstChild;
-
-                                       r.setStart(endContainer, 0);
-                                       r.setEnd(endContainer, endContainer.nodeValue.length);
-                               }
-
-                               if (r.endOffset == 1)
-                                       end = 2;
-                               else
-                                       end = r.endOffset - 1 - end_offset;
-                       }
-
-                       start = end;
-
-                       do
-                       {
-                               // Move the selection one character backwards.
-                               r.setStart(endContainer, end - 2);
-                               r.setEnd(endContainer, end - 1);
-                               end -= 1;
-
-                               // Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
-                       } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
-
-                       if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
-                               r.setStart(endContainer, end);
-                               r.setEnd(endContainer, start);
-                               end += 1;
-                       } else if (r.startOffset == 0) {
-                               r.setStart(endContainer, 0);
-                               r.setEnd(endContainer, start);
-                       }
-                       else {
-                               r.setStart(endContainer, end);
-                               r.setEnd(endContainer, start);
-                       }
-
-                       text = r.toString();
-                       matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);
-
-                       if (matches) {
-                               if (matches[1] == 'www.') {
-                                       matches[1] = 'http://www.';
-                               }
-
-                               bookmark = ed.selection.getBookmark();
-
-                               ed.selection.setRng(r);
-                               tinyMCE.execCommand('mceInsertLink',false, matches[1] + matches[2]);
-                               ed.selection.moveToBookmark(bookmark);
-
-                               // TODO: Determine if this is still needed.
-                               if (tinyMCE.isWebKit) {
-                                       // move the caret to its original position
-                                       ed.selection.collapse(false);
-                                       var max = Math.min(endContainer.length, start + 1);
-                                       r.setStart(endContainer, max);
-                                       r.setEnd(endContainer, max);
-                                       ed.selection.setRng(r);
-                               }
-                       }
-               },
-
-               /**
-               * Returns information about the plugin as a name/value array.
-               * The current keys are longname, author, authorurl, infourl and version.
-               *
-               * @return {Object} Name/value array containing information about the plugin.
-               */
-               getInfo : function() {
-                       return {
-                               longname : 'Autolink',
-                               author : 'Moxiecode Systems AB',
-                               authorurl : 'http://tinymce.moxiecode.com',
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion
-                       };
-               }
-       });
-
-       // Register plugin
-       tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
-})();
diff --git a/plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js b/plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js
deleted file mode 100644 (file)
index 6c4ff0d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var i=a.getDoc(),f=i.body,k=i.documentElement,h=tinymce.DOM,j=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:i.body.offsetHeight;if(g>d.autoresize_min_height){j=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){j=d.autoresize_max_height;a.getBody().style.overflowY="auto"}else{a.getBody().style.overflowY="hidden"}if(j!==e){h.setStyle(h.get(a.id+"_ifr"),"height",j+"px");e=j}if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(g,f){g.setProgressState(true);d.throbbing=true;g.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(g,f){b();setTimeout(function(){b();g.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js
deleted file mode 100644 (file)
index 7d11341..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
-       /**
-        * Auto Resize
-        * 
-        * This plugin automatically resizes the content area to fit its content height.
-        * It will retain a minimum height, which is the height of the content area when
-        * it's initialized.
-        */
-       tinymce.create('tinymce.plugins.AutoResizePlugin', {
-               /**
-                * Initializes the plugin, this will be executed after the plugin has been created.
-                * This call is done before the editor instance has finished it's initialization so use the onInit event
-                * of the editor instance to intercept that event.
-                *
-                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-                * @param {string} url Absolute URL to where the plugin is located.
-                */
-               init : function(ed, url) {
-                       var t = this, oldSize = 0;
-
-                       if (ed.getParam('fullscreen_is_enabled'))
-                               return;
-
-                       /**
-                        * This method gets executed each time the editor needs to resize.
-                        */
-                       function resize() {
-                               var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
-
-                               // Get height differently depending on the browser used
-                               myHeight = tinymce.isIE ? b.scrollHeight : d.body.offsetHeight;
-
-                               // Don't make it smaller than the minimum height
-                               if (myHeight > t.autoresize_min_height)
-                                       resizeHeight = myHeight;
-
-                               // If a maximum height has been defined don't exceed this height
-                               if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
-                                       resizeHeight = t.autoresize_max_height;
-                                       ed.getBody().style.overflowY = "auto";
-                               } else
-                                       ed.getBody().style.overflowY = "hidden";
-
-                               // Resize content element
-                               if (resizeHeight !== oldSize) {
-                                       DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
-                                       oldSize = resizeHeight;
-                               }
-
-                               // if we're throbbing, we'll re-throb to match the new size
-                               if (t.throbbing) {
-                                       ed.setProgressState(false);
-                                       ed.setProgressState(true);
-                               }
-                       };
-
-                       t.editor = ed;
-
-                       // Define minimum height
-                       t.autoresize_min_height = parseInt( ed.getParam('autoresize_min_height', ed.getElement().offsetHeight) );
-
-                       // Define maximum height        
-                       t.autoresize_max_height = parseInt( ed.getParam('autoresize_max_height', 0) );
-
-                       // Add padding at the bottom for better UX
-                       ed.onInit.add(function(ed){
-                               ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
-                       });
-
-                       // Add appropriate listeners for resizing content area
-                       ed.onChange.add(resize);
-                       ed.onSetContent.add(resize);
-                       ed.onPaste.add(resize);
-                       ed.onKeyUp.add(resize);
-                       ed.onPostRender.add(resize);
-
-                       if (ed.getParam('autoresize_on_init', true)) {
-                               // Things to do when the editor is ready
-                               ed.onInit.add(function(ed, l) {
-                                       // Show throbber until content area is resized properly
-                                       ed.setProgressState(true);
-                                       t.throbbing = true;
-
-                                       // Hide scrollbars
-                                       ed.getBody().style.overflowY = "hidden";
-                               });
-
-                               ed.onLoadContent.add(function(ed, l) {
-                                       resize();
-
-                                       // Because the content area resizes when its content CSS loads,
-                                       // and we can't easily add a listener to its onload event,
-                                       // we'll just trigger a resize after a short loading period
-                                       setTimeout(function() {
-                                               resize();
-
-                                               // Disable throbber
-                                               ed.setProgressState(false);
-                                               t.throbbing = false;
-                                       }, 1250);
-                               });
-                       }
-
-                       // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
-                       ed.addCommand('mceAutoResize', resize);
-               },
-
-               /**
-                * Returns information about the plugin as a name/value array.
-                * The current keys are longname, author, authorurl, infourl and version.
-                *
-                * @return {Object} Name/value array containing information about the plugin.
-                */
-               getInfo : function() {
-                       return {
-                               longname : 'Auto Resize',
-                               author : 'Moxiecode Systems AB',
-                               authorurl : 'http://tinymce.moxiecode.com',
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion
-                       };
-               }
-       });
-
-       // Register plugin
-       tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
-})();
diff --git a/plugins/TinyMCE/js/plugins/autosave/editor_plugin.js b/plugins/TinyMCE/js/plugins/autosave/editor_plugin.js
deleted file mode 100644 (file)
index 7f49107..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js
deleted file mode 100644 (file)
index 061cf13..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- *\r
- * Adds auto-save capability to the TinyMCE text editor to rescue content\r
- * inadvertently lost. This plugin was originally developed by Speednet\r
- * and that project can be found here: http://code.google.com/p/tinyautosave/\r
- *\r
- * TECHNOLOGY DISCUSSION:\r
- * \r
- * The plugin attempts to use the most advanced features available in the current browser to save\r
- * as much content as possible.  There are a total of four different methods used to autosave the\r
- * content.  In order of preference, they are:\r
- * \r
- * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain\r
- * on the client computer. Data stored in the localStorage area has no expiration date, so we must\r
- * manage expiring the data ourselves.  localStorage is fully supported by IE8, and it is supposed\r
- * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers.  As\r
- * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,\r
- * localStorage is stored in the following folder:\r
- * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]\r
- * \r
- * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,\r
- * except it is designed to expire after a certain amount of time.  Because the specification\r
- * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and\r
- * manage the expiration ourselves.  sessionStorage has similar storage characteristics to\r
- * localStorage, although it seems to have better support by Firefox 3 at the moment.  (That will\r
- * certainly change as Firefox continues getting better at HTML 5 adoption.)\r
- * \r
- * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a\r
- * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client\r
- * computer.  The feature is available for IE 5+, which makes it available for every version of IE\r
- * supported by TinyMCE.  The content is persistent across browser restarts and expires on the\r
- * date/time specified, just like a cookie.  However, the data is not cleared when the user clears\r
- * cookies on the browser, which makes it well-suited for rescuing autosaved content.  UserData,\r
- * like other Microsoft IE browser technologies, is implemented as a behavior attached to a\r
- * specific DOM object, so in this case we attach the behavior to the same DOM element that the\r
- * TinyMCE editor instance is attached to.\r
- */\r
-\r
-(function(tinymce) {\r
-       // Setup constants to help the compressor to reduce script size\r
-       var PLUGIN_NAME = 'autosave',\r
-               RESTORE_DRAFT = 'restoredraft',\r
-               TRUE = true,\r
-               undefined,\r
-               unloadHandlerAdded,\r
-               Dispatcher = tinymce.util.Dispatcher;\r
-\r
-       /**\r
-        * This plugin adds auto-save capability to the TinyMCE text editor to rescue content\r
-        * inadvertently lost. By using localStorage.\r
-        *\r
-        * @class tinymce.plugins.AutoSave\r
-        */\r
-       tinymce.create('tinymce.plugins.AutoSave', {\r
-               /**\r
-                * Initializes the plugin, this will be executed after the plugin has been created.\r
-                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
-                * of the editor instance to intercept that event.\r
-                *\r
-                * @method init\r
-                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
-                * @param {string} url Absolute URL to where the plugin is located.\r
-                */\r
-               init : function(ed, url) {\r
-                       var self = this, settings = ed.settings;\r
-\r
-                       self.editor = ed;\r
-\r
-                       // Parses the specified time string into a milisecond number 10m, 10s etc.\r
-                       function parseTime(time) {\r
-                               var multipels = {\r
-                                       s : 1000,\r
-                                       m : 60000\r
-                               };\r
-\r
-                               time = /^(\d+)([ms]?)$/.exec('' + time);\r
-\r
-                               return (time[2] ? multipels[time[2]] : 1) * parseInt(time);\r
-                       };\r
-\r
-                       // Default config\r
-                       tinymce.each({\r
-                               ask_before_unload : TRUE,\r
-                               interval : '30s',\r
-                               retention : '20m',\r
-                               minlength : 50\r
-                       }, function(value, key) {\r
-                               key = PLUGIN_NAME + '_' + key;\r
-\r
-                               if (settings[key] === undefined)\r
-                                       settings[key] = value;\r
-                       });\r
-\r
-                       // Parse times\r
-                       settings.autosave_interval = parseTime(settings.autosave_interval);\r
-                       settings.autosave_retention = parseTime(settings.autosave_retention);\r
-\r
-                       // Register restore button\r
-                       ed.addButton(RESTORE_DRAFT, {\r
-                               title : PLUGIN_NAME + ".restore_content",\r
-                               onclick : function() {\r
-                                       if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {\r
-                                               // Show confirm dialog if the editor isn't empty\r
-                                               ed.windowManager.confirm(\r
-                                                       PLUGIN_NAME + ".warning_message",\r
-                                                       function(ok) {\r
-                                                               if (ok)\r
-                                                                       self.restoreDraft();\r
-                                                       }\r
-                                               );\r
-                                       } else\r
-                                               self.restoreDraft();\r
-                               }\r
-                       });\r
-\r
-                       // Enable/disable restoredraft button depending on if there is a draft stored or not\r
-                       ed.onNodeChange.add(function() {\r
-                               var controlManager = ed.controlManager;\r
-\r
-                               if (controlManager.get(RESTORE_DRAFT))\r
-                                       controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());\r
-                       });\r
-\r
-                       ed.onInit.add(function() {\r
-                               // Check if the user added the restore button, then setup auto storage logic\r
-                               if (ed.controlManager.get(RESTORE_DRAFT)) {\r
-                                       // Setup storage engine\r
-                                       self.setupStorage(ed);\r
-\r
-                                       // Auto save contents each interval time\r
-                                       setInterval(function() {\r
-                                               self.storeDraft();\r
-                                               ed.nodeChanged();\r
-                                       }, settings.autosave_interval);\r
-                               }\r
-                       });\r
-\r
-                       /**\r
-                        * This event gets fired when a draft is stored to local storage.\r
-                        *\r
-                        * @event onStoreDraft\r
-                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
-                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
-                        */\r
-                       self.onStoreDraft = new Dispatcher(self);\r
-\r
-                       /**\r
-                        * This event gets fired when a draft is restored from local storage.\r
-                        *\r
-                        * @event onStoreDraft\r
-                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
-                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
-                        */\r
-                       self.onRestoreDraft = new Dispatcher(self);\r
-\r
-                       /**\r
-                        * This event gets fired when a draft removed/expired.\r
-                        *\r
-                        * @event onRemoveDraft\r
-                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
-                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
-                        */\r
-                       self.onRemoveDraft = new Dispatcher(self);\r
-\r
-                       // Add ask before unload dialog only add one unload handler\r
-                       if (!unloadHandlerAdded) {\r
-                               window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;\r
-                               unloadHandlerAdded = TRUE;\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * Returns information about the plugin as a name/value array.\r
-                * The current keys are longname, author, authorurl, infourl and version.\r
-                *\r
-                * @method getInfo\r
-                * @return {Object} Name/value array containing information about the plugin.\r
-                */\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Auto save',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               /**\r
-                * Returns an expiration date UTC string.\r
-                *\r
-                * @method getExpDate\r
-                * @return {String} Expiration date UTC string.\r
-                */\r
-               getExpDate : function() {\r
-                       return new Date(\r
-                               new Date().getTime() + this.editor.settings.autosave_retention\r
-                       ).toUTCString();\r
-               },\r
-\r
-               /**\r
-                * This method will setup the storage engine. If the browser has support for it.\r
-                *\r
-                * @method setupStorage\r
-                */\r
-               setupStorage : function(ed) {\r
-                       var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";\r
-\r
-                       self.key = PLUGIN_NAME + ed.id;\r
-\r
-                       // Loop though each storage engine type until we find one that works\r
-                       tinymce.each([\r
-                               function() {\r
-                                       // Try HTML5 Local Storage\r
-                                       if (localStorage) {\r
-                                               localStorage.setItem(testKey, testVal);\r
-\r
-                                               if (localStorage.getItem(testKey) === testVal) {\r
-                                                       localStorage.removeItem(testKey);\r
-\r
-                                                       return localStorage;\r
-                                               }\r
-                                       }\r
-                               },\r
-\r
-                               function() {\r
-                                       // Try HTML5 Session Storage\r
-                                       if (sessionStorage) {\r
-                                               sessionStorage.setItem(testKey, testVal);\r
-\r
-                                               if (sessionStorage.getItem(testKey) === testVal) {\r
-                                                       sessionStorage.removeItem(testKey);\r
-\r
-                                                       return sessionStorage;\r
-                                               }\r
-                                       }\r
-                               },\r
-\r
-                               function() {\r
-                                       // Try IE userData\r
-                                       if (tinymce.isIE) {\r
-                                               ed.getElement().style.behavior = "url('#default#userData')";\r
-\r
-                                               // Fake localStorage on old IE\r
-                                               return {\r
-                                                       autoExpires : TRUE,\r
-\r
-                                                       setItem : function(key, value) {\r
-                                                               var userDataElement = ed.getElement();\r
-\r
-                                                               userDataElement.setAttribute(key, value);\r
-                                                               userDataElement.expires = self.getExpDate();\r
-\r
-                                                               try {\r
-                                                                       userDataElement.save("TinyMCE");\r
-                                                               } catch (e) {\r
-                                                                       // Ignore, saving might fail if "Userdata Persistence" is disabled in IE\r
-                                                               }\r
-                                                       },\r
-\r
-                                                       getItem : function(key) {\r
-                                                               var userDataElement = ed.getElement();\r
-\r
-                                                               try {\r
-                                                                       userDataElement.load("TinyMCE");\r
-                                                                       return userDataElement.getAttribute(key);\r
-                                                               } catch (e) {\r
-                                                                       // Ignore, loading might fail if "Userdata Persistence" is disabled in IE\r
-                                                                       return null;\r
-                                                               }\r
-                                                       },\r
-\r
-                                                       removeItem : function(key) {\r
-                                                               ed.getElement().removeAttribute(key);\r
-                                                       }\r
-                                               };\r
-                                       }\r
-                               },\r
-                       ], function(setup) {\r
-                               // Try executing each function to find a suitable storage engine\r
-                               try {\r
-                                       self.storage = setup();\r
-\r
-                                       if (self.storage)\r
-                                               return false;\r
-                               } catch (e) {\r
-                                       // Ignore\r
-                               }\r
-                       });\r
-               },\r
-\r
-               /**\r
-                * This method will store the current contents in the the storage engine.\r
-                *\r
-                * @method storeDraft\r
-                */\r
-               storeDraft : function() {\r
-                       var self = this, storage = self.storage, editor = self.editor, expires, content;\r
-\r
-                       // Is the contents dirty\r
-                       if (storage) {\r
-                               // If there is no existing key and the contents hasn't been changed since\r
-                               // it's original value then there is no point in saving a draft\r
-                               if (!storage.getItem(self.key) && !editor.isDirty())\r
-                                       return;\r
-\r
-                               // Store contents if the contents if longer than the minlength of characters\r
-                               content = editor.getContent({draft: true});\r
-                               if (content.length > editor.settings.autosave_minlength) {\r
-                                       expires = self.getExpDate();\r
-\r
-                                       // Store expiration date if needed IE userData has auto expire built in\r
-                                       if (!self.storage.autoExpires)\r
-                                               self.storage.setItem(self.key + "_expires", expires);\r
-\r
-                                       self.storage.setItem(self.key, content);\r
-                                       self.onStoreDraft.dispatch(self, {\r
-                                               expires : expires,\r
-                                               content : content\r
-                                       });\r
-                               }\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * This method will restore the contents from the storage engine back to the editor.\r
-                *\r
-                * @method restoreDraft\r
-                */\r
-               restoreDraft : function() {\r
-                       var self = this, storage = self.storage;\r
-\r
-                       if (storage) {\r
-                               content = storage.getItem(self.key);\r
-\r
-                               if (content) {\r
-                                       self.editor.setContent(content);\r
-                                       self.onRestoreDraft.dispatch(self, {\r
-                                               content : content\r
-                                       });\r
-                               }\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * This method will return true/false if there is a local storage draft available.\r
-                *\r
-                * @method hasDraft\r
-                * @return {boolean} true/false state if there is a local draft.\r
-                */\r
-               hasDraft : function() {\r
-                       var self = this, storage = self.storage, expDate, exists;\r
-\r
-                       if (storage) {\r
-                               // Does the item exist at all\r
-                               exists = !!storage.getItem(self.key);\r
-                               if (exists) {\r
-                                       // Storage needs autoexpire\r
-                                       if (!self.storage.autoExpires) {\r
-                                               expDate = new Date(storage.getItem(self.key + "_expires"));\r
-\r
-                                               // Contents hasn't expired\r
-                                               if (new Date().getTime() < expDate.getTime())\r
-                                                       return TRUE;\r
-\r
-                                               // Remove it if it has\r
-                                               self.removeDraft();\r
-                                       } else\r
-                                               return TRUE;\r
-                               }\r
-                       }\r
-\r
-                       return false;\r
-               },\r
-\r
-               /**\r
-                * Removes the currently stored draft.\r
-                *\r
-                * @method removeDraft\r
-                */\r
-               removeDraft : function() {\r
-                       var self = this, storage = self.storage, key = self.key, content;\r
-\r
-                       if (storage) {\r
-                               // Get current contents and remove the existing draft\r
-                               content = storage.getItem(key);\r
-                               storage.removeItem(key);\r
-                               storage.removeItem(key + "_expires");\r
-\r
-                               // Dispatch remove event if we had any contents\r
-                               if (content) {\r
-                                       self.onRemoveDraft.dispatch(self, {\r
-                                               content : content\r
-                                       });\r
-                               }\r
-                       }\r
-               },\r
-\r
-               "static" : {\r
-                       // Internal unload handler will be called before the page is unloaded\r
-                       _beforeUnloadHandler : function(e) {\r
-                               var msg;\r
-\r
-                               tinymce.each(tinyMCE.editors, function(ed) {\r
-                                       // Store a draft for each editor instance\r
-                                       if (ed.plugins.autosave)\r
-                                               ed.plugins.autosave.storeDraft();\r
-\r
-                                       // Never ask in fullscreen mode\r
-                                       if (ed.getParam("fullscreen_is_enabled"))\r
-                                               return;\r
-\r
-                                       // Setup a return message if the editor is dirty\r
-                                       if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))\r
-                                               msg = ed.getLang("autosave.unload_msg");\r
-                               });\r
-\r
-                               return msg;\r
-                       }\r
-               }\r
-       });\r
-\r
-       tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);\r
-})(tinymce);\r
diff --git a/plugins/TinyMCE/js/plugins/autosave/langs/en.js b/plugins/TinyMCE/js/plugins/autosave/langs/en.js
deleted file mode 100644 (file)
index fce6bd3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-tinyMCE.addI18n('en.autosave',{\r
-restore_content: "Restore auto-saved content",\r
-warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js b/plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js
deleted file mode 100644 (file)
index 8f8821f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;|\u00a0/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js
deleted file mode 100644 (file)
index 4e7eb33..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.BBCodePlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();\r
-\r
-                       ed.onBeforeSetContent.add(function(ed, o) {\r
-                               o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
-                       });\r
-\r
-                       ed.onPostProcess.add(function(ed, o) {\r
-                               if (o.set)\r
-                                       o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
-\r
-                               if (o.get)\r
-                                       o.content = t['_' + dialect + '_html2bbcode'](o.content);\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'BBCode Plugin',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               // HTML -> BBCode in PunBB dialect\r
-               _punbb_html2bbcode : function(s) {\r
-                       s = tinymce.trim(s);\r
-\r
-                       function rep(re, str) {\r
-                               s = s.replace(re, str);\r
-                       };\r
-\r
-                       // example: <strong> to [b]\r
-                       rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
-                       rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");\r
-                       rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");\r
-                       rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");\r
-                       rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");\r
-                       rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");\r
-                       rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");\r
-                       rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");\r
-                       rep(/<font>(.*?)<\/font>/gi,"$1");\r
-                       rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");\r
-                       rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");\r
-                       rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");\r
-                       rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");\r
-                       rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");\r
-                       rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");\r
-                       rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");\r
-                       rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");\r
-                       rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");\r
-                       rep(/<\/(strong|b)>/gi,"[/b]");\r
-                       rep(/<(strong|b)>/gi,"[b]");\r
-                       rep(/<\/(em|i)>/gi,"[/i]");\r
-                       rep(/<(em|i)>/gi,"[i]");\r
-                       rep(/<\/u>/gi,"[/u]");\r
-                       rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");\r
-                       rep(/<u>/gi,"[u]");\r
-                       rep(/<blockquote[^>]*>/gi,"[quote]");\r
-                       rep(/<\/blockquote>/gi,"[/quote]");\r
-                       rep(/<br \/>/gi,"\n");\r
-                       rep(/<br\/>/gi,"\n");\r
-                       rep(/<br>/gi,"\n");\r
-                       rep(/<p>/gi,"");\r
-                       rep(/<\/p>/gi,"\n");\r
-                       rep(/&nbsp;|\u00a0/gi," ");\r
-                       rep(/&quot;/gi,"\"");\r
-                       rep(/&lt;/gi,"<");\r
-                       rep(/&gt;/gi,">");\r
-                       rep(/&amp;/gi,"&");\r
-\r
-                       return s; \r
-               },\r
-\r
-               // BBCode -> HTML from PunBB dialect\r
-               _punbb_bbcode2html : function(s) {\r
-                       s = tinymce.trim(s);\r
-\r
-                       function rep(re, str) {\r
-                               s = s.replace(re, str);\r
-                       };\r
-\r
-                       // example: [b] to <strong>\r
-                       rep(/\n/gi,"<br />");\r
-                       rep(/\[b\]/gi,"<strong>");\r
-                       rep(/\[\/b\]/gi,"</strong>");\r
-                       rep(/\[i\]/gi,"<em>");\r
-                       rep(/\[\/i\]/gi,"</em>");\r
-                       rep(/\[u\]/gi,"<u>");\r
-                       rep(/\[\/u\]/gi,"</u>");\r
-                       rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");\r
-                       rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");\r
-                       rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");\r
-                       rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");\r
-                       rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");\r
-                       rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");\r
-\r
-                       return s; \r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js b/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js
deleted file mode 100644 (file)
index af7ae54..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(e){var h=this,f,d,i;h.editor=e;d=e.settings.contextmenu_never_use_native;h.onContextMenu=new tinymce.util.Dispatcher(this);f=e.onContextMenu.add(function(j,k){if((i!==0?i:k.ctrlKey)&&!d){return}a.cancel(k);if(k.target.nodeName=="IMG"){j.selection.select(k.target)}h._getMenu(j).showMenu(k.clientX||k.pageX,k.clientY||k.pageY);a.add(j.getDoc(),"click",function(l){g(j,l)});j.nodeChanged()});e.onRemove.add(function(){if(h._menu){h._menu.removeAll()}});function g(j,k){i=0;if(k&&k.button==2){i=k.ctrlKey;return}if(h._menu){h._menu.removeAll();h._menu.destroy();a.remove(j.getDoc(),"click",g)}}e.onMouseDown.add(g);e.onKeyDown.add(g);e.onKeyDown.add(function(j,k){if(k.shiftKey&&!k.ctrlKey&&!k.altKey&&k.keyCode===121){a.cancel(k);f(j,k)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js
deleted file mode 100644 (file)
index 956fbea..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;\r
-\r
-       /**\r
-        * This plugin a context menu to TinyMCE editor instances.\r
-        *\r
-        * @class tinymce.plugins.ContextMenu\r
-        */\r
-       tinymce.create('tinymce.plugins.ContextMenu', {\r
-               /**\r
-                * Initializes the plugin, this will be executed after the plugin has been created.\r
-                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
-                * of the editor instance to intercept that event.\r
-                *\r
-                * @method init\r
-                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
-                * @param {string} url Absolute URL to where the plugin is located.\r
-                */\r
-               init : function(ed) {\r
-                       var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey;\r
-\r
-                       t.editor = ed;\r
-\r
-                       contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;\r
-\r
-                       /**\r
-                        * This event gets fired when the context menu is shown.\r
-                        *\r
-                        * @event onContextMenu\r
-                        * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.\r
-                        * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.\r
-                        */\r
-                       t.onContextMenu = new tinymce.util.Dispatcher(this);\r
-\r
-                       showMenu = ed.onContextMenu.add(function(ed, e) {\r
-                               // Block TinyMCE menu on ctrlKey and work around Safari issue\r
-                               if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)\r
-                                       return;\r
-\r
-                               Event.cancel(e);\r
-\r
-                               // Select the image if it's clicked. WebKit would other wise expand the selection\r
-                               if (e.target.nodeName == 'IMG')\r
-                                       ed.selection.select(e.target);\r
-\r
-                               t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);\r
-                               Event.add(ed.getDoc(), 'click', function(e) {\r
-                                       hide(ed, e);\r
-                               });\r
-\r
-                               ed.nodeChanged();\r
-                       });\r
-\r
-                       ed.onRemove.add(function() {\r
-                               if (t._menu)\r
-                                       t._menu.removeAll();\r
-                       });\r
-\r
-                       function hide(ed, e) {\r
-                               realCtrlKey = 0;\r
-\r
-                               // Since the contextmenu event moves\r
-                               // the selection we need to store it away\r
-                               if (e && e.button == 2) {\r
-                                       realCtrlKey = e.ctrlKey;\r
-                                       return;\r
-                               }\r
-\r
-                               if (t._menu) {\r
-                                       t._menu.removeAll();\r
-                                       t._menu.destroy();\r
-                                       Event.remove(ed.getDoc(), 'click', hide);\r
-                               }\r
-                       };\r
-\r
-                       ed.onMouseDown.add(hide);\r
-                       ed.onKeyDown.add(hide);\r
-                       ed.onKeyDown.add(function(ed, e) {\r
-                               if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {\r
-                                       Event.cancel(e);\r
-                                       showMenu(ed, e);\r
-                               }\r
-                       });\r
-               },\r
-\r
-               /**\r
-                * Returns information about the plugin as a name/value array.\r
-                * The current keys are longname, author, authorurl, infourl and version.\r
-                *\r
-                * @method getInfo\r
-                * @return {Object} Name/value array containing information about the plugin.\r
-                */\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Contextmenu',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               _getMenu : function(ed) {\r
-                       var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;\r
-\r
-                       if (m) {\r
-                               m.removeAll();\r
-                               m.destroy();\r
-                       }\r
-\r
-                       p = DOM.getPos(ed.getContentAreaContainer());\r
-\r
-                       m = ed.controlManager.createDropMenu('contextmenu', {\r
-                               offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),\r
-                               offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),\r
-                               constrain : 1,\r
-                               keyboard_focus: true\r
-                       });\r
-\r
-                       t._menu = m;\r
-\r
-                       m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);\r
-                       m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);\r
-                       m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});\r
-\r
-                       if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {\r
-                               m.addSeparator();\r
-                               m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
-                               m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
-                       }\r
-\r
-                       m.addSeparator();\r
-                       m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
-\r
-                       m.addSeparator();\r
-                       am = m.addMenu({title : 'contextmenu.align'});\r
-                       am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});\r
-                       am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});\r
-                       am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});\r
-                       am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});\r
-\r
-                       t.onContextMenu.dispatch(t, m, el, col);\r
-\r
-                       return m;\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/directionality/editor_plugin.js b/plugins/TinyMCE/js/plugins/directionality/editor_plugin.js
deleted file mode 100644 (file)
index bce8e73..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js
deleted file mode 100644 (file)
index 4444959..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.Directionality', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       ed.addCommand('mceDirectionLTR', function() {\r
-                               var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
-\r
-                               if (e) {\r
-                                       if (ed.dom.getAttrib(e, "dir") != "ltr")\r
-                                               ed.dom.setAttrib(e, "dir", "ltr");\r
-                                       else\r
-                                               ed.dom.setAttrib(e, "dir", "");\r
-                               }\r
-\r
-                               ed.nodeChanged();\r
-                       });\r
-\r
-                       ed.addCommand('mceDirectionRTL', function() {\r
-                               var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
-\r
-                               if (e) {\r
-                                       if (ed.dom.getAttrib(e, "dir") != "rtl")\r
-                                               ed.dom.setAttrib(e, "dir", "rtl");\r
-                                       else\r
-                                               ed.dom.setAttrib(e, "dir", "");\r
-                               }\r
-\r
-                               ed.nodeChanged();\r
-                       });\r
-\r
-                       ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});\r
-                       ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});\r
-\r
-                       ed.onNodeChange.add(t._nodeChange, t);\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Directionality',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _nodeChange : function(ed, cm, n) {\r
-                       var dom = ed.dom, dir;\r
-\r
-                       n = dom.getParent(n, dom.isBlock);\r
-                       if (!n) {\r
-                               cm.setDisabled('ltr', 1);\r
-                               cm.setDisabled('rtl', 1);\r
-                               return;\r
-                       }\r
-\r
-                       dir = dom.getAttrib(n, 'dir');\r
-                       cm.setActive('ltr', dir == "ltr");\r
-                       cm.setDisabled('ltr', 0);\r
-                       cm.setActive('rtl', dir == "rtl");\r
-                       cm.setDisabled('rtl', 0);\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/editor_plugin.js b/plugins/TinyMCE/js/plugins/emotions/editor_plugin.js
deleted file mode 100644 (file)
index dbdd8ff..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js
deleted file mode 100644 (file)
index 71d5416..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function(tinymce) {\r
-       tinymce.create('tinymce.plugins.EmotionsPlugin', {\r
-               init : function(ed, url) {\r
-                       // Register commands\r
-                       ed.addCommand('mceEmotion', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/emotions.htm',\r
-                                       width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),\r
-                                       height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Emotions',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);\r
-})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/emotions.htm b/plugins/TinyMCE/js/plugins/emotions/emotions.htm
deleted file mode 100644 (file)
index 2c91002..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#emotions_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/emotions.js"></script>\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#emotions_dlg.title}</span>\r
-<div align="center">\r
-       <div class="title">{#emotions_dlg.title}:<br /><br /></div>\r
-\r
-       <table role="presentation" border="0" cellspacing="0" cellpadding="4">\r
-               <tr>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>\r
-               </tr>\r
-               <tr>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>\r
-               </tr>\r
-               <tr>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>\r
-               </tr>\r
-               <tr>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>\r
-                       <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>\r
-               </tr>\r
-       </table>\r
-</div>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif
deleted file mode 100644 (file)
index ba90cc3..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif
deleted file mode 100644 (file)
index 74d897a..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif
deleted file mode 100644 (file)
index 963a96b..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif
deleted file mode 100644 (file)
index c7cf101..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif
deleted file mode 100644 (file)
index 716f55e..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif
deleted file mode 100644 (file)
index 334d49e..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif
deleted file mode 100644 (file)
index 4efd549..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif
deleted file mode 100644 (file)
index 82c5b18..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif
deleted file mode 100644 (file)
index ca2451e..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif
deleted file mode 100644 (file)
index fe66220..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif
deleted file mode 100644 (file)
index fd27edf..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif
deleted file mode 100644 (file)
index 0cc9bb7..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif
deleted file mode 100644 (file)
index 2075dc1..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif
deleted file mode 100644 (file)
index bef7e25..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif
deleted file mode 100644 (file)
index 0631c76..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif
deleted file mode 100644 (file)
index 648e6e8..0000000
Binary files a/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/js/emotions.js b/plugins/TinyMCE/js/plugins/emotions/js/emotions.js
deleted file mode 100644 (file)
index c549367..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var EmotionsDialog = {\r
-       init : function(ed) {\r
-               tinyMCEPopup.resizeToInnerSize();\r
-       },\r
-\r
-       insert : function(file, title) {\r
-               var ed = tinyMCEPopup.editor, dom = ed.dom;\r
-\r
-               tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {\r
-                       src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,\r
-                       alt : ed.getLang(title),\r
-                       title : ed.getLang(title),\r
-                       border : 0\r
-               }));\r
-\r
-               tinyMCEPopup.close();\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js
deleted file mode 100644 (file)
index 3b57ad9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-tinyMCE.addI18n('en.emotions_dlg',{\r
-title:"Insert emotion",\r
-desc:"Emotions",\r
-cool:"Cool",\r
-cry:"Cry",\r
-embarassed:"Embarassed",\r
-foot_in_mouth:"Foot in mouth",\r
-frown:"Frown",\r
-innocent:"Innocent",\r
-kiss:"Kiss",\r
-laughing:"Laughing",\r
-money_mouth:"Money mouth",\r
-sealed:"Sealed",\r
-smile:"Smile",\r
-surprised:"Surprised",\r
-tongue_out:"Tongue out",\r
-undecided:"Undecided",\r
-wink:"Wink",\r
-yell:"Yell"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/dialog.htm b/plugins/TinyMCE/js/plugins/example/dialog.htm
deleted file mode 100644 (file)
index 50b2b34..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#example_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/dialog.js"></script>\r
-</head>\r
-<body>\r
-\r
-<form onsubmit="ExampleDialog.insert();return false;" action="#">\r
-       <p>Here is a example dialog.</p>\r
-       <p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>\r
-       <p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/example/editor_plugin.js b/plugins/TinyMCE/js/plugins/example/editor_plugin.js
deleted file mode 100644 (file)
index ec1f81e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/example/editor_plugin_src.js
deleted file mode 100644 (file)
index 9a0e7da..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       // Load plugin specific language pack\r
-       tinymce.PluginManager.requireLangPack('example');\r
-\r
-       tinymce.create('tinymce.plugins.ExamplePlugin', {\r
-               /**\r
-                * Initializes the plugin, this will be executed after the plugin has been created.\r
-                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
-                * of the editor instance to intercept that event.\r
-                *\r
-                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
-                * @param {string} url Absolute URL to where the plugin is located.\r
-                */\r
-               init : function(ed, url) {\r
-                       // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');\r
-                       ed.addCommand('mceExample', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/dialog.htm',\r
-                                       width : 320 + parseInt(ed.getLang('example.delta_width', 0)),\r
-                                       height : 120 + parseInt(ed.getLang('example.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url, // Plugin absolute URL\r
-                                       some_custom_arg : 'custom arg' // Custom argument\r
-                               });\r
-                       });\r
-\r
-                       // Register example button\r
-                       ed.addButton('example', {\r
-                               title : 'example.desc',\r
-                               cmd : 'mceExample',\r
-                               image : url + '/img/example.gif'\r
-                       });\r
-\r
-                       // Add a node change handler, selects the button in the UI when a image is selected\r
-                       ed.onNodeChange.add(function(ed, cm, n) {\r
-                               cm.setActive('example', n.nodeName == 'IMG');\r
-                       });\r
-               },\r
-\r
-               /**\r
-                * Creates control instances based in the incomming name. This method is normally not\r
-                * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons\r
-                * but you sometimes need to create more complex controls like listboxes, split buttons etc then this\r
-                * method can be used to create those.\r
-                *\r
-                * @param {String} n Name of the control to create.\r
-                * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.\r
-                * @return {tinymce.ui.Control} New control instance or null if no control was created.\r
-                */\r
-               createControl : function(n, cm) {\r
-                       return null;\r
-               },\r
-\r
-               /**\r
-                * Returns information about the plugin as a name/value array.\r
-                * The current keys are longname, author, authorurl, infourl and version.\r
-                *\r
-                * @return {Object} Name/value array containing information about the plugin.\r
-                */\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Example plugin',\r
-                               author : 'Some author',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',\r
-                               version : "1.0"\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/img/example.gif b/plugins/TinyMCE/js/plugins/example/img/example.gif
deleted file mode 100644 (file)
index 1ab5da4..0000000
Binary files a/plugins/TinyMCE/js/plugins/example/img/example.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/example/js/dialog.js b/plugins/TinyMCE/js/plugins/example/js/dialog.js
deleted file mode 100644 (file)
index fa83411..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var ExampleDialog = {\r
-       init : function() {\r
-               var f = document.forms[0];\r
-\r
-               // Get the selected contents as text and place it in the input\r
-               f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});\r
-               f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');\r
-       },\r
-\r
-       insert : function() {\r
-               // Insert the contents from the input into the document\r
-               tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);\r
-               tinyMCEPopup.close();\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/example/langs/en.js b/plugins/TinyMCE/js/plugins/example/langs/en.js
deleted file mode 100644 (file)
index e0784f8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-tinyMCE.addI18n('en.example',{\r
-       desc : 'This is just a template button'\r
-});\r
diff --git a/plugins/TinyMCE/js/plugins/example/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/example/langs/en_dlg.js
deleted file mode 100644 (file)
index ebcf948..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-tinyMCE.addI18n('en.example_dlg',{\r
-       title : 'This is just a example title'\r
-});\r
diff --git a/plugins/TinyMCE/js/plugins/example_dependency/editor_plugin.js b/plugins/TinyMCE/js/plugins/example_dependency/editor_plugin.js
deleted file mode 100644 (file)
index 0a4551d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example_dependency/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/example_dependency/editor_plugin_src.js
deleted file mode 100644 (file)
index e1c55e4..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
-
-       tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
-               /**
-                * Initializes the plugin, this will be executed after the plugin has been created.
-                * This call is done before the editor instance has finished it's initialization so use the onInit event
-                * of the editor instance to intercept that event.
-                *
-                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-                * @param {string} url Absolute URL to where the plugin is located.
-                */
-               init : function(ed, url) {
-               },
-
-
-               /**
-                * Returns information about the plugin as a name/value array.
-                * The current keys are longname, author, authorurl, infourl and version.
-                *
-                * @return {Object} Name/value array containing information about the plugin.
-                */
-               getInfo : function() {
-                       return {
-                               longname : 'Example Dependency plugin',
-                               author : 'Some author',
-                               authorurl : 'http://tinymce.moxiecode.com',
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
-                               version : "1.0"
-                       };
-               }
-       });
-
-       /**
-        * Register the plugin, specifying the list of the plugins that this plugin depends on.  They are specified in a list, with the list loaded in order.
-        * plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
-        * plugins in a depends list should typically be specified using the short name).  If neccesary this can be done
-        * with an object which has the url to the plugin and the shortname.
-        */
-       tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
-})();
diff --git a/plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css b/plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css
deleted file mode 100644 (file)
index 2675cec..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Hide the advanced tab */\r
-#advanced_tab {\r
-       display: none;\r
-}\r
-\r
-#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {\r
-       width: 280px;\r
-}\r
-\r
-#doctype, #docencoding {\r
-       width: 200px;\r
-}\r
-\r
-#langcode {\r
-       width: 30px;\r
-}\r
-\r
-#bgimage {\r
-       width: 220px;   \r
-}\r
-\r
-#fontface {\r
-       width: 240px;\r
-}\r
-\r
-#leftmargin, #rightmargin, #topmargin, #bottommargin {\r
-       width: 50px;\r
-}\r
-\r
-.panel_wrapper div.current {\r
-       height: 400px;\r
-}\r
-\r
-#stylesheet, #style {\r
-       width: 240px;\r
-}\r
-\r
-#doctypes {\r
-       width: 200px;\r
-}\r
-\r
-/* Head list classes */\r
-\r
-.headlistwrapper {\r
-       width: 100%;\r
-}\r
-\r
-.selected {\r
-       border: 1px solid #0A246A;\r
-       background-color: #B6BDD2;\r
-}\r
-\r
-.toolbar {\r
-       width: 100%;\r
-}\r
-\r
-#headlist {\r
-       width: 100%;\r
-       margin-top: 3px;\r
-       font-size: 11px;\r
-}\r
-\r
-#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {\r
-       display: none;\r
-}\r
-\r
-#addmenu {\r
-       position: absolute;\r
-       border: 1px solid gray;\r
-       display: none;\r
-       z-index: 100;\r
-       background-color: white;\r
-}\r
-\r
-#addmenu a {\r
-       display: block;\r
-       width: 100%;\r
-       line-height: 20px;\r
-       text-decoration: none;\r
-       background-color: white;\r
-}\r
-\r
-#addmenu a:hover {\r
-       background-color: #B6BDD2;\r
-       color: black;\r
-}\r
-\r
-#addmenu span {\r
-       padding-left: 10px;\r
-       padding-right: 10px;\r
-}\r
-\r
-#updateElementPanel {\r
-       display: none;\r
-}\r
-\r
-#script_element .panel_wrapper div.current {\r
-       height: 108px;\r
-}\r
-\r
-#style_element .panel_wrapper div.current {\r
-       height: 108px;\r
-}\r
-\r
-#link_element  .panel_wrapper div.current {\r
-       height: 140px;\r
-}\r
-\r
-#element_script_value {\r
-       width: 100%;\r
-       height: 100px;\r
-}\r
-\r
-#element_comment_value {\r
-       width: 100%;\r
-       height: 120px;\r
-}\r
-\r
-#element_style_value {\r
-       width: 100%;\r
-       height: 100px;\r
-}\r
-\r
-#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {\r
-       width: 250px;\r
-}\r
-\r
-.updateElementButton {\r
-       margin-top: 3px;\r
-}\r
-\r
-/* MSIE specific styles */\r
-\r
-* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {\r
-       width: 22px;\r
-       height: 22px;\r
-}\r
-\r
-textarea {\r
-       height: 55px;\r
-}\r
-\r
-.panel_wrapper div.current {height:420px;}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js b/plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js
deleted file mode 100644 (file)
index eb0ec33..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype="<!DOCTYPE"+i.value+">"}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n<l.length;n++){p=l[n];if(p.attr("name")==m){if(o){p.attr("content",o)}else{p.remove()}return}}if(o){j=new a("meta",1);j.attr("name",m);j.attr("content",o);j.shortEnded=true;i(j)}});j=f.getAll("link")[0];if(j&&j.attr("rel")=="stylesheet"){if(g.stylesheet){j.attr("href",g.stylesheet)}else{j.remove()}}else{if(g.stylesheet){j=new a("link",1);j.attr({rel:"stylesheet",text:"text/css",href:g.stylesheet});j.shortEnded=true;i(j)}}j=f.getAll("body")[0];if(j){c(j,"dir",g.langdir);c(j,"style",g.style);c(j,"vlink",g.visited_color);c(j,"link",g.link_color);c(j,"alink",g.active_color);e.setAttribs(this.editor.getBody(),{style:g.style,dir:g.dir,vLink:g.visited_color,link:g.link_color,aLink:g.active_color})}j=f.getAll("html")[0];if(j){c(j,"lang",g.langcode);c(j,"xml:lang",g.langcode)}h=new tinymce.html.Serializer({validate:false,indent:true,apply_source_formatting:true,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(f);this.head=h.substring(0,h.indexOf("</body>"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("<body");if(i!=-1){i=h.indexOf(">",i);m.head=k(h.substring(0,i+1));c=h.indexOf("</body",i);if(c==-1){c=h.length}d.content=h.substring(i+1,c);m.foot=k(h.substring(c))}else{m.head=this._getDefaultHeader();m.foot="\n</body>\n</html>"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l)}else{e.remove("fullpage_styles")}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='<?xml version="1.0" encoding="'+c.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}f+=c.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');f+="\n<html>\n<head>\n";if(e=c.getParam("fullpage_default_title")){f+="<title>"+e+"</title>\n"}if(e=c.getParam("fullpage_default_encoding")){f+='<meta http-equiv="Content-Type" content="text/html; charset='+e+'" />\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="</head>\n<body"+(d?' style="'+d+'"':"")+">\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js
deleted file mode 100644 (file)
index 5725b56..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var each = tinymce.each, Node = tinymce.html.Node;\r
-\r
-       tinymce.create('tinymce.plugins.FullPagePlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceFullPageProperties', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/fullpage.htm',\r
-                                       width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),\r
-                                       height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url,\r
-                                       data : t._htmlToData()\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});\r
-\r
-                       ed.onBeforeSetContent.add(t._setContent, t);\r
-                       ed.onGetContent.add(t._getContent, t);\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Fullpage',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private plugin internal methods\r
-\r
-               _htmlToData : function() {\r
-                       var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;\r
-\r
-                       function getAttr(elm, name) {\r
-                               var value = elm.attr(name);\r
-\r
-                               return value || '';\r
-                       };\r
-\r
-                       // Default some values\r
-                       data.fontface = editor.getParam("fullpage_default_fontface", "");\r
-                       data.fontsize = editor.getParam("fullpage_default_fontsize", "");\r
-\r
-                       // Parse XML PI\r
-                       elm = headerFragment.firstChild;\r
-                       if (elm.type == 7) {\r
-                               data.xml_pi = true;\r
-                               matches = /encoding="([^"]+)"/.exec(elm.value);\r
-                               if (matches)\r
-                                       data.docencoding = matches[1];\r
-                       }\r
-\r
-                       // Parse doctype\r
-                       elm = headerFragment.getAll('#doctype')[0];\r
-                       if (elm)\r
-                               data.doctype = '<!DOCTYPE' + elm.value + ">"; \r
-\r
-                       // Parse title element\r
-                       elm = headerFragment.getAll('title')[0];\r
-                       if (elm && elm.firstChild) {\r
-                               data.metatitle = elm.firstChild.value;\r
-                       }\r
-\r
-                       // Parse meta elements\r
-                       each(headerFragment.getAll('meta'), function(meta) {\r
-                               var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;\r
-\r
-                               if (name)\r
-                                       data['meta' + name.toLowerCase()] = meta.attr('content');\r
-                               else if (httpEquiv == "Content-Type") {\r
-                                       matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));\r
-\r
-                                       if (matches)\r
-                                               data.docencoding = matches[1];\r
-                               }\r
-                       });\r
-\r
-                       // Parse html attribs\r
-                       elm = headerFragment.getAll('html')[0];\r
-                       if (elm)\r
-                               data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');\r
-       \r
-                       // Parse stylesheet\r
-                       elm = headerFragment.getAll('link')[0];\r
-                       if (elm && elm.attr('rel') == 'stylesheet')\r
-                               data.stylesheet = elm.attr('href');\r
-\r
-                       // Parse body parts\r
-                       elm = headerFragment.getAll('body')[0];\r
-                       if (elm) {\r
-                               data.langdir = getAttr(elm, 'dir');\r
-                               data.style = getAttr(elm, 'style');\r
-                               data.visited_color = getAttr(elm, 'vlink');\r
-                               data.link_color = getAttr(elm, 'link');\r
-                               data.active_color = getAttr(elm, 'alink');\r
-                       }\r
-\r
-                       return data;\r
-               },\r
-\r
-               _dataToHtml : function(data) {\r
-                       var headerFragment, headElement, html, elm, value, dom = this.editor.dom;\r
-\r
-                       function setAttr(elm, name, value) {\r
-                               elm.attr(name, value ? value : undefined);\r
-                       };\r
-\r
-                       function addHeadNode(node) {\r
-                               if (headElement.firstChild)\r
-                                       headElement.insert(node, headElement.firstChild);\r
-                               else\r
-                                       headElement.append(node);\r
-                       };\r
-\r
-                       headerFragment = this._parseHeader();\r
-                       headElement = headerFragment.getAll('head')[0];\r
-                       if (!headElement) {\r
-                               elm = headerFragment.getAll('html')[0];\r
-                               headElement = new Node('head', 1);\r
-\r
-                               if (elm.firstChild)\r
-                                       elm.insert(headElement, elm.firstChild, true);\r
-                               else\r
-                                       elm.append(headElement);\r
-                       }\r
-\r
-                       // Add/update/remove XML-PI\r
-                       elm = headerFragment.firstChild;\r
-                       if (data.xml_pi) {\r
-                               value = 'version="1.0"';\r
-\r
-                               if (data.docencoding)\r
-                                       value += ' encoding="' + data.docencoding + '"';\r
-\r
-                               if (elm.type != 7) {\r
-                                       elm = new Node('xml', 7);\r
-                                       headerFragment.insert(elm, headerFragment.firstChild, true);\r
-                               }\r
-\r
-                               elm.value = value;\r
-                       } else if (elm && elm.type == 7)\r
-                               elm.remove();\r
-\r
-                       // Add/update/remove doctype\r
-                       elm = headerFragment.getAll('#doctype')[0];\r
-                       if (data.doctype) {\r
-                               if (!elm) {\r
-                                       elm = new Node('#doctype', 10);\r
-\r
-                                       if (data.xml_pi)\r
-                                               headerFragment.insert(elm, headerFragment.firstChild);\r
-                                       else\r
-                                               addHeadNode(elm);\r
-                               }\r
-\r
-                               elm.value = data.doctype.substring(9, data.doctype.length - 1);\r
-                       } else if (elm)\r
-                               elm.remove();\r
-\r
-                       // Add/update/remove title\r
-                       elm = headerFragment.getAll('title')[0];\r
-                       if (data.metatitle) {\r
-                               if (!elm) {\r
-                                       elm = new Node('title', 1);\r
-                                       elm.append(new Node('#text', 3)).value = data.metatitle;\r
-                                       addHeadNode(elm);\r
-                               }\r
-                       }\r
-\r
-                       // Add meta encoding\r
-                       if (data.docencoding) {\r
-                               elm = null;\r
-                               each(headerFragment.getAll('meta'), function(meta) {\r
-                                       if (meta.attr('http-equiv') == 'Content-Type')\r
-                                               elm = meta;\r
-                               });\r
-\r
-                               if (!elm) {\r
-                                       elm = new Node('meta', 1);\r
-                                       elm.attr('http-equiv', 'Content-Type');\r
-                                       elm.shortEnded = true;\r
-                                       addHeadNode(elm);\r
-                               }\r
-\r
-                               elm.attr('content', 'text/html; charset=' + data.docencoding);\r
-                       }\r
-\r
-                       // Add/update/remove meta\r
-                       each('keywords,description,author,copyright,robots'.split(','), function(name) {\r
-                               var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];\r
-\r
-                               for (i = 0; i < nodes.length; i++) {\r
-                                       meta = nodes[i];\r
-\r
-                                       if (meta.attr('name') == name) {\r
-                                               if (value)\r
-                                                       meta.attr('content', value);\r
-                                               else\r
-                                                       meta.remove();\r
-\r
-                                               return;\r
-                                       }\r
-                               }\r
-\r
-                               if (value) {\r
-                                       elm = new Node('meta', 1);\r
-                                       elm.attr('name', name);\r
-                                       elm.attr('content', value);\r
-                                       elm.shortEnded = true;\r
-\r
-                                       addHeadNode(elm);\r
-                               }\r
-                       });\r
-\r
-                       // Add/update/delete link\r
-                       elm = headerFragment.getAll('link')[0];\r
-                       if (elm && elm.attr('rel') == 'stylesheet') {\r
-                               if (data.stylesheet)\r
-                                       elm.attr('href', data.stylesheet);\r
-                               else\r
-                                       elm.remove();\r
-                       } else if (data.stylesheet) {\r
-                               elm = new Node('link', 1);\r
-                               elm.attr({\r
-                                       rel : 'stylesheet',\r
-                                       text : 'text/css',\r
-                                       href : data.stylesheet\r
-                               });\r
-                               elm.shortEnded = true;\r
-\r
-                               addHeadNode(elm);\r
-                       }\r
-\r
-                       // Update body attributes\r
-                       elm = headerFragment.getAll('body')[0];\r
-                       if (elm) {\r
-                               setAttr(elm, 'dir', data.langdir);\r
-                               setAttr(elm, 'style', data.style);\r
-                               setAttr(elm, 'vlink', data.visited_color);\r
-                               setAttr(elm, 'link', data.link_color);\r
-                               setAttr(elm, 'alink', data.active_color);\r
-\r
-                               // Update iframe body as well\r
-                               dom.setAttribs(this.editor.getBody(), {\r
-                                       style : data.style,\r
-                                       dir : data.dir,\r
-                                       vLink : data.visited_color,\r
-                                       link : data.link_color,\r
-                                       aLink : data.active_color\r
-                               });\r
-                       }\r
-\r
-                       // Set html attributes\r
-                       elm = headerFragment.getAll('html')[0];\r
-                       if (elm) {\r
-                               setAttr(elm, 'lang', data.langcode);\r
-                               setAttr(elm, 'xml:lang', data.langcode);\r
-                       }\r
-\r
-                       // Serialize header fragment and crop away body part\r
-                       html = new tinymce.html.Serializer({\r
-                               validate: false,\r
-                               indent: true,\r
-                               apply_source_formatting : true,\r
-                               indent_before: 'head,html,body,meta,title,script,link,style',\r
-                               indent_after: 'head,html,body,meta,title,script,link,style'\r
-                       }).serialize(headerFragment);\r
-\r
-                       this.head = html.substring(0, html.indexOf('</body>'));\r
-               },\r
-\r
-               _parseHeader : function() {\r
-                       // Parse the contents with a DOM parser\r
-                       return new tinymce.html.DomParser({\r
-                               validate: false,\r
-                               root_name: '#document'\r
-                       }).parse(this.head);\r
-               },\r
-\r
-               _setContent : function(ed, o) {\r
-                       var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;\r
-\r
-                       function low(s) {\r
-                               return s.replace(/<\/?[A-Z]+/g, function(a) {\r
-                                       return a.toLowerCase();\r
-                               })\r
-                       };\r
-\r
-                       // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate\r
-                       if (o.format == 'raw' && self.head)\r
-                               return;\r
-\r
-                       if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))\r
-                               return;\r
-\r
-                       // Parse out head, body and footer\r
-                       content = content.replace(/<(\/?)BODY/gi, '<$1body');\r
-                       startPos = content.indexOf('<body');\r
-\r
-                       if (startPos != -1) {\r
-                               startPos = content.indexOf('>', startPos);\r
-                               self.head = low(content.substring(0, startPos + 1));\r
-\r
-                               endPos = content.indexOf('</body', startPos);\r
-                               if (endPos == -1)\r
-                                       endPos = content.length;\r
-\r
-                               o.content = content.substring(startPos + 1, endPos);\r
-                               self.foot = low(content.substring(endPos));\r
-                       } else {\r
-                               self.head = this._getDefaultHeader();\r
-                               self.foot = '\n</body>\n</html>';\r
-                       }\r
-\r
-                       // Parse header and update iframe\r
-                       headerFragment = self._parseHeader();\r
-                       each(headerFragment.getAll('style'), function(node) {\r
-                               if (node.firstChild)\r
-                                       styles += node.firstChild.value;\r
-                       });\r
-\r
-                       elm = headerFragment.getAll('body')[0];\r
-                       if (elm) {\r
-                               dom.setAttribs(self.editor.getBody(), {\r
-                                       style : elm.attr('style') || '',\r
-                                       dir : elm.attr('dir') || '',\r
-                                       vLink : elm.attr('vlink') || '',\r
-                                       link : elm.attr('link') || '',\r
-                                       aLink : elm.attr('alink') || ''\r
-                               });\r
-                       }\r
-\r
-                       if (styles)\r
-                               dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);\r
-                       else\r
-                               dom.remove('fullpage_styles');\r
-               },\r
-\r
-               _getDefaultHeader : function() {\r
-                       var header = '', editor = this.editor, value, styles = '';\r
-\r
-                       if (editor.getParam('fullpage_default_xml_pi'))\r
-                               header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';\r
-\r
-                       header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');\r
-                       header += '\n<html>\n<head>\n';\r
-\r
-                       if (value = editor.getParam('fullpage_default_title'))\r
-                               header += '<title>' + value + '</title>\n';\r
-\r
-                       if (value = editor.getParam('fullpage_default_encoding'))\r
-                               header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';\r
-\r
-                       if (value = editor.getParam('fullpage_default_font_family'))\r
-                               styles += 'font-family: ' + value + ';';\r
-\r
-                       if (value = editor.getParam('fullpage_default_font_size'))\r
-                               styles += 'font-size: ' + value + ';';\r
-\r
-                       if (value = editor.getParam('fullpage_default_text_color'))\r
-                               styles += 'color: ' + value + ';';\r
-\r
-                       header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';\r
-\r
-                       return header;\r
-               },\r
-\r
-               _getContent : function(ed, o) {\r
-                       var self = this;\r
-\r
-                       if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))\r
-                               o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/fullpage.htm b/plugins/TinyMCE/js/plugins/fullpage/fullpage.htm
deleted file mode 100644 (file)
index 14ab865..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#fullpage_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="js/fullpage.js"></script>\r
-       <link href="css/fullpage.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="fullpage" style="display: none">\r
-<form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">\r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>\r
-                               <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="meta_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.meta_props}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>\r
-                                                       <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>\r
-                                                       <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>\r
-                                                       <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>\r
-                                                       <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>\r
-                                                       <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>\r
-                                                       <td>\r
-                                                               <select id="metarobots" name="metarobots">\r
-                                                                                       <option value="">{#not_set}</option> \r
-                                                                                       <option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>\r
-                                                                                       <option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>\r
-                                                                                       <option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>\r
-                                                                                       <option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.langprops}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td> \r
-                                                       <td>\r
-                                                               <select id="docencoding" name="docencoding"> \r
-                                                                               <option value="">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>\r
-                                                       <td>\r
-                                                               <select id="doctype" name="doctype">\r
-                                                                               <option value="">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>\r
-                                                       <td><input type="text" id="langcode" name="langcode" value="" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="langdir" name="langdir"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#fullpage_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#fullpage_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>\r
-                                                       <td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="appearance_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.appearance_textprops}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td> \r
-                                                       <td>\r
-                                                               <select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">\r
-                                                                               <option value="">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td> \r
-                                                       <td>\r
-                                                               <select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">\r
-                                                                               <option value="">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="textcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.appearance_bgprops}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="bgimage_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.appearance_marginprops}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td> \r
-                                                       <td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>\r
-                                                       <td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td> \r
-                                                       <td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td> \r
-                                                       <td><input id="topmargin" name="topmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>\r
-                                                       <td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td> \r
-                                                       <td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.appearance_linkprops}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="link_color_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="visited_color_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td> \r
-                                                       <td>\r
-                                                               <table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');FullPageDialog.changedStyleProp();" /></td>\r
-                                                                               <td id="active_color_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td>&nbsp;</td>\r
-                                                       <td>&nbsp;</td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#fullpage_dlg.appearance_style}</legend>\r
-\r
-                                       <table border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td> \r
-                                                       <td><table border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>\r
-                                                                               <td id="stylesheet_browsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="style">{#fullpage_dlg.style}</label></td> \r
-                                                       <td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="update" value="{#update}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js b/plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js
deleted file mode 100644 (file)
index 3f672ad..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/**\r
- * fullpage.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinyMCEPopup.requireLangPack();\r
-\r
-       var defaultDocTypes = \r
-               'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +\r
-               'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +\r
-               'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +\r
-               'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +\r
-               'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +\r
-               'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +\r
-               'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';\r
-\r
-       var defaultEncodings = \r
-               'Western european (iso-8859-1)=iso-8859-1,' +\r
-               'Central European (iso-8859-2)=iso-8859-2,' +\r
-               'Unicode (UTF-8)=utf-8,' +\r
-               'Chinese traditional (Big5)=big5,' +\r
-               'Cyrillic (iso-8859-5)=iso-8859-5,' +\r
-               'Japanese (iso-2022-jp)=iso-2022-jp,' +\r
-               'Greek (iso-8859-7)=iso-8859-7,' +\r
-               'Korean (iso-2022-kr)=iso-2022-kr,' +\r
-               'ASCII (us-ascii)=us-ascii';\r
-\r
-       var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';\r
-       var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';\r
-\r
-       function setVal(id, value) {\r
-               var elm = document.getElementById(id);\r
-\r
-               if (elm) {\r
-                       value = value || '';\r
-\r
-                       if (elm.nodeName == "SELECT")\r
-                               selectByValue(document.forms[0], id, value);\r
-                       else if (elm.type == "checkbox")\r
-                               elm.checked = !!value;\r
-                       else\r
-                               elm.value = value;\r
-               }\r
-       };\r
-\r
-       function getVal(id) {\r
-               var elm = document.getElementById(id);\r
-\r
-               if (elm.nodeName == "SELECT")\r
-                       return elm.options[elm.selectedIndex].value;\r
-\r
-               if (elm.type == "checkbox")\r
-                       return elm.checked;\r
-\r
-               return elm.value;\r
-       };\r
-\r
-       window.FullPageDialog = {\r
-               changedStyle : function() {\r
-                       var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));\r
-\r
-                       setVal('fontface', styles['font-face']);\r
-                       setVal('fontsize', styles['font-size']);\r
-                       setVal('textcolor', styles['color']);\r
-\r
-                       if (val = styles['background-image'])\r
-                               setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));\r
-                       else\r
-                               setVal('bgimage', '');\r
-\r
-                       setVal('bgcolor', styles['background-color']);\r
-\r
-                       // Reset margin form elements\r
-                       setVal('topmargin', '');\r
-                       setVal('rightmargin', '');\r
-                       setVal('bottommargin', '');\r
-                       setVal('leftmargin', '');\r
-\r
-                       // Expand margin\r
-                       if (val = styles['margin']) {\r
-                               val = val.split(' ');\r
-                               styles['margin-top'] = val[0] || '';\r
-                               styles['margin-right'] = val[1] || val[0] || '';\r
-                               styles['margin-bottom'] = val[2] || val[0] || '';\r
-                               styles['margin-left'] = val[3] || val[0] || '';\r
-                       }\r
-\r
-                       if (val = styles['margin-top'])\r
-                               setVal('topmargin', val.replace(/px/, ''));\r
-\r
-                       if (val = styles['margin-right'])\r
-                               setVal('rightmargin', val.replace(/px/, ''));\r
-\r
-                       if (val = styles['margin-bottom'])\r
-                               setVal('bottommargin', val.replace(/px/, ''));\r
-\r
-                       if (val = styles['margin-left'])\r
-                               setVal('leftmargin', val.replace(/px/, ''));\r
-\r
-                       updateColor('bgcolor_pick', 'bgcolor');\r
-                       updateColor('textcolor_pick', 'textcolor');\r
-               },\r
-\r
-               changedStyleProp : function() {\r
-                       var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style'));\r
-       \r
-                       styles['font-face'] = getVal('fontface');\r
-                       styles['font-size'] = getVal('fontsize');\r
-                       styles['color'] = getVal('textcolor');\r
-                       styles['background-color'] = getVal('bgcolor');\r
-\r
-                       if (val = getVal('bgimage'))\r
-                               styles['background-image'] = "url('" + val + "')";\r
-                       else\r
-                               styles['background-image'] = '';\r
-\r
-                       delete styles['margin'];\r
-\r
-                       if (val = getVal('topmargin'))\r
-                               styles['margin-top'] = val + "px";\r
-                       else\r
-                               styles['margin-top'] = '';\r
-\r
-                       if (val = getVal('rightmargin'))\r
-                               styles['margin-right'] = val + "px";\r
-                       else\r
-                               styles['margin-right'] = '';\r
-\r
-                       if (val = getVal('bottommargin'))\r
-                               styles['margin-bottom'] = val + "px";\r
-                       else\r
-                               styles['margin-bottom'] = '';\r
-\r
-                       if (val = getVal('leftmargin'))\r
-                               styles['margin-left'] = val + "px";\r
-                       else\r
-                               styles['margin-left'] = '';\r
-\r
-                       // Serialize, parse and reserialize this will compress redundant styles\r
-                       setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles))));\r
-                       this.changedStyle();\r
-               },\r
-               \r
-               update : function() {\r
-                       var data = {};\r
-\r
-                       tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) {\r
-                               data[node.id] = getVal(node.id);\r
-                       });\r
-\r
-                       tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data);\r
-                       tinyMCEPopup.close();\r
-               }\r
-       };\r
-       \r
-       function init() {\r
-               var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;\r
-\r
-               // Setup doctype select box\r
-               list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');\r
-               for (i = 0; i < list.length; i++) {\r
-                       item = list[i].split('=');\r
-\r
-                       if (item.length > 1)\r
-                               addSelectValue(form, 'doctype', item[0], item[1]);\r
-               }\r
-\r
-               // Setup fonts select box\r
-               list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');\r
-               for (i = 0; i < list.length; i++) {\r
-                       item = list[i].split('=');\r
-\r
-                       if (item.length > 1)\r
-                               addSelectValue(form, 'fontface', item[0], item[1]);\r
-               }\r
-\r
-               // Setup fontsize select box\r
-               list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(',');\r
-               for (i = 0; i < list.length; i++)\r
-                       addSelectValue(form, 'fontsize', list[i], list[i]);\r
-\r
-               // Setup encodings select box\r
-               list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');\r
-               for (i = 0; i < list.length; i++) {\r
-                       item = list[i].split('=');\r
-\r
-                       if (item.length > 1)\r
-                               addSelectValue(form, 'docencoding', item[0], item[1]);\r
-               }\r
-\r
-               // Setup color pickers\r
-               document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-               document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');\r
-               document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');\r
-               document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');\r
-               document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');\r
-               document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');\r
-               document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');\r
-\r
-               // Resize some elements\r
-               if (isVisible('stylesheetbrowser'))\r
-                       document.getElementById('stylesheet').style.width = '220px';\r
-\r
-               if (isVisible('link_href_browser'))\r
-                       document.getElementById('element_link_href').style.width = '230px';\r
-\r
-               if (isVisible('bgimage_browser'))\r
-                       document.getElementById('bgimage').style.width = '210px';\r
-\r
-               // Update form\r
-               tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {\r
-                       setVal(key, value);\r
-               });\r
-\r
-               FullPageDialog.changedStyle();\r
-\r
-               // Update colors\r
-               updateColor('textcolor_pick', 'textcolor');\r
-               updateColor('bgcolor_pick', 'bgcolor');\r
-               updateColor('visited_color_pick', 'visited_color');\r
-               updateColor('active_color_pick', 'active_color');\r
-               updateColor('link_color_pick', 'link_color');\r
-       };\r
-\r
-       tinyMCEPopup.onInit.add(init);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js
deleted file mode 100644 (file)
index f5801b8..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-tinyMCE.addI18n('en.fullpage_dlg',{\r
-title:"Document properties",\r
-meta_tab:"General",\r
-appearance_tab:"Appearance",\r
-advanced_tab:"Advanced",\r
-meta_props:"Meta information",\r
-langprops:"Language and encoding",\r
-meta_title:"Title",\r
-meta_keywords:"Keywords",\r
-meta_description:"Description",\r
-meta_robots:"Robots",\r
-doctypes:"Doctype",\r
-langcode:"Language code",\r
-langdir:"Language direction",\r
-ltr:"Left to right",\r
-rtl:"Right to left",\r
-xml_pi:"XML declaration",\r
-encoding:"Character encoding",\r
-appearance_bgprops:"Background properties",\r
-appearance_marginprops:"Body margins",\r
-appearance_linkprops:"Link colors",\r
-appearance_textprops:"Text properties",\r
-bgcolor:"Background color",\r
-bgimage:"Background image",\r
-left_margin:"Left margin",\r
-right_margin:"Right margin",\r
-top_margin:"Top margin",\r
-bottom_margin:"Bottom margin",\r
-text_color:"Text color",\r
-font_size:"Font size",\r
-font_face:"Font face",\r
-link_color:"Link color",\r
-hover_color:"Hover color",\r
-visited_color:"Visited color",\r
-active_color:"Active color",\r
-textcolor:"Color",\r
-fontsize:"Font size",\r
-fontface:"Font family",\r
-meta_index_follow:"Index and follow the links",\r
-meta_index_nofollow:"Index and don't follow the links",\r
-meta_noindex_follow:"Do not index but follow the links",\r
-meta_noindex_nofollow:"Do not index and don\'t follow the links",\r
-appearance_style:"Stylesheet and style properties",\r
-stylesheet:"Stylesheet",\r
-style:"Style",\r
-author:"Author",\r
-copyright:"Copyright",\r
-add:"Add new element",\r
-remove:"Remove selected element",\r
-moveup:"Move selected element up",\r
-movedown:"Move selected element down",\r
-head_elements:"Head elements",\r
-info:"Information",\r
-add_title:"Title element",\r
-add_meta:"Meta element",\r
-add_script:"Script element",\r
-add_style:"Style element",\r
-add_link:"Link element",\r
-add_base:"Base element",\r
-add_comment:"Comment node",\r
-title_element:"Title element",\r
-script_element:"Script element",\r
-style_element:"Style element",\r
-base_element:"Base element",\r
-link_element:"Link element",\r
-meta_element:"Meta element",\r
-comment_element:"Comment",\r
-src:"Src",\r
-language:"Language",\r
-href:"Href",\r
-target:"Target",\r
-type:"Type",\r
-charset:"Charset",\r
-defer:"Defer",\r
-media:"Media",\r
-properties:"Properties",\r
-name:"Name",\r
-value:"Value",\r
-content:"Content",\r
-rel:"Rel",\r
-rev:"Rev",\r
-hreflang:"Href lang",\r
-general_props:"General",\r
-advanced_props:"Advanced"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js b/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js
deleted file mode 100644 (file)
index 6eae3ec..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent({format:"raw"}),{format:"raw"});d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js
deleted file mode 100644 (file)
index 3477c86..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var DOM = tinymce.DOM;\r
-\r
-       tinymce.create('tinymce.plugins.FullScreenPlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this, s = {}, vp, posCss;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceFullScreen', function() {\r
-                               var win, de = DOM.doc.documentElement;\r
-\r
-                               if (ed.getParam('fullscreen_is_enabled')) {\r
-                                       if (ed.getParam('fullscreen_new_window'))\r
-                                               closeFullscreen(); // Call to close in new window\r
-                                       else {\r
-                                               DOM.win.setTimeout(function() {\r
-                                                       tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);\r
-                                                       tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format : 'raw'}), {format : 'raw'});\r
-                                                       tinyMCE.remove(ed);\r
-                                                       DOM.remove('mce_fullscreen_container');\r
-                                                       de.style.overflow = ed.getParam('fullscreen_html_overflow');\r
-                                                       DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));\r
-                                                       DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));\r
-                                                       tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings\r
-                                               }, 10);\r
-                                       }\r
-\r
-                                       return;\r
-                               }\r
-\r
-                               if (ed.getParam('fullscreen_new_window')) {\r
-                                       win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);\r
-                                       try {\r
-                                               win.resizeTo(screen.availWidth, screen.availHeight);\r
-                                       } catch (e) {\r
-                                               // Ignore\r
-                                       }\r
-                               } else {\r
-                                       tinyMCE.oldSettings = tinyMCE.settings; // Store old settings\r
-                                       s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';\r
-                                       s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);\r
-                                       vp = DOM.getViewPort();\r
-                                       s.fullscreen_scrollx = vp.x;\r
-                                       s.fullscreen_scrolly = vp.y;\r
-\r
-                                       // Fixes an Opera bug where the scrollbars doesn't reappear\r
-                                       if (tinymce.isOpera && s.fullscreen_overflow == 'visible')\r
-                                               s.fullscreen_overflow = 'auto';\r
-\r
-                                       // Fixes an IE bug where horizontal scrollbars would appear\r
-                                       if (tinymce.isIE && s.fullscreen_overflow == 'scroll')\r
-                                               s.fullscreen_overflow = 'auto';\r
-\r
-                                       // Fixes an IE bug where the scrollbars doesn't reappear\r
-                                       if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))\r
-                                               s.fullscreen_html_overflow = 'auto'; \r
-\r
-                                       if (s.fullscreen_overflow == '0px')\r
-                                               s.fullscreen_overflow = '';\r
-\r
-                                       DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');\r
-                                       de.style.overflow = 'hidden'; //Fix for IE6/7\r
-                                       vp = DOM.getViewPort();\r
-                                       DOM.win.scrollTo(0, 0);\r
-\r
-                                       if (tinymce.isIE)\r
-                                               vp.h -= 1;\r
-\r
-                                       // Use fixed position if it exists\r
-                                       if (tinymce.isIE6)\r
-                                               posCss = 'absolute;top:' + vp.y;\r
-                                       else\r
-                                               posCss = 'fixed;top:0';\r
-\r
-                                       n = DOM.add(DOM.doc.body, 'div', {\r
-                                               id : 'mce_fullscreen_container', \r
-                                               style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});\r
-                                       DOM.add(n, 'div', {id : 'mce_fullscreen'});\r
-\r
-                                       tinymce.each(ed.settings, function(v, n) {\r
-                                               s[n] = v;\r
-                                       });\r
-\r
-                                       s.id = 'mce_fullscreen';\r
-                                       s.width = n.clientWidth;\r
-                                       s.height = n.clientHeight - 15;\r
-                                       s.fullscreen_is_enabled = true;\r
-                                       s.fullscreen_editor_id = ed.id;\r
-                                       s.theme_advanced_resizing = false;\r
-                                       s.save_onsavecallback = function() {\r
-                                               ed.setContent(tinyMCE.get(s.id).getContent({format : 'raw'}), {format : 'raw'});\r
-                                               ed.execCommand('mceSave');\r
-                                       };\r
-\r
-                                       tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {\r
-                                               s[k] = v;\r
-                                       });\r
-\r
-                                       if (s.theme_advanced_toolbar_location === 'external')\r
-                                               s.theme_advanced_toolbar_location = 'top';\r
-\r
-                                       t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);\r
-                                       t.fullscreenEditor.onInit.add(function() {\r
-                                               t.fullscreenEditor.setContent(ed.getContent());\r
-                                               t.fullscreenEditor.focus();\r
-                                       });\r
-\r
-                                       t.fullscreenEditor.render();\r
-\r
-                                       t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');\r
-                                       t.fullscreenElement.update();\r
-                                       //document.body.overflow = 'hidden';\r
-\r
-                                       t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {\r
-                                               var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;\r
-\r
-                                               // Get outer/inner size to get a delta size that can be used to calc the new iframe size\r
-                                               outerSize = fed.dom.getSize(fed.getContainer().firstChild);\r
-                                               innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);\r
-\r
-                                               fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});\r
-\r
-                       ed.onNodeChange.add(function(ed, cm) {\r
-                               cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Fullscreen',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm b/plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm
deleted file mode 100644 (file)
index 4c4f27e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title></title>\r
-       <script type="text/javascript" src="../../tiny_mce.js"></script>\r
-       <script type="text/javascript">\r
-               function patchCallback(settings, key) {\r
-                       if (settings[key])\r
-                               settings[key] = "window.opener." + settings[key];\r
-               }\r
-\r
-               var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;\r
-\r
-               // Clone array\r
-               for (var n in paSe)\r
-                       settings[n] = paSe[n];\r
-\r
-               // Override options for fullscreen\r
-               for (var n in paSe.fullscreen_settings)\r
-                       settings[n] = paSe.fullscreen_settings[n];\r
-\r
-               // Patch callbacks, make them point to window.opener\r
-               patchCallback(settings, 'urlconverter_callback');\r
-               patchCallback(settings, 'insertlink_callback');\r
-               patchCallback(settings, 'insertimage_callback');\r
-               patchCallback(settings, 'setupcontent_callback');\r
-               patchCallback(settings, 'save_callback');\r
-               patchCallback(settings, 'onchange_callback');\r
-               patchCallback(settings, 'init_instance_callback');\r
-               patchCallback(settings, 'file_browser_callback');\r
-               patchCallback(settings, 'cleanup_callback');\r
-               patchCallback(settings, 'execcommand_callback');\r
-               patchCallback(settings, 'oninit');\r
-\r
-               // Set options\r
-               delete settings.id;\r
-               settings['mode'] = 'exact';\r
-               settings['elements'] = 'fullscreenarea';\r
-               settings['add_unload_trigger'] = false;\r
-               settings['ask'] = false;\r
-               settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();\r
-               settings['fullscreen_is_enabled'] = true;\r
-               settings['fullscreen_editor_id'] = oeID;\r
-               settings['theme_advanced_resizing'] = false;\r
-               settings['strict_loading_mode'] = true;\r
-\r
-               settings.save_onsavecallback = function() {\r
-                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});\r
-                       window.opener.tinyMCE.get(oeID).execCommand('mceSave');\r
-                       window.close();\r
-               };\r
-\r
-               function unloadHandler(e) {\r
-                       moveContent();\r
-               }\r
-\r
-               function moveContent() {\r
-                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());\r
-               }\r
-\r
-               function closeFullscreen() {\r
-                       moveContent();\r
-                       window.close();\r
-               }\r
-\r
-               function doParentSubmit() {\r
-                       moveContent();\r
-\r
-                       if (window.opener.tinyMCE.selectedInstance.formElement.form)\r
-                               window.opener.tinyMCE.selectedInstance.formElement.form.submit();\r
-\r
-                       window.close();\r
-\r
-                       return false;\r
-               }\r
-\r
-               function render() {\r
-                       var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;\r
-\r
-                       e.value = window.opener.tinyMCE.get(oeID).getContent();\r
-\r
-                       vp = dom.getViewPort();\r
-                       settings.width = vp.w;\r
-                       settings.height = vp.h - 15;\r
-\r
-                       tinymce.dom.Event.add(window, 'resize', function() {\r
-                               var vp = dom.getViewPort();\r
-\r
-                               tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);\r
-                       });\r
-\r
-                       tinyMCE.init(settings);\r
-               }\r
-\r
-               // Add onunload\r
-               tinymce.dom.Event.add(window, "beforeunload", unloadHandler);\r
-       </script>\r
-</head>\r
-<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">\r
-<form onsubmit="doParentSubmit();">\r
-<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>\r
-</form>\r
-\r
-<script type="text/javascript">\r
-       render();\r
-</script>\r
-\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/iespell/editor_plugin.js b/plugins/TinyMCE/js/plugins/iespell/editor_plugin.js
deleted file mode 100644 (file)
index e9cba10..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js
deleted file mode 100644 (file)
index 1b2bb98..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.IESpell', {\r
-               init : function(ed, url) {\r
-                       var t = this, sp;\r
-\r
-                       if (!tinymce.isIE)\r
-                               return;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceIESpell', function() {\r
-                               try {\r
-                                       sp = new ActiveXObject("ieSpell.ieSpellExtension");\r
-                                       sp.CheckDocumentNode(ed.getDoc().documentElement);\r
-                               } catch (e) {\r
-                                       if (e.number == -2146827859) {\r
-                                               ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {\r
-                                                       if (s)\r
-                                                               window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');\r
-                                               });\r
-                                       } else\r
-                                               ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);\r
-                               }\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'});\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'IESpell (IE Only)',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js b/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js
deleted file mode 100644 (file)
index ef64817..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","<br />"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(i,k){var g=this,f,j=d.doc,h,k;k=g._findId(k||i);if(!g.windows[k]){g.parent(i);return}g.count--;if(g.count==0){d.remove("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","false");g.editor.focus()}if(f=g.windows[k]){g.onClose.dispatch(g);a.remove(j,"mousedown",f.mousedownFunc);a.remove(j,"click",f.clickFunc);a.clear(k);a.clear(k+"_ifr");d.setAttrib(k+"_ifr","src",'javascript:""');f.element.remove();delete g.windows[k];h=g._frontWindow();if(h){g.focus(h.id)}}},_frontWindow:function(){var g,f=0;e(this.windows,function(h){if(h.zIndex>f){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js
deleted file mode 100644 (file)
index ac6fb1c..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;\r
-\r
-       tinymce.create('tinymce.plugins.InlinePopups', {\r
-               init : function(ed, url) {\r
-                       // Replace window manager\r
-                       ed.onBeforeRenderUI.add(function() {\r
-                               ed.windowManager = new tinymce.InlineWindowManager(ed);\r
-                               DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'InlinePopups',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {\r
-               InlineWindowManager : function(ed) {\r
-                       var t = this;\r
-\r
-                       t.parent(ed);\r
-                       t.zIndex = 300000;\r
-                       t.count = 0;\r
-                       t.windows = {};\r
-               },\r
-\r
-               open : function(f, p) {\r
-                       var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;\r
-\r
-                       f = f || {};\r
-                       p = p || {};\r
-\r
-                       // Run native windows\r
-                       if (!f.inline)\r
-                               return t.parent(f, p);\r
-\r
-                       parentWindow = t._frontWindow();\r
-                       if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {\r
-                               parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;\r
-                       }\r
-                       \r
-                       // Only store selection if the type is a normal window\r
-                       if (!f.type)\r
-                               t.bookmark = ed.selection.getBookmark(1);\r
-\r
-                       id = DOM.uniqueId();\r
-                       vp = DOM.getViewPort();\r
-                       f.width = parseInt(f.width || 320);\r
-                       f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);\r
-                       f.min_width = parseInt(f.min_width || 150);\r
-                       f.min_height = parseInt(f.min_height || 100);\r
-                       f.max_width = parseInt(f.max_width || 2000);\r
-                       f.max_height = parseInt(f.max_height || 2000);\r
-                       f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));\r
-                       f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));\r
-                       f.movable = f.resizable = true;\r
-                       p.mce_width = f.width;\r
-                       p.mce_height = f.height;\r
-                       p.mce_inline = true;\r
-                       p.mce_window_id = id;\r
-                       p.mce_auto_focus = f.auto_focus;\r
-\r
-                       // Transpose\r
-//                     po = DOM.getPos(ed.getContainer());\r
-//                     f.left -= po.x;\r
-//                     f.top -= po.y;\r
-\r
-                       t.features = f;\r
-                       t.params = p;\r
-                       t.onOpen.dispatch(t, f, p);\r
-\r
-                       if (f.type) {\r
-                               opt += ' mceModal';\r
-\r
-                               if (f.type)\r
-                                       opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);\r
-\r
-                               f.resizable = false;\r
-                       }\r
-\r
-                       if (f.statusbar)\r
-                               opt += ' mceStatusbar';\r
-\r
-                       if (f.resizable)\r
-                               opt += ' mceResizable';\r
-\r
-                       if (f.minimizable)\r
-                               opt += ' mceMinimizable';\r
-\r
-                       if (f.maximizable)\r
-                               opt += ' mceMaximizable';\r
-\r
-                       if (f.movable)\r
-                               opt += ' mceMovable';\r
-\r
-                       // Create DOM objects\r
-                       t._addAll(DOM.doc.body, \r
-                               ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, \r
-                                       ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},\r
-                                               ['div', {id : id + '_top', 'class' : 'mceTop'}, \r
-                                                       ['div', {'class' : 'mceLeft'}],\r
-                                                       ['div', {'class' : 'mceCenter'}],\r
-                                                       ['div', {'class' : 'mceRight'}],\r
-                                                       ['span', {id : id + '_title'}, f.title || '']\r
-                                               ],\r
-\r
-                                               ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, \r
-                                                       ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],\r
-                                                       ['span', {id : id + '_content'}],\r
-                                                       ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]\r
-                                               ],\r
-\r
-                                               ['div', {id : id + '_bottom', 'class' : 'mceBottom'},\r
-                                                       ['div', {'class' : 'mceLeft'}],\r
-                                                       ['div', {'class' : 'mceCenter'}],\r
-                                                       ['div', {'class' : 'mceRight'}],\r
-                                                       ['span', {id : id + '_status'}, 'Content']\r
-                                               ],\r
-\r
-                                               ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
-                                               ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
-                                               ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
-                                               ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
-                                               ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],\r
-                                               ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]\r
-                                       ]\r
-                               ]\r
-                       );\r
-\r
-                       DOM.setStyles(id, {top : -10000, left : -10000});\r
-\r
-                       // Fix gecko rendering bug, where the editors iframe messed with window contents\r
-                       if (tinymce.isGecko)\r
-                               DOM.setStyle(id, 'overflow', 'auto');\r
-\r
-                       // Measure borders\r
-                       if (!f.type) {\r
-                               dw += DOM.get(id + '_left').clientWidth;\r
-                               dw += DOM.get(id + '_right').clientWidth;\r
-                               dh += DOM.get(id + '_top').clientHeight;\r
-                               dh += DOM.get(id + '_bottom').clientHeight;\r
-                       }\r
-\r
-                       // Resize window\r
-                       DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});\r
-\r
-                       u = f.url || f.file;\r
-                       if (u) {\r
-                               if (tinymce.relaxedDomain)\r
-                                       u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;\r
-\r
-                               u = tinymce._addVer(u);\r
-                       }\r
-\r
-                       if (!f.type) {\r
-                               DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});\r
-                               DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});\r
-                               DOM.setAttrib(id + '_ifr', 'src', u);\r
-                       } else {\r
-                               DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');\r
-\r
-                               if (f.type == 'confirm')\r
-                                       DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');\r
-\r
-                               DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});\r
-                               DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));\r
-                               \r
-                               Event.add(id, 'keyup', function(evt) {\r
-                                       var VK_ESCAPE = 27;\r
-                                       if (evt.keyCode === VK_ESCAPE) {\r
-                                               f.button_func(false);\r
-                                               return Event.cancel(evt);\r
-                                       }\r
-                               });\r
-\r
-                               Event.add(id, 'keydown', function(evt) {\r
-                                       var cancelButton, VK_TAB = 9;\r
-                                       if (evt.keyCode === VK_TAB) {\r
-                                               cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0];\r
-                                               if (cancelButton && cancelButton !== evt.target) {\r
-                                                       cancelButton.focus();\r
-                                               } else {\r
-                                                       DOM.get(id + '_ok').focus();\r
-                                               }\r
-                                               return Event.cancel(evt);\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       // Register events\r
-                       mdf = Event.add(id, 'mousedown', function(e) {\r
-                               var n = e.target, w, vp;\r
-\r
-                               w = t.windows[id];\r
-                               t.focus(id);\r
-\r
-                               if (n.nodeName == 'A' || n.nodeName == 'a') {\r
-                                       if (n.className == 'mceMax') {\r
-                                               w.oldPos = w.element.getXY();\r
-                                               w.oldSize = w.element.getSize();\r
-\r
-                                               vp = DOM.getViewPort();\r
-\r
-                                               // Reduce viewport size to avoid scrollbars\r
-                                               vp.w -= 2;\r
-                                               vp.h -= 2;\r
-\r
-                                               w.element.moveTo(vp.x, vp.y);\r
-                                               w.element.resizeTo(vp.w, vp.h);\r
-                                               DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});\r
-                                               DOM.addClass(id + '_wrapper', 'mceMaximized');\r
-                                       } else if (n.className == 'mceMed') {\r
-                                               // Reset to old size\r
-                                               w.element.moveTo(w.oldPos.x, w.oldPos.y);\r
-                                               w.element.resizeTo(w.oldSize.w, w.oldSize.h);\r
-                                               w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);\r
-\r
-                                               DOM.removeClass(id + '_wrapper', 'mceMaximized');\r
-                                       } else if (n.className == 'mceMove')\r
-                                               return t._startDrag(id, e, n.className);\r
-                                       else if (DOM.hasClass(n, 'mceResize'))\r
-                                               return t._startDrag(id, e, n.className.substring(13));\r
-                               }\r
-                       });\r
-\r
-                       clf = Event.add(id, 'click', function(e) {\r
-                               var n = e.target;\r
-\r
-                               t.focus(id);\r
-\r
-                               if (n.nodeName == 'A' || n.nodeName == 'a') {\r
-                                       switch (n.className) {\r
-                                               case 'mceClose':\r
-                                                       t.close(null, id);\r
-                                                       return Event.cancel(e);\r
-\r
-                                               case 'mceButton mceOk':\r
-                                               case 'mceButton mceCancel':\r
-                                                       f.button_func(n.className == 'mceButton mceOk');\r
-                                                       return Event.cancel(e);\r
-                                       }\r
-                               }\r
-                       });\r
-                       \r
-                       // Make sure the tab order loops within the dialog.\r
-                       Event.add([id + '_left', id + '_right'], 'focus', function(evt) {\r
-                               var iframe = DOM.get(id + '_ifr');\r
-                               if (iframe) {\r
-                                       var body = iframe.contentWindow.document.body;\r
-                                       var focusable = DOM.select(':input:enabled,*[tabindex=0]', body);\r
-                                       if (evt.target.id === (id + '_left')) {\r
-                                               focusable[focusable.length - 1].focus();\r
-                                       } else {\r
-                                               focusable[0].focus();\r
-                                       }\r
-                               } else {\r
-                                       DOM.get(id + '_ok').focus();\r
-                               }\r
-                       });\r
-                       \r
-                       // Add window\r
-                       w = t.windows[id] = {\r
-                               id : id,\r
-                               mousedown_func : mdf,\r
-                               click_func : clf,\r
-                               element : new Element(id, {blocker : 1, container : ed.getContainer()}),\r
-                               iframeElement : new Element(id + '_ifr'),\r
-                               features : f,\r
-                               deltaWidth : dw,\r
-                               deltaHeight : dh\r
-                       };\r
-\r
-                       w.iframeElement.on('focus', function() {\r
-                               t.focus(id);\r
-                       });\r
-\r
-                       // Setup blocker\r
-                       if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {\r
-                               DOM.add(DOM.doc.body, 'div', {\r
-                                       id : 'mceModalBlocker',\r
-                                       'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',\r
-                                       style : {zIndex : t.zIndex - 1}\r
-                               });\r
-\r
-                               DOM.show('mceModalBlocker'); // Reduces flicker in IE\r
-                               DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true');\r
-                       } else\r
-                               DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);\r
-\r
-                       if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))\r
-                               DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
-\r
-                       DOM.setAttrib(id, 'aria-hidden', 'false');\r
-                       t.focus(id);\r
-                       t._fixIELayout(id, 1);\r
-\r
-                       // Focus ok button\r
-                       if (DOM.get(id + '_ok'))\r
-                               DOM.get(id + '_ok').focus();\r
-                       t.count++;\r
-\r
-                       return w;\r
-               },\r
-\r
-               focus : function(id) {\r
-                       var t = this, w;\r
-\r
-                       if (w = t.windows[id]) {\r
-                               w.zIndex = this.zIndex++;\r
-                               w.element.setStyle('zIndex', w.zIndex);\r
-                               w.element.update();\r
-\r
-                               id = id + '_wrapper';\r
-                               DOM.removeClass(t.lastId, 'mceFocus');\r
-                               DOM.addClass(id, 'mceFocus');\r
-                               t.lastId = id;\r
-                               \r
-                               if (w.focussedElement) {\r
-                                       w.focussedElement.focus();\r
-                               } else if (DOM.get(id + '_ok')) {\r
-                                       DOM.get(w.id + '_ok').focus();\r
-                               } else if (DOM.get(w.id + '_ifr')) {\r
-                                       DOM.get(w.id + '_ifr').focus();\r
-                               }\r
-                       }\r
-               },\r
-\r
-               _addAll : function(te, ne) {\r
-                       var i, n, t = this, dom = tinymce.DOM;\r
-\r
-                       if (is(ne, 'string'))\r
-                               te.appendChild(dom.doc.createTextNode(ne));\r
-                       else if (ne.length) {\r
-                               te = te.appendChild(dom.create(ne[0], ne[1]));\r
-\r
-                               for (i=2; i<ne.length; i++)\r
-                                       t._addAll(te, ne[i]);\r
-                       }\r
-               },\r
-\r
-               _startDrag : function(id, se, ac) {\r
-                       var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;\r
-\r
-                       // Get positons and sizes\r
-//                     cp = DOM.getPos(t.editor.getContainer());\r
-                       cp = {x : 0, y : 0};\r
-                       vp = DOM.getViewPort();\r
-\r
-                       // Reduce viewport size to avoid scrollbars while dragging\r
-                       vp.w -= 2;\r
-                       vp.h -= 2;\r
-\r
-                       sex = se.screenX;\r
-                       sey = se.screenY;\r
-                       dx = dy = dw = dh = 0;\r
-\r
-                       // Handle mouse up\r
-                       mu = Event.add(d, 'mouseup', function(e) {\r
-                               Event.remove(d, 'mouseup', mu);\r
-                               Event.remove(d, 'mousemove', mm);\r
-\r
-                               if (eb)\r
-                                       eb.remove();\r
-\r
-                               we.moveBy(dx, dy);\r
-                               we.resizeBy(dw, dh);\r
-                               sz = we.getSize();\r
-                               DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});\r
-                               t._fixIELayout(id, 1);\r
-\r
-                               return Event.cancel(e);\r
-                       });\r
-\r
-                       if (ac != 'Move')\r
-                               startMove();\r
-\r
-                       function startMove() {\r
-                               if (eb)\r
-                                       return;\r
-\r
-                               t._fixIELayout(id, 0);\r
-\r
-                               // Setup event blocker\r
-                               DOM.add(d.body, 'div', {\r
-                                       id : 'mceEventBlocker',\r
-                                       'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),\r
-                                       style : {zIndex : t.zIndex + 1}\r
-                               });\r
-\r
-                               if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))\r
-                                       DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
-\r
-                               eb = new Element('mceEventBlocker');\r
-                               eb.update();\r
-\r
-                               // Setup placeholder\r
-                               p = we.getXY();\r
-                               sz = we.getSize();\r
-                               sx = cp.x + p.x - vp.x;\r
-                               sy = cp.y + p.y - vp.y;\r
-                               DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});\r
-                               ph = new Element('mcePlaceHolder');\r
-                       };\r
-\r
-                       // Handle mouse move/drag\r
-                       mm = Event.add(d, 'mousemove', function(e) {\r
-                               var x, y, v;\r
-\r
-                               startMove();\r
-\r
-                               x = e.screenX - sex;\r
-                               y = e.screenY - sey;\r
-\r
-                               switch (ac) {\r
-                                       case 'ResizeW':\r
-                                               dx = x;\r
-                                               dw = 0 - x;\r
-                                               break;\r
-\r
-                                       case 'ResizeE':\r
-                                               dw = x;\r
-                                               break;\r
-\r
-                                       case 'ResizeN':\r
-                                       case 'ResizeNW':\r
-                                       case 'ResizeNE':\r
-                                               if (ac == "ResizeNW") {\r
-                                                       dx = x;\r
-                                                       dw = 0 - x;\r
-                                               } else if (ac == "ResizeNE")\r
-                                                       dw = x;\r
-\r
-                                               dy = y;\r
-                                               dh = 0 - y;\r
-                                               break;\r
-\r
-                                       case 'ResizeS':\r
-                                       case 'ResizeSW':\r
-                                       case 'ResizeSE':\r
-                                               if (ac == "ResizeSW") {\r
-                                                       dx = x;\r
-                                                       dw = 0 - x;\r
-                                               } else if (ac == "ResizeSE")\r
-                                                       dw = x;\r
-\r
-                                               dh = y;\r
-                                               break;\r
-\r
-                                       case 'mceMove':\r
-                                               dx = x;\r
-                                               dy = y;\r
-                                               break;\r
-                               }\r
-\r
-                               // Boundary check\r
-                               if (dw < (v = w.features.min_width - sz.w)) {\r
-                                       if (dx !== 0)\r
-                                               dx += dw - v;\r
-\r
-                                       dw = v;\r
-                               }\r
-       \r
-                               if (dh < (v = w.features.min_height - sz.h)) {\r
-                                       if (dy !== 0)\r
-                                               dy += dh - v;\r
-\r
-                                       dh = v;\r
-                               }\r
-\r
-                               dw = Math.min(dw, w.features.max_width - sz.w);\r
-                               dh = Math.min(dh, w.features.max_height - sz.h);\r
-                               dx = Math.max(dx, vp.x - (sx + vp.x));\r
-                               dy = Math.max(dy, vp.y - (sy + vp.y));\r
-                               dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));\r
-                               dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));\r
-\r
-                               // Move if needed\r
-                               if (dx + dy !== 0) {\r
-                                       if (sx + dx < 0)\r
-                                               dx = 0;\r
-       \r
-                                       if (sy + dy < 0)\r
-                                               dy = 0;\r
-\r
-                                       ph.moveTo(sx + dx, sy + dy);\r
-                               }\r
-\r
-                               // Resize if needed\r
-                               if (dw + dh !== 0)\r
-                                       ph.resizeTo(sz.w + dw, sz.h + dh);\r
-\r
-                               return Event.cancel(e);\r
-                       });\r
-\r
-                       return Event.cancel(se);\r
-               },\r
-\r
-               resizeBy : function(dw, dh, id) {\r
-                       var w = this.windows[id];\r
-\r
-                       if (w) {\r
-                               w.element.resizeBy(dw, dh);\r
-                               w.iframeElement.resizeBy(dw, dh);\r
-                       }\r
-               },\r
-\r
-               close : function(win, id) {\r
-                       var t = this, w, d = DOM.doc, fw, id;\r
-\r
-                       id = t._findId(id || win);\r
-\r
-                       // Probably not inline\r
-                       if (!t.windows[id]) {\r
-                               t.parent(win);\r
-                               return;\r
-                       }\r
-\r
-                       t.count--;\r
-\r
-                       if (t.count == 0) {\r
-                               DOM.remove('mceModalBlocker');\r
-                               DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false');\r
-                               t.editor.focus();\r
-                       }\r
-\r
-                       if (w = t.windows[id]) {\r
-                               t.onClose.dispatch(t);\r
-                               Event.remove(d, 'mousedown', w.mousedownFunc);\r
-                               Event.remove(d, 'click', w.clickFunc);\r
-                               Event.clear(id);\r
-                               Event.clear(id + '_ifr');\r
-\r
-                               DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak\r
-                               w.element.remove();\r
-                               delete t.windows[id];\r
-\r
-                               fw = t._frontWindow();\r
-\r
-                               if (fw)\r
-                                       t.focus(fw.id);\r
-                       }\r
-               },\r
-               \r
-               // Find front most window\r
-               _frontWindow : function() {\r
-                       var fw, ix = 0;\r
-                       // Find front most window and focus that\r
-                       each (this.windows, function(w) {\r
-                               if (w.zIndex > ix) {\r
-                                       fw = w;\r
-                                       ix = w.zIndex;\r
-                               }\r
-                       });\r
-                       return fw;\r
-               },\r
-\r
-               setTitle : function(w, ti) {\r
-                       var e;\r
-\r
-                       w = this._findId(w);\r
-\r
-                       if (e = DOM.get(w + '_title'))\r
-                               e.innerHTML = DOM.encode(ti);\r
-               },\r
-\r
-               alert : function(txt, cb, s) {\r
-                       var t = this, w;\r
-\r
-                       w = t.open({\r
-                               title : t,\r
-                               type : 'alert',\r
-                               button_func : function(s) {\r
-                                       if (cb)\r
-                                               cb.call(s || t, s);\r
-\r
-                                       t.close(null, w.id);\r
-                               },\r
-                               content : DOM.encode(t.editor.getLang(txt, txt)),\r
-                               inline : 1,\r
-                               width : 400,\r
-                               height : 130\r
-                       });\r
-               },\r
-\r
-               confirm : function(txt, cb, s) {\r
-                       var t = this, w;\r
-\r
-                       w = t.open({\r
-                               title : t,\r
-                               type : 'confirm',\r
-                               button_func : function(s) {\r
-                                       if (cb)\r
-                                               cb.call(s || t, s);\r
-\r
-                                       t.close(null, w.id);\r
-                               },\r
-                               content : DOM.encode(t.editor.getLang(txt, txt)),\r
-                               inline : 1,\r
-                               width : 400,\r
-                               height : 130\r
-                       });\r
-               },\r
-\r
-               // Internal functions\r
-\r
-               _findId : function(w) {\r
-                       var t = this;\r
-\r
-                       if (typeof(w) == 'string')\r
-                               return w;\r
-\r
-                       each(t.windows, function(wo) {\r
-                               var ifr = DOM.get(wo.id + '_ifr');\r
-\r
-                               if (ifr && w == ifr.contentWindow) {\r
-                                       w = wo.id;\r
-                                       return false;\r
-                               }\r
-                       });\r
-\r
-                       return w;\r
-               },\r
-\r
-               _fixIELayout : function(id, s) {\r
-                       var w, img;\r
-\r
-                       if (!tinymce.isIE6)\r
-                               return;\r
-\r
-                       // Fixes the bug where hover flickers and does odd things in IE6\r
-                       each(['n','s','w','e','nw','ne','sw','se'], function(v) {\r
-                               var e = DOM.get(id + '_resize_' + v);\r
-\r
-                               DOM.setStyles(e, {\r
-                                       width : s ? e.clientWidth : '',\r
-                                       height : s ? e.clientHeight : '',\r
-                                       cursor : DOM.getStyle(e, 'cursor', 1)\r
-                               });\r
-\r
-                               DOM.setStyle(id + "_bottom", 'bottom', '-1px');\r
-\r
-                               e = 0;\r
-                       });\r
-\r
-                       // Fixes graphics glitch\r
-                       if (w = this.windows[id]) {\r
-                               // Fixes rendering bug after resize\r
-                               w.element.hide();\r
-                               w.element.show();\r
-\r
-                               // Forced a repaint of the window\r
-                               //DOM.get(id).style.filter = '';\r
-\r
-                               // IE has a bug where images used in CSS won't get loaded\r
-                               // sometimes when the cache in the browser is disabled\r
-                               // This fix tries to solve it by loading the images using the image object\r
-                               each(DOM.select('div,a', id), function(e, i) {\r
-                                       if (e.currentStyle.backgroundImage != 'none') {\r
-                                               img = new Image();\r
-                                               img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');\r
-                                       }\r
-                               });\r
-\r
-                               DOM.get(id).style.filter = '';\r
-                       }\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);\r
-})();\r
-\r
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
deleted file mode 100644 (file)
index 2191398..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif
deleted file mode 100644 (file)
index f957e49..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
deleted file mode 100644 (file)
index 6baf64a..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
deleted file mode 100644 (file)
index 20acbbf..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
deleted file mode 100644 (file)
index d5de1cc..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
deleted file mode 100644 (file)
index c2a2ad4..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
deleted file mode 100644 (file)
index 0b4cc36..0000000
Binary files a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css
deleted file mode 100644 (file)
index a50d4fc..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Clearlooks 2 */
-
-/* Reset */
-.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block}
-
-/* General */
-.clearlooks2 {position:absolute; direction:ltr}
-.clearlooks2 .mceWrapper {position:static}
-.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%}
-.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)}
-.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none}
-
-/* Top */
-.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px}
-.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)}
-.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)}
-.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0}
-.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold}
-.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0}
-.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px}
-.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0}
-.clearlooks2 .mceFocus .mceTop span {color:#FFF}
-
-/* Middle */
-.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0}
-.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)}
-.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0}
-.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF}
-.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)}
-
-/* Bottom */
-.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px}
-.clearlooks2 .mceBottom {left:0; bottom:0; width:100%}
-.clearlooks2 .mceBottom div {top:0}
-.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px}
-.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px}
-.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0}
-.clearlooks2 .mceBottom span {display:none}
-.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px}
-.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0}
-.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px}
-.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0}
-.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px}
-
-/* Actions */
-.clearlooks2 a {width:29px; height:16px; top:3px;}
-.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0}
-.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0}
-.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0}
-.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0}
-.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px}
-.clearlooks2 .mceMovable .mceMove {display:block}
-.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px}
-.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px}
-.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px}
-.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px}
-.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
-.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
-.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px}
-.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px}
-.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px}
-
-/* Resize */
-.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px}
-.clearlooks2 .mceResizable .mceResize {display:block}
-.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none}
-.clearlooks2 .mceMinimizable .mceMin {display:block}
-.clearlooks2 .mceMaximizable .mceMax {display:block}
-.clearlooks2 .mceMaximized .mceMed {display:block}
-.clearlooks2 .mceMaximized .mceMax {display:none}
-.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize}
-.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize}
-.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize}
-.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;}
-.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize}
-.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize}
-.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize}
-.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize}
-
-/* Alert/Confirm */
-.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0}
-.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px}
-.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal}
-.clearlooks2 a:hover {font-weight:bold;}
-.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5}
-.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px}
-.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
-.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
-.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
-.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/template.htm b/plugins/TinyMCE/js/plugins/inlinepopups/template.htm
deleted file mode 100644 (file)
index f9ec642..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<title>Template for dialogs</title>\r
-<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="mceEditor">\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:10px;">\r
-               <div class="mceWrapper">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Blured</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:420px;">\r
-               <div class="mceWrapper mceMovable mceFocus">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Focused</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceStatusbar">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar, Resizable</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Resizable, Maximizable</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">\r
-               <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Blurred, Maximizable, Statusbar, Resizable</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Maximized, Maximizable, Minimizable</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">\r
-               <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Blured</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>Content</span>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Statusbar text.</span>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceMin" href="#"></a>\r
-                       <a class="mceMax" href="#"></a>\r
-                       <a class="mceMed" href="#"></a>\r
-                       <a class="mceClose" href="#"></a>\r
-                       <a class="mceResize mceResizeN" href="#"></a>\r
-                       <a class="mceResize mceResizeS" href="#"></a>\r
-                       <a class="mceResize mceResizeW" href="#"></a>\r
-                       <a class="mceResize mceResizeE" href="#"></a>\r
-                       <a class="mceResize mceResizeNW" href="#"></a>\r
-                       <a class="mceResize mceResizeNE" href="#"></a>\r
-                       <a class="mceResize mceResizeSW" href="#"></a>\r
-                       <a class="mceResize mceResizeSE" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceModal mceAlert">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Alert</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                               </span>\r
-                               <div class="mceRight"></div>\r
-                               <div class="mceIcon"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceButton mceOk" href="#">Ok</a>\r
-                       <a class="mceClose" href="#"></a>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">\r
-               <div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">\r
-                       <div class="mceTop">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                               <span>Confirm</span>\r
-                       </div>\r
-\r
-                       <div class="mceMiddle">\r
-                               <div class="mceLeft"></div>\r
-                               <span>\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       This is a very long error message. This is a very long error message.\r
-                                       </span>\r
-                               <div class="mceRight"></div>\r
-                               <div class="mceIcon"></div>\r
-                       </div>\r
-\r
-                       <div class="mceBottom">\r
-                               <div class="mceLeft"></div>\r
-                               <div class="mceCenter"></div>\r
-                               <div class="mceRight"></div>\r
-                       </div>\r
-\r
-                       <a class="mceMove" href="#"></a>\r
-                       <a class="mceButton mceOk" href="#">Ok</a>\r
-                       <a class="mceButton mceCancel" href="#">Cancel</a>\r
-                       <a class="mceClose" href="#"></a>\r
-               </div>\r
-       </div>\r
-</div>\r
-\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js b/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js
deleted file mode 100644 (file)
index 938ce6b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js
deleted file mode 100644 (file)
index 181c791..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.InsertDateTime', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       ed.addCommand('mceInsertDate', function() {\r
-                               var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));\r
-\r
-                               ed.execCommand('mceInsertContent', false, str);\r
-                       });\r
-\r
-                       ed.addCommand('mceInsertTime', function() {\r
-                               var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));\r
-\r
-                               ed.execCommand('mceInsertContent', false, str);\r
-                       });\r
-\r
-                       ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});\r
-                       ed.addButton('inserttime', {title : 'insertdatetime.inserttime_desc', cmd : 'mceInsertTime'});\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Insert date/time',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _getDateTime : function(d, fmt) {\r
-                       var ed = this.editor;\r
-\r
-                       function addZeros(value, len) {\r
-                               value = "" + value;\r
-\r
-                               if (value.length < len) {\r
-                                       for (var i=0; i<(len-value.length); i++)\r
-                                               value = "0" + value;\r
-                               }\r
-\r
-                               return value;\r
-                       };\r
-\r
-                       fmt = fmt.replace("%D", "%m/%d/%y");\r
-                       fmt = fmt.replace("%r", "%I:%M:%S %p");\r
-                       fmt = fmt.replace("%Y", "" + d.getFullYear());\r
-                       fmt = fmt.replace("%y", "" + d.getYear());\r
-                       fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
-                       fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
-                       fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
-                       fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
-                       fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
-                       fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
-                       fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
-                       fmt = fmt.replace("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);\r
-                       fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);\r
-                       fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);\r
-                       fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);\r
-                       fmt = fmt.replace("%%", "%");\r
-\r
-                       return fmt;\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/layer/editor_plugin.js b/plugins/TinyMCE/js/plugins/layer/editor_plugin.js
deleted file mode 100644 (file)
index d610f7e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f<a.length;f++){g[f]=a[f].style.zIndex?parseInt(a[f].style.zIndex):0;if(c<0&&a[f]==e){c=f}}if(h<0){for(f=0;f<g.length;f++){if(g[f]<g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;f<g.length;f++){if(g[f]>g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.dom.setAttrib(b,"data-mce-style","");a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js
deleted file mode 100644 (file)
index a8ac5a7..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.Layer', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceInsertLayer', t._insertLayer, t);\r
-\r
-                       ed.addCommand('mceMoveForward', function() {\r
-                               t._move(1);\r
-                       });\r
-\r
-                       ed.addCommand('mceMoveBackward', function() {\r
-                               t._move(-1);\r
-                       });\r
-\r
-                       ed.addCommand('mceMakeAbsolute', function() {\r
-                               t._toggleAbsolute();\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});\r
-                       ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});\r
-                       ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});\r
-                       ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});\r
-\r
-                       ed.onInit.add(function() {\r
-                               if (tinymce.isIE)\r
-                                       ed.getDoc().execCommand('2D-Position', false, true);\r
-                       });\r
-\r
-                       ed.onNodeChange.add(t._nodeChange, t);\r
-                       ed.onVisualAid.add(t._visualAid, t);\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Layer',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _nodeChange : function(ed, cm, n) {\r
-                       var le, p;\r
-\r
-                       le = this._getParentLayer(n);\r
-                       p = ed.dom.getParent(n, 'DIV,P,IMG');\r
-\r
-                       if (!p) {\r
-                               cm.setDisabled('absolute', 1);\r
-                               cm.setDisabled('moveforward', 1);\r
-                               cm.setDisabled('movebackward', 1);\r
-                       } else {\r
-                               cm.setDisabled('absolute', 0);\r
-                               cm.setDisabled('moveforward', !le);\r
-                               cm.setDisabled('movebackward', !le);\r
-                               cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");\r
-                       }\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _visualAid : function(ed, e, s) {\r
-                       var dom = ed.dom;\r
-\r
-                       tinymce.each(dom.select('div,p', e), function(e) {\r
-                               if (/^(absolute|relative|static)$/i.test(e.style.position)) {\r
-                                       if (s)\r
-                                               dom.addClass(e, 'mceItemVisualAid');\r
-                                       else\r
-                                               dom.removeClass(e, 'mceItemVisualAid'); \r
-                               }\r
-                       });\r
-               },\r
-\r
-               _move : function(d) {\r
-                       var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;\r
-\r
-                       nl = [];\r
-                       tinymce.walk(ed.getBody(), function(n) {\r
-                               if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))\r
-                                       nl.push(n); \r
-                       }, 'childNodes');\r
-\r
-                       // Find z-indexes\r
-                       for (i=0; i<nl.length; i++) {\r
-                               z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;\r
-\r
-                               if (ci < 0 && nl[i] == le)\r
-                                       ci = i;\r
-                       }\r
-\r
-                       if (d < 0) {\r
-                               // Move back\r
-\r
-                               // Try find a lower one\r
-                               for (i=0; i<z.length; i++) {\r
-                                       if (z[i] < z[ci]) {\r
-                                               fi = i;\r
-                                               break;\r
-                                       }\r
-                               }\r
-\r
-                               if (fi > -1) {\r
-                                       nl[ci].style.zIndex = z[fi];\r
-                                       nl[fi].style.zIndex = z[ci];\r
-                               } else {\r
-                                       if (z[ci] > 0)\r
-                                               nl[ci].style.zIndex = z[ci] - 1;\r
-                               }\r
-                       } else {\r
-                               // Move forward\r
-\r
-                               // Try find a higher one\r
-                               for (i=0; i<z.length; i++) {\r
-                                       if (z[i] > z[ci]) {\r
-                                               fi = i;\r
-                                               break;\r
-                                       }\r
-                               }\r
-\r
-                               if (fi > -1) {\r
-                                       nl[ci].style.zIndex = z[fi];\r
-                                       nl[fi].style.zIndex = z[ci];\r
-                               } else\r
-                                       nl[ci].style.zIndex = z[ci] + 1;\r
-                       }\r
-\r
-                       ed.execCommand('mceRepaint');\r
-               },\r
-\r
-               _getParentLayer : function(n) {\r
-                       return this.editor.dom.getParent(n, function(n) {\r
-                               return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);\r
-                       });\r
-               },\r
-\r
-               _insertLayer : function() {\r
-                       var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*'));\r
-\r
-                       ed.dom.add(ed.getBody(), 'div', {\r
-                               style : {\r
-                                       position : 'absolute',\r
-                                       left : p.x,\r
-                                       top : (p.y > 20 ? p.y : 20),\r
-                                       width : 100,\r
-                                       height : 100\r
-                               },\r
-                               'class' : 'mceItemVisualAid'\r
-                       }, ed.selection.getContent() || ed.getLang('layer.content'));\r
-               },\r
-\r
-               _toggleAbsolute : function() {\r
-                       var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());\r
-\r
-                       if (!le)\r
-                               le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');\r
-\r
-                       if (le) {\r
-                               if (le.style.position.toLowerCase() == "absolute") {\r
-                                       ed.dom.setStyles(le, {\r
-                                               position : '',\r
-                                               left : '',\r
-                                               top : '',\r
-                                               width : '',\r
-                                               height : ''\r
-                                       });\r
-\r
-                                       ed.dom.removeClass(le, 'mceItemVisualAid');\r
-                               } else {\r
-                                       if (le.style.left == "")\r
-                                               le.style.left = 20 + 'px';\r
-\r
-                                       if (le.style.top == "")\r
-                                               le.style.top = 20 + 'px';\r
-\r
-                                       if (le.style.width == "")\r
-                                               le.style.width = le.width ? (le.width + 'px') : '100px';\r
-\r
-                                       if (le.style.height == "")\r
-                                               le.style.height = le.height ? (le.height + 'px') : '100px';\r
-\r
-                                       le.style.position = "absolute";\r
-\r
-                                       ed.dom.setAttrib(le, 'data-mce-style', '');\r
-                                       ed.addVisual(ed.getBody());\r
-                               }\r
-\r
-                               ed.execCommand('mceRepaint');\r
-                               ed.nodeChanged();\r
-                       }\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('layer', tinymce.plugins.Layer);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js b/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js
deleted file mode 100644 (file)
index b3a4ce3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js
deleted file mode 100644 (file)
index e627ec7..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- *\r
- * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align\r
- * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash\r
- *\r
- * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are\r
- * not apart of the newer specifications for HTML and XHTML.\r
- */\r
-\r
-(function(tinymce) {\r
-       // Override inline_styles setting to force TinyMCE to produce deprecated contents\r
-       tinymce.onAddEditor.addToTop(function(tinymce, editor) {\r
-               editor.settings.inline_styles = false;\r
-       });\r
-\r
-       // Create the legacy ouput plugin\r
-       tinymce.create('tinymce.plugins.LegacyOutput', {\r
-               init : function(editor) {\r
-                       editor.onInit.add(function() {\r
-                               var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',\r
-                                       fontSizes = tinymce.explode(editor.settings.font_size_style_values),\r
-                                       schema = editor.schema;\r
-\r
-                               // Override some internal formats to produce legacy elements and attributes\r
-                               editor.formatter.register({\r
-                                       // Change alignment formats to use the deprecated align attribute\r
-                                       alignleft : {selector : alignElements, attributes : {align : 'left'}},\r
-                                       aligncenter : {selector : alignElements, attributes : {align : 'center'}},\r
-                                       alignright : {selector : alignElements, attributes : {align : 'right'}},\r
-                                       alignfull : {selector : alignElements, attributes : {align : 'justify'}},\r
-\r
-                                       // Change the basic formatting elements to use deprecated element types
-                                       bold : [\r
-                                               {inline : 'b', remove : 'all'},\r
-                                               {inline : 'strong', remove : 'all'},\r
-                                               {inline : 'span', styles : {fontWeight : 'bold'}}\r
-                                       ],\r
-                                       italic : [\r
-                                               {inline : 'i', remove : 'all'},\r
-                                               {inline : 'em', remove : 'all'},\r
-                                               {inline : 'span', styles : {fontStyle : 'italic'}}\r
-                                       ],\r
-                                       underline : [\r
-                                               {inline : 'u', remove : 'all'},\r
-                                               {inline : 'span', styles : {textDecoration : 'underline'}, exact : true}\r
-                                       ],\r
-                                       strikethrough : [\r
-                                               {inline : 'strike', remove : 'all'},\r
-                                               {inline : 'span', styles : {textDecoration: 'line-through'}, exact : true}\r
-                                       ],
-\r
-                                       // Change font size and font family to use the deprecated font element\r
-                                       fontname : {inline : 'font', attributes : {face : '%value'}},\r
-                                       fontsize : {\r
-                                               inline : 'font',\r
-                                               attributes : {\r
-                                                       size : function(vars) {\r
-                                                               return tinymce.inArray(fontSizes, vars.value) + 1;\r
-                                                       }\r
-                                               }\r
-                                       },\r
-\r
-                                       // Setup font elements for colors as well\r
-                                       forecolor : {inline : 'font', styles : {color : '%value'}},\r
-                                       hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}\r
-                               });\r
-\r
-                               // Check that deprecated elements are allowed if not add them\r
-                               tinymce.each('b,i,u,strike'.split(','), function(name) {\r
-                                       schema.addValidElements(name + '[*]');\r
-                               });\r
-\r
-                               // Add font element if it's missing\r
-                               if (!schema.getElementRule("font"))\r
-                                       schema.addValidElements("font[face|size|color|style]");\r
-\r
-                               // Add the missing and depreacted align attribute for the serialization engine\r
-                               tinymce.each(alignElements.split(','), function(name) {\r
-                                       var rule = schema.getElementRule(name), found;\r
-\r
-                                       if (rule) {\r
-                                               if (!rule.attributes.align) {\r
-                                                       rule.attributes.align = {};\r
-                                                       rule.attributesOrder.push('align');\r
-                                               }\r
-                                       }\r
-                               });\r
-\r
-                               // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes\r
-                               editor.onNodeChange.add(function(editor, control_manager) {\r
-                                       var control, fontElm, fontName, fontSize;\r
-\r
-                                       // Find font element get it's name and size\r
-                                       fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\r
-                                       if (fontElm) {\r
-                                               fontName = fontElm.face;\r
-                                               fontSize = fontElm.size;\r
-                                       }\r
-\r
-                                       // Select/unselect the font name in droplist\r
-                                       if (control = control_manager.get('fontselect')) {\r
-                                               control.select(function(value) {\r
-                                                       return value == fontName;\r
-                                               });\r
-                                       }\r
-\r
-                                       // Select/unselect the font size in droplist\r
-                                       if (control = control_manager.get('fontsizeselect')) {\r
-                                               control.select(function(value) {\r
-                                                       var index = tinymce.inArray(fontSizes, value.fontSize);\r
-\r
-                                                       return index + 1 == fontSize;\r
-                                               });\r
-                                       }\r
-                               });\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'LegacyOutput',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);\r
-})(tinymce);\r
diff --git a/plugins/TinyMCE/js/plugins/lists/editor_plugin.js b/plugins/TinyMCE/js/plugins/lists/editor_plugin.js
deleted file mode 100644 (file)
index 0fb8263..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{if(v&&u.tagName==="P"&&t.tagName==="P"){return true}else{return false}}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(u,v){var s=false;function y(z){return z.keyCode===9&&(u.queryCommandState("InsertUnorderedList")||u.queryCommandState("InsertOrderedList"))}function w(z,B){var A=z.selection,C;if(B.keyCode===13){C=A.getStart();if(C.tagName=="BR"&&C.parentNode.tagName=="LI"){C=C.parentNode}s=A.isCollapsed()&&C&&C.tagName==="LI"&&(C.childNodes.length===0||(C.firstChild.nodeName=="BR"&&C.childNodes.length===1));return s}}function t(z,A){if(y(A)||w(z,A)){return r.cancel(A)}}function x(C,E){if(!tinymce.isGecko){return}var A=C.selection.getStart();if(E.keyCode!=8||A.tagName!=="IMG"){return}function B(K){var L=K.firstChild;var J=null;do{if(!L){break}if(L.tagName==="LI"){J=L}}while(L=L.nextSibling);return J}function I(K,J){while(K.childNodes.length>0){J.appendChild(K.childNodes[0])}}var F;if(A.parentNode.previousSibling.tagName==="UL"||A.parentNode.previousSibling.tagName==="OL"){F=A.parentNode.previousSibling}else{if(A.parentNode.previousSibling.previousSibling.tagName==="UL"||A.parentNode.previousSibling.previousSibling.tagName==="OL"){F=A.parentNode.previousSibling.previousSibling}else{return}}var H=B(F);var z=C.dom.createRng();z.setStart(H,1);z.setEnd(H,1);C.selection.setRng(z);C.selection.collapse(true);var D=C.selection.getBookmark();var G=A.parentNode.cloneNode(true);if(G.tagName==="P"||G.tagName==="DIV"){I(G,H)}else{H.appendChild(G)}A.parentNode.parentNode.removeChild(A.parentNode);C.selection.moveToBookmark(D)}this.ed=u;u.addCommand("Indent",this.indent,this);u.addCommand("Outdent",this.outdent,this);u.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);u.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);u.onInit.add(function(){u.editorCommands.addCommands({outdent:function(){var A=u.selection,B=u.dom;function z(C){C=B.getParent(C,B.isBlock);return C&&(parseInt(u.dom.getStyle(C,"margin-left")||0,10)+parseInt(u.dom.getStyle(C,"padding-left")||0,10))>0}return z(A.getStart())||z(A.getEnd())||u.queryCommandState("InsertOrderedList")||u.queryCommandState("InsertUnorderedList")}},"state")});u.onKeyUp.add(function(A,B){var C,z;if(y(B)){A.execCommand(B.shiftKey?"Outdent":"Indent",true,null);return r.cancel(B)}else{if(s&&w(A,B)){if(A.queryCommandState("InsertOrderedList")){A.execCommand("InsertOrderedList")}else{A.execCommand("InsertUnorderedList")}C=A.selection.getStart();if(C&&C.tagName==="LI"){C=A.dom.getParent(C,"ol,ul").nextSibling;if(C&&C.tagName==="P"){if(!C.firstChild){C.appendChild(A.getDoc().createTextNode(""))}z=A.dom.createRng();z.setStart(C.firstChild,1);z.setEnd(C.firstChild,1);A.selection.setRng(z)}}return r.cancel(B)}}});u.onKeyPress.add(t);u.onKeyDown.add(t);u.onKeyDown.add(x)},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O,Q){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(M.tagName==="P"||G.length>1){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true);return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(Q,L,O){var t,P=Q,N,M;while(!I.isBlock(Q.parentNode)&&Q.parentNode!==I.getRoot()){Q=I.split(Q.parentNode,Q.previousSibling);Q=Q.nextSibling;P=Q}if(O){t=O.cloneNode(true);Q.parentNode.insertBefore(t,Q);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");Q.parentNode.insertBefore(t,Q)}while(P&&P!=L){N=P.nextSibling;t.appendChild(P);P=N}if(t.childNodes.length===0){t.innerHTML='<br _mce_bogus="1" />'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(V){var U;if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(P(N,V)){I.addClass(V,"_mce_tagged_br");N=S(V)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D}}else{B={defaultAction:x}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true)})},outdent:function(){var v=this,u=v.ed,w=u.dom,s=[];function x(t){var z,y,A;if(!d(u,t,s)){if(w.getStyle(t,"margin-left")!==""||w.getStyle(t,"padding-left")!==""){return v.adjustPaddingFunction(false)(t)}A=w.getStyle(t,"text-align",true);if(A==="center"||A==="right"){w.setStyle(t,"text-align","left");return}t=c(t,w);z=t.parentNode;y=t.parentNode.parentNode;if(y.tagName==="P"){w.split(y,t.parentNode)}else{w.split(z,t);if(y.tagName==="LI"){w.split(y,t)}else{if(!w.is(y,"ol,ul")){w.rename(t,"p")}}}s.push(t)}}this.process({LI:x,defaultAction:this.adjustPaddingFunction(false)});e(s,m)},process:function(x){var B=this,v=B.ed.selection,y=B.ed.dom,A,s;function w(t){y.removeClass(t,"_mce_act_on");if(!t||t.nodeType!==1){return}t=k(t,y);var C=x[t.tagName];if(!C){C=x.defaultAction}C(t)}function u(t){B.splitSafeEach(t.childNodes,w)}function z(t,C){return C>=0&&t.hasChildNodes()&&C<t.childNodes.length&&t.childNodes[C].tagName==="BR"}A=v.getSelectedBlocks();if(A.length===0){A=[y.getRoot()]}s=v.getRng(true);if(!s.collapsed){if(z(s.endContainer,s.endOffset-1)){s.setEnd(s.endContainer,s.endOffset-1);v.setRng(s)}if(z(s.startContainer,s.startOffset)){s.setStart(s.startContainer,s.startOffset+1);v.setRng(s)}}g=v.getBookmark();x.OL=x.UL=u;B.splitSafeEach(A,w);v.moveToBookmark(g);g=null;B.ed.execCommand("mceRepaint")},splitSafeEach:function(t,s){if(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent))){this.classBasedEach(t,s)}else{e(t,s)}},classBasedEach:function(v,u){var w=this.ed.dom,s,t;e(v,function(x){w.addClass(x,"_mce_act_on")});s=w.select("._mce_act_on");while(s.length>0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/lists/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/lists/editor_plugin_src.js
deleted file mode 100644 (file)
index 3952cff..0000000
+++ /dev/null
@@ -1,688 +0,0 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
-       var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
-
-       // Skips text nodes that only contain whitespace since they aren't semantically important.
-       function skipWhitespaceNodes(e, next) {
-               while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
-                       e = next(e);
-               }
-               return e;
-       }
-       
-       function skipWhitespaceNodesBackwards(e) {
-               return skipWhitespaceNodes(e, function(e) { return e.previousSibling; });
-       }
-       
-       function skipWhitespaceNodesForwards(e) {
-               return skipWhitespaceNodes(e, function(e) { return e.nextSibling; });
-       }
-       
-       function hasParentInList(ed, e, list) {
-               return ed.dom.getParent(e, function(p) {
-                       return tinymce.inArray(list, p) !== -1;
-               });
-       }
-       
-       function isList(e) {
-               return e && (e.tagName === 'OL' || e.tagName === 'UL');
-       }
-       
-       function splitNestedLists(element, dom) {
-               var tmp, nested, wrapItem;
-               tmp = skipWhitespaceNodesBackwards(element.lastChild);
-               while (isList(tmp)) {
-                       nested = tmp;
-                       tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
-               }
-               if (nested) {
-                       wrapItem = dom.create('li', { style: 'list-style-type: none;'});
-                       dom.split(element, nested);
-                       dom.insertAfter(wrapItem, nested);
-                       wrapItem.appendChild(nested);
-                       wrapItem.appendChild(nested);
-                       element = wrapItem.previousSibling;
-               }
-               return element;
-       }
-       
-       function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
-               e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
-               return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
-       }
-       
-       function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
-               var prev = skipWhitespaceNodesBackwards(e.previousSibling);
-               if (prev) {
-                       return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
-               } else {
-                       return e;
-               }
-       }
-       
-       function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
-               var next = skipWhitespaceNodesForwards(e.nextSibling);
-               if (next) {
-                       return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
-               } else {
-                       return e;
-               }
-       }
-       
-       function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
-               if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
-                       return merge(e1, e2, differentStylesMasterElement);
-               } else if (e1 && e1.tagName === 'LI' && isList(e2)) {
-                       // Fix invalidly nested lists.
-                       e1.appendChild(e2);
-               }
-               return e2;
-       }
-       
-       function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
-               if (!e1 || !e2) {
-                       return false;
-               } else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
-                       return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
-               } else if (isList(e1)) {
-                       return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
-               } else if (mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P') {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-       
-       function isListForIndent(e) {
-               var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
-               return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none'  || containsOnlyAList(firstLI));
-       }
-       
-       function containsOnlyAList(e) {
-               var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
-               return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
-       }
-       
-       function merge(e1, e2, masterElement) {
-               var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
-               if (e1.tagName === 'P') {
-                       e1.appendChild(e1.ownerDocument.createElement('br'));
-               }
-               while (e2.firstChild) {
-                       e1.appendChild(e2.firstChild);
-               }
-               if (masterElement) {
-                       e1.style.listStyleType = masterElement.style.listStyleType;
-               }
-               e2.parentNode.removeChild(e2);
-               attemptMerge(lastOriginal, firstNew, false);
-               return e1;
-       }
-       
-       function findItemToOperateOn(e, dom) {
-               var item;
-               if (!dom.is(e, 'li,ol,ul')) {
-                       item = dom.getParent(e, 'li');
-                       if (item) {
-                               e = item;
-                       }
-               }
-               return e;
-       }
-       
-       tinymce.create('tinymce.plugins.Lists', {
-               init: function(ed, url) {
-                       var enterDownInEmptyList = false;
-
-                       function isTriggerKey(e) {
-                               return e.keyCode === 9 && (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
-                       };
-
-                       function isEnterInEmptyListItem(ed, e) {
-                               var sel = ed.selection, n;
-                               if (e.keyCode === 13) {
-                                       n = sel.getStart();
-
-                                       // Get start will return BR if the LI only contains a BR
-                                       if (n.tagName == 'BR' && n.parentNode.tagName == 'LI')
-                                               n = n.parentNode;
-
-                                       // Check for empty LI or a LI with just one BR since Gecko and WebKit uses BR elements to place the caret
-                                       enterDownInEmptyList = sel.isCollapsed() && n && n.tagName === 'LI' && (n.childNodes.length === 0 || (n.firstChild.nodeName == 'BR' && n.childNodes.length === 1));
-                                       return enterDownInEmptyList;
-                               }
-                       };
-
-                       function cancelKeys(ed, e) {
-                               if (isTriggerKey(e) || isEnterInEmptyListItem(ed, e)) {
-                                       return Event.cancel(e);
-                               }
-                       };
-
-                       function imageJoiningListItem(ed, e) {
-                               if (!tinymce.isGecko)
-                                       return;
-
-                               var n = ed.selection.getStart();
-                               if (e.keyCode != 8 || n.tagName !== 'IMG') 
-                                       return;
-
-                               function lastLI(node) {
-                                       var child = node.firstChild;
-                                       var li = null;
-                                       do {
-                                               if (!child)
-                                                       break;
-
-                                               if (child.tagName === 'LI')
-                                                       li = child;
-                                       } while (child = child.nextSibling);
-
-                                       return li;
-                               }
-
-                               function addChildren(parentNode, destination) {
-                                       while (parentNode.childNodes.length > 0)
-                                               destination.appendChild(parentNode.childNodes[0]);
-                               }
-
-                               var ul;
-                               if (n.parentNode.previousSibling.tagName === 'UL' || n.parentNode.previousSibling.tagName === 'OL')
-                                       ul = n.parentNode.previousSibling;
-                               else if (n.parentNode.previousSibling.previousSibling.tagName === 'UL' || n.parentNode.previousSibling.previousSibling.tagName === 'OL')
-                                       ul = n.parentNode.previousSibling.previousSibling;
-                               else
-                                       return;
-
-                               var li = lastLI(ul);
-
-                               // move the caret to the end of the list item
-                               var rng = ed.dom.createRng();
-                               rng.setStart(li, 1);
-                               rng.setEnd(li, 1);
-                               ed.selection.setRng(rng);
-                               ed.selection.collapse(true);
-
-                               // save a bookmark at the end of the list item
-                               var bookmark = ed.selection.getBookmark();
-
-                               // copy the image an its text to the list item
-                               var clone = n.parentNode.cloneNode(true);
-                               if (clone.tagName === 'P' || clone.tagName === 'DIV')
-                                       addChildren(clone, li);
-                               else
-                                       li.appendChild(clone);
-                                       
-                               // remove the old copy of the image
-                               n.parentNode.parentNode.removeChild(n.parentNode);
-
-                               // move the caret where we saved the bookmark
-                               ed.selection.moveToBookmark(bookmark);
-                       }
-
-                       this.ed = ed;
-                       ed.addCommand('Indent', this.indent, this);
-                       ed.addCommand('Outdent', this.outdent, this);
-                       ed.addCommand('InsertUnorderedList', function() {
-                               this.applyList('UL', 'OL');
-                       }, this);
-                       ed.addCommand('InsertOrderedList', function() {
-                               this.applyList('OL', 'UL');
-                       }, this);
-                       
-                       ed.onInit.add(function() {
-                               ed.editorCommands.addCommands({
-                                       'outdent': function() {
-                                               var sel = ed.selection, dom = ed.dom;
-                                               function hasStyleIndent(n) {
-                                                       n = dom.getParent(n, dom.isBlock);
-                                                       return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
-                                               }
-                                               return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
-                                       }
-                               }, 'state');
-                       });
-                       
-                       ed.onKeyUp.add(function(ed, e) {
-                               var n, rng;
-                               if (isTriggerKey(e)) {
-                                       ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
-                                       return Event.cancel(e);
-                               } else if (enterDownInEmptyList && isEnterInEmptyListItem(ed, e)) {
-                                       if (ed.queryCommandState('InsertOrderedList')) {
-                                               ed.execCommand('InsertOrderedList');
-                                       } else {
-                                               ed.execCommand('InsertUnorderedList');
-                                       }
-                                       n = ed.selection.getStart();
-                                       if (n && n.tagName === 'LI') {
-                                               // Fix the caret position on IE since it jumps back up to the previous list item.
-                                               n = ed.dom.getParent(n, 'ol,ul').nextSibling;
-                                               if (n && n.tagName === 'P') {
-                                                       if (!n.firstChild) {
-                                                               n.appendChild(ed.getDoc().createTextNode(''));
-                                                       }
-                                                       rng = ed.dom.createRng();
-                                                       rng.setStart(n.firstChild, 1);
-                                                       rng.setEnd(n.firstChild, 1);
-                                                       ed.selection.setRng(rng);
-                                               }
-                                       }
-                                       return Event.cancel(e);
-                               }
-                       });
-                       ed.onKeyPress.add(cancelKeys);
-                       ed.onKeyDown.add(cancelKeys);
-                       ed.onKeyDown.add(imageJoiningListItem);
-               },
-               
-               applyList: function(targetListType, oppositeListType) {
-                       var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
-                               selectedBlocks = ed.selection.getSelectedBlocks();
-                       
-                       function cleanupBr(e) {
-                               if (e && e.tagName === 'BR') {
-                                       dom.remove(e);
-                               }
-                       }
-                       
-                       function makeList(element) {
-                               var list = dom.create(targetListType), li;
-                               function adjustIndentForNewList(element) {
-                                       // If there's a margin-left, outdent one level to account for the extra list margin.
-                                       if (element.style.marginLeft || element.style.paddingLeft) {
-                                               t.adjustPaddingFunction(false)(element);
-                                       }
-                               }
-                               
-                               if (element.tagName === 'LI') {
-                                       // No change required.
-                               } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
-                                       processBrs(element, function(startSection, br, previousBR) {
-                                               doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
-                                               li = startSection.parentNode;
-                                               adjustIndentForNewList(li);
-                                               cleanupBr(br);
-                                       });
-                                       if (element.tagName === 'P' || selectedBlocks.length > 1) {
-                                               dom.split(li.parentNode.parentNode, li.parentNode);
-                                       }
-                                       attemptMergeWithAdjacent(li.parentNode, true);
-                                       return;
-                               } else {
-                                       // Put the list around the element.
-                                       li = dom.create('li');
-                                       dom.insertAfter(li, element);
-                                       li.appendChild(element);
-                                       adjustIndentForNewList(element);
-                                       element = li;
-                               }
-                               dom.insertAfter(list, element);
-                               list.appendChild(element);
-                               attemptMergeWithAdjacent(list, true);
-                               applied.push(element);
-                       }
-                       
-                       function doWrapList(start, end, template) {
-                               var li, n = start, tmp, i;
-                               while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
-                                       start = dom.split(start.parentNode, start.previousSibling);
-                                       start = start.nextSibling;
-                                       n = start;
-                               }
-                               if (template) {
-                                       li = template.cloneNode(true);
-                                       start.parentNode.insertBefore(li, start);
-                                       while (li.firstChild) dom.remove(li.firstChild);
-                                       li = dom.rename(li, 'li');
-                               } else {
-                                       li = dom.create('li');
-                                       start.parentNode.insertBefore(li, start);
-                               }
-                               while (n && n != end) {
-                                       tmp = n.nextSibling;
-                                       li.appendChild(n);
-                                       n = tmp;
-                               }
-                               if (li.childNodes.length === 0) {
-                                       li.innerHTML = '<br _mce_bogus="1" />';
-                               }
-                               makeList(li);
-                       }
-                       
-                       function processBrs(element, callback) {
-                               var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
-                                       breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
-                               function isAnyPartSelected(start, end) {
-                                       var r = dom.createRng(), sel;
-                                       bookmark.keep = true;
-                                       ed.selection.moveToBookmark(bookmark);
-                                       bookmark.keep = false;
-                                       sel = ed.selection.getRng(true);
-                                       if (!end) {
-                                               end = start.parentNode.lastChild;
-                                       }
-                                       r.setStartBefore(start);
-                                       r.setEndAfter(end);
-                                       return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
-                               }
-                               function nextLeaf(br) {
-                                       if (br.nextSibling)
-                                               return br.nextSibling;
-                                       if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
-                                               return nextLeaf(br.parentNode);
-                               }
-                               // Split on BRs within the range and process those.
-                               startSection = element.firstChild;
-                               // First mark the BRs that have any part of the previous section selected.
-                               var trailingContentSelected = false;
-                               each(dom.select(breakElements, element), function(br) {
-                                       var b;
-                                       if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
-                                               return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
-                                       }
-                                       if (isAnyPartSelected(startSection, br)) {
-                                               dom.addClass(br, '_mce_tagged_br');
-                                               startSection = nextLeaf(br);
-                                       }
-                               });
-                               trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
-                               startSection = element.firstChild;
-                               each(dom.select(breakElements, element), function(br) {
-                                       // Got a section from start to br.
-                                       var tmp = nextLeaf(br);
-                                       if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
-                                               return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
-                                       }
-                                       if (dom.hasClass(br, '_mce_tagged_br')) {
-                                               callback(startSection, br, previousBR);
-                                               previousBR = null;
-                                       } else {
-                                               previousBR = br;
-                                       }
-                                       startSection = tmp;
-                               });
-                               if (trailingContentSelected) {
-                                       callback(startSection, undefined, previousBR);
-                               }
-                       }
-                       
-                       function wrapList(element) {
-                               processBrs(element, function(startSection, br, previousBR) {
-                                       // Need to indent this part
-                                       doWrapList(startSection, br);
-                                       cleanupBr(br);
-                                       cleanupBr(previousBR);
-                               });
-                       }
-                       
-                       function changeList(element) {
-                               if (tinymce.inArray(applied, element) !== -1) {
-                                       return;
-                               }
-                               if (element.parentNode.tagName === oppositeListType) {
-                                       dom.split(element.parentNode, element);
-                                       makeList(element);
-                                       attemptMergeWithNext(element.parentNode, false);
-                               }
-                               applied.push(element);
-                       }
-                       
-                       function convertListItemToParagraph(element) {
-                               var child, nextChild, mergedElement, splitLast;
-                               if (tinymce.inArray(applied, element) !== -1) {
-                                       return;
-                               }
-                               element = splitNestedLists(element, dom);
-                               while (dom.is(element.parentNode, 'ol,ul,li')) {
-                                       dom.split(element.parentNode, element);
-                               }
-                               // Push the original element we have from the selection, not the renamed one.
-                               applied.push(element);
-                               element = dom.rename(element, 'p');
-                               mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
-                               if (mergedElement === element) {
-                                       // Now split out any block elements that can't be contained within a P.
-                                       // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
-                                       child = element.firstChild;
-                                       while (child) {
-                                               if (dom.isBlock(child)) {
-                                                       child = dom.split(child.parentNode, child);
-                                                       splitLast = true;
-                                                       nextChild = child.nextSibling && child.nextSibling.firstChild; 
-                                               } else {
-                                                       nextChild = child.nextSibling;
-                                                       if (splitLast && child.tagName === 'BR') {
-                                                               dom.remove(child);
-                                                       }
-                                                       splitLast = false;
-                                               }
-                                               child = nextChild;
-                                       }
-                               }
-                       }
-                       
-                       each(selectedBlocks, function(e) {
-                               e = findItemToOperateOn(e, dom);
-                               if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
-                                       hasOppositeType = true;
-                               } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
-                                       hasSameType = true;
-                               } else {
-                                       hasNonList = true;
-                               }
-                       });
-
-                       if (hasNonList || hasOppositeType || selectedBlocks.length === 0) {
-                               actions = {
-                                       'LI': changeList,
-                                       'H1': makeList,
-                                       'H2': makeList,
-                                       'H3': makeList,
-                                       'H4': makeList,
-                                       'H5': makeList,
-                                       'H6': makeList,
-                                       'P': makeList,
-                                       'BODY': makeList,
-                                       'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
-                                       defaultAction: wrapList
-                               };
-                       } else {
-                               actions = {
-                                       defaultAction: convertListItemToParagraph
-                               };
-                       }
-                       this.process(actions);
-               },
-               
-               indent: function() {
-                       var ed = this.ed, dom = ed.dom, indented = [];
-                       
-                       function createWrapItem(element) {
-                               var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
-                               dom.insertAfter(wrapItem, element);
-                               return wrapItem;
-                       }
-                       
-                       function createWrapList(element) {
-                               var wrapItem = createWrapItem(element),
-                                       list = dom.getParent(element, 'ol,ul'),
-                                       listType = list.tagName,
-                                       listStyle = dom.getStyle(list, 'list-style-type'),
-                                       attrs = {},
-                                       wrapList;
-                               if (listStyle !== '') {
-                                       attrs.style = 'list-style-type: ' + listStyle + ';';
-                               }
-                               wrapList = dom.create(listType, attrs);
-                               wrapItem.appendChild(wrapList);
-                               return wrapList;
-                       }
-                       
-                       function indentLI(element) {
-                               if (!hasParentInList(ed, element, indented)) {
-                                       element = splitNestedLists(element, dom);
-                                       var wrapList = createWrapList(element);
-                                       wrapList.appendChild(element);
-                                       attemptMergeWithAdjacent(wrapList.parentNode, false);
-                                       attemptMergeWithAdjacent(wrapList, false);
-                                       indented.push(element);
-                               }
-                       }
-                       
-                       this.process({
-                               'LI': indentLI,
-                               defaultAction: this.adjustPaddingFunction(true)
-                       });
-                       
-               },
-               
-               outdent: function() {
-                       var t = this, ed = t.ed, dom = ed.dom, outdented = [];
-                       
-                       function outdentLI(element) {
-                               var listElement, targetParent, align;
-                               if (!hasParentInList(ed, element, outdented)) {
-                                       if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
-                                               return t.adjustPaddingFunction(false)(element);
-                                       }
-                                       align = dom.getStyle(element, 'text-align', true);
-                                       if (align === 'center' || align === 'right') {
-                                               dom.setStyle(element, 'text-align', 'left');
-                                               return;
-                                       }
-                                       element = splitNestedLists(element, dom);
-                                       listElement = element.parentNode;
-                                       targetParent = element.parentNode.parentNode;
-                                       if (targetParent.tagName === 'P') {
-                                               dom.split(targetParent, element.parentNode);
-                                       } else {
-                                               dom.split(listElement, element);
-                                               if (targetParent.tagName === 'LI') {
-                                                       // Nested list, need to split the LI and go back out to the OL/UL element.
-                                                       dom.split(targetParent, element);
-                                               } else if (!dom.is(targetParent, 'ol,ul')) {
-                                                       dom.rename(element, 'p');
-                                               }
-                                       }
-                                       outdented.push(element);
-                               }
-                       }
-                       
-                       this.process({
-                               'LI': outdentLI,
-                               defaultAction: this.adjustPaddingFunction(false)
-                       });
-                       
-                       each(outdented, attemptMergeWithAdjacent);
-               },
-               
-               process: function(actions) {
-                       var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
-                       function processElement(element) {
-                               dom.removeClass(element, '_mce_act_on');
-                               if (!element || element.nodeType !== 1) {
-                                       return;
-                               }
-                               element = findItemToOperateOn(element, dom);
-                               var action = actions[element.tagName];
-                               if (!action) {
-                                       action = actions.defaultAction;
-                               }
-                               action(element);
-                       }
-                       function recurse(element) {
-                               t.splitSafeEach(element.childNodes, processElement);
-                       }
-                       function brAtEdgeOfSelection(container, offset) {
-                               return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
-                                               container.childNodes[offset].tagName === 'BR';
-                       }
-                       selectedBlocks = sel.getSelectedBlocks();
-                       if (selectedBlocks.length === 0) {
-                               selectedBlocks = [ dom.getRoot() ];
-                       }
-
-                       r = sel.getRng(true);
-                       if (!r.collapsed) {
-                               if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
-                                       r.setEnd(r.endContainer, r.endOffset - 1);
-                                       sel.setRng(r);
-                               }
-                               if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
-                                       r.setStart(r.startContainer, r.startOffset + 1);
-                                       sel.setRng(r);
-                               }
-                       }
-                       bookmark = sel.getBookmark();
-                       actions.OL = actions.UL = recurse;
-                       t.splitSafeEach(selectedBlocks, processElement);
-                       sel.moveToBookmark(bookmark);
-                       bookmark = null;
-                       // Avoids table or image handles being left behind in Firefox.
-                       t.ed.execCommand('mceRepaint');
-               },
-               
-               splitSafeEach: function(elements, f) {
-                       if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
-                                       /Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
-                               this.classBasedEach(elements, f);
-                       } else {
-                               each(elements, f);
-                       }
-               },
-               
-               classBasedEach: function(elements, f) {
-                       var dom = this.ed.dom, nodes, element;
-                       // Mark nodes
-                       each(elements, function(element) {
-                               dom.addClass(element, '_mce_act_on');
-                       });
-                       nodes = dom.select('._mce_act_on');
-                       while (nodes.length > 0) {
-                               element = nodes.shift();
-                               dom.removeClass(element, '_mce_act_on');
-                               f(element);
-                               nodes = dom.select('._mce_act_on');
-                       }
-               },
-               
-               adjustPaddingFunction: function(isIndent) {
-                       var indentAmount, indentUnits, ed = this.ed;
-                       indentAmount = ed.settings.indentation;
-                       indentUnits = /[a-z%]+/i.exec(indentAmount);
-                       indentAmount = parseInt(indentAmount, 10);
-                       return function(element) {
-                               var currentIndent, newIndentAmount;
-                               currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
-                               if (isIndent) {
-                                       newIndentAmount = currentIndent + indentAmount;
-                               } else {
-                                       newIndentAmount = currentIndent - indentAmount;
-                               }
-                               ed.dom.setStyle(element, 'padding-left', '');
-                               ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
-                       };
-               },
-               
-               getInfo: function() {
-                       return {
-                               longname : 'Lists',
-                               author : 'Moxiecode Systems AB',
-                               authorurl : 'http://tinymce.moxiecode.com',
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion
-                       };
-               }
-       });
-       tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
-}());
diff --git a/plugins/TinyMCE/js/plugins/media/css/media.css b/plugins/TinyMCE/js/plugins/media/css/media.css
deleted file mode 100644 (file)
index 0c45c7f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }\r
-#hspace, #vspace { width: 50px }\r
-#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }\r
-#flash_base, #flash_flashvars, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px }\r
-#width, #height { width: 40px }\r
-#src, #media_type { width: 250px }\r
-#class { width: 120px }\r
-#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto }\r
-.panel_wrapper div.current { height: 420px; overflow: auto }\r
-#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }\r
-.mceAddSelectValue { background-color: #DDDDDD }\r
-#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }\r
-#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }\r
-#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }\r
-#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }\r
-#qt_qtsrc { width: 200px }\r
-iframe {border: 1px solid gray}\r
diff --git a/plugins/TinyMCE/js/plugins/media/editor_plugin.js b/plugins/TinyMCE/js/plugins/media/editor_plugin.js
deleted file mode 100644 (file)
index edba2af..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var d=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),h=tinymce.makeMap(d.join(",")),b=tinymce.html.Node,f,a,g=tinymce.util.JSON,e;f=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"]];function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(i){return i&&i.nodeName==="IMG"&&n.dom.hasClass(i,"mceItemMedia")}r.editor=n;r.url=j;a="";for(m=0;m<f.length;m++){k=f[m][0];q={name:k,clsids:tinymce.explode(f[m][1]||""),mimes:tinymce.explode(f[m][2]||""),codebase:f[m][3]};for(p=0;p<q.clsids.length;p++){l["clsid:"+q.clsids[p]]=q}for(p=0;p<q.mimes.length;p++){l[q.mimes[p]]=q}l["mceItem"+k]=q;l[k.toLowerCase()]=q;a+=(a?"|":"")+k}tinymce.each(n.getParam("media_types","video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv;shockwave=dcr;quicktime=mov,qt,mpg,mp3,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar").split(";"),function(v){var s,u,t;v=v.split(/=/);u=tinymce.explode(v[1].toLowerCase());for(s=0;s<u.length;s++){t=l[v[0].toLowerCase()];if(t){l[u[s]]=t}}});a=new RegExp("write("+a+")\\(([^)]+)\\)");r.lookup=l;n.onPreInit.add(function(){n.schema.addValidElements("object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]");n.parser.addNodeFilter("object,embed,video,audio,script,iframe",function(s){var t=s.length;while(t--){r.objectToImg(s[t])}});n.serializer.addNodeFilter("img",function(s,u,t){var v=s.length,w;while(v--){w=s[v];if((w.attr("class")||"").indexOf("mceItemMedia")!==-1){r.imgToObject(w,t)}}})});n.onInit.add(function(){if(n.theme&&n.theme.onResolveName){n.theme.onResolveName.add(function(i,s){if(s.name==="img"&&n.dom.hasClass(s.node,"mceItemMedia")){s.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(s,t,i){if(i.nodeName==="IMG"&&i.className.indexOf("mceItemMedia")!==-1){t.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var s,i;i=n.selection.getNode();if(o(i)){s=n.dom.getAttrib(i,"data-mce-json");if(s){s=g.parse(s);tinymce.each(d,function(t){var u=n.dom.getAttrib(i,t);if(u){s[t]=u}});s.type=r.getType(i.className).name.toLowerCase()}}if(!s){s={type:"flash",video:{sources:[]},params:{}}}n.windowManager.open({file:j+"/media.htm",width:430+parseInt(n.getLang("media.delta_width",0)),height:500+parseInt(n.getLang("media.delta_height",0)),inline:1},{plugin_url:j,data:s})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(s,i,t){i.setActive("media",o(t))})},convertUrl:function(k,n){var j=this,m=j.editor,l=m.settings,o=l.url_converter,i=l.url_converter_scope||j;if(!k){return k}if(n){return m.documentBaseURI.toAbsolute(k)}return o.call(i,k,"src","object")},getInfo:function(){return{longname:"Media",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media",version:tinymce.majorVersion+"."+tinymce.minorVersion}},dataToImg:function(m,k){var r=this,o=r.editor,p=o.documentBaseURI,j,q,n,l;m.params.src=r.convertUrl(m.params.src,k);q=m.video.attrs;if(q){q.src=r.convertUrl(q.src,k)}if(q){q.poster=r.convertUrl(q.poster,k)}j=c(m.video.sources);if(j){for(l=0;l<j.length;l++){j[l].src=r.convertUrl(j[l].src,k)}}n=r.editor.dom.create("img",{id:m.id,style:m.style,align:m.align,src:r.editor.theme.url+"/img/trans.gif","class":"mceItemMedia mceItem"+r.getType(m.type).name,"data-mce-json":g.serialize(m,"'")});n.width=m.width||"320";n.height=m.height||"240";return n},dataToHtml:function(i,j){return this.editor.serializer.serialize(this.dataToImg(i,j),{forced_root_block:"",force_absolute:j})},htmlToData:function(k){var j,i,l;l={type:"flash",video:{sources:[]},params:{}};j=this.editor.parser.parse(k);i=j.getAll("img")[0];if(i){l=g.parse(i.attr("data-mce-json"));l.type=this.getType(i.attr("class")).name.toLowerCase();tinymce.each(d,function(m){var n=i.attr(m);if(n){l[m]=n}})}return l},getType:function(m){var k,j,l;j=tinymce.explode(m," ");for(k=0;k<j.length;k++){l=this.lookup[j[k]];if(l){return l}}},imgToObject:function(x,n){var t=this,o=t.editor,A,E,j,s,F,w,D,u,k,C,r,p,y,B,m,v,l,z;function q(i,G){var K,J,L,I,H;H=o.getParam("flash_video_player_url",t.convertUrl(t.url+"/moxieplayer.swf"));if(H){K=o.documentBaseURI;D.params.src=H;if(o.getParam("flash_video_player_absvideourl",true)){i=K.toAbsolute(i||"",true);G=K.toAbsolute(G||"",true)}L="";J=o.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(J,function(N,M){N=N.replace(/\$url/,i||"");N=N.replace(/\$poster/,G||"");if(N.length>0){L+=(L?"&":"")+M+"="+escape(N)}});if(L.length){D.params.flashvars=L}I=o.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(I,function(N,M){D.params[M]=""+N})}}D=x.attr("data-mce-json");if(!D){return}D=g.parse(D);p=this.getType(x.attr("class"));z=x.attr("data-mce-style");if(!z){z=x.attr("style");if(z){z=o.dom.serializeStyle(o.dom.parseStyle(z,"img"))}}if(p.name==="Iframe"){v=new b("iframe",1);tinymce.each(d,function(i){var G=x.attr(i);if(i=="class"&&G){G=G.replace(/mceItem.+ ?/g,"")}if(G&&G.length>0){v.attr(i,G)}});for(F in D.params){v.attr(F,D.params[F])}v.attr({style:z,src:D.params.src});x.replace(v);return}if(this.editor.settings.media_use_script){v=new b("script",1).attr("type","text/javascript");w=new b("#text",3);w.value="write"+p.name+"("+g.serialize(tinymce.extend(D.params,{width:x.attr("width"),height:x.attr("height")}))+");";v.append(w);x.replace(v);return}if(p.name==="Video"&&D.video.sources[0]){A=new b("video",1).attr(tinymce.extend({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z},D.video.attrs));if(D.video.attrs){l=D.video.attrs.poster}k=D.video.sources=c(D.video.sources);for(y=0;y<k.length;y++){if(/\.mp4$/.test(k[y].src)){m=k[y].src}}if(!k[0].type){A.attr("src",k[0].src);k.splice(0,1)}for(y=0;y<k.length;y++){u=new b("source",1).attr(k[y]);u.shortEnded=true;A.append(u)}if(m){q(m,l);p=t.getType("flash")}else{D.params.src=""}}if(D.params.src){if(/\.flv$/i.test(D.params.src)){q(D.params.src,"")}if(n&&n.force_absolute){D.params.src=o.documentBaseURI.toAbsolute(D.params.src)}E=new b("object",1).attr({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z});tinymce.each(d,function(i){if(D[i]&&i!="type"){E.attr(i,D[i])}});for(F in D.params){r=new b("param",1);r.shortEnded=true;w=D.params[F];if(F==="src"&&p.name==="WindowsMedia"){F="url"}r.attr({name:F,value:w});E.append(r)}if(this.editor.getParam("media_strict",true)){E.attr({data:D.params.src,type:p.mimes[0]})}else{E.attr({classid:"clsid:"+p.clsids[0],codebase:p.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z,type:p.mimes[0]});for(F in D.params){j.attr(F,D.params[F])}tinymce.each(d,function(i){if(D[i]&&i!="type"){j.attr(i,D[i])}});E.append(j)}if(D.object_html){w=new b("#text",3);w.raw=true;w.value=D.object_html;E.append(w)}if(A){A.append(E)}}if(A){if(D.video_html){w=new b("#text",3);w.raw=true;w.value=D.video_html;A.append(w)}}if(A||E){x.replace(A||E)}else{x.remove()}},objectToImg:function(y){var F,j,A,p,G,H,u,w,t,B,z,q,o,D,x,k,E,n,C=this.lookup,l,v,s=this.editor.settings.url_converter,m=this.editor.settings.url_converter_scope;function r(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}if(!y.parent){return}if(y.name==="script"){if(y.firstChild){l=a.exec(y.firstChild.value)}if(!l){return}n=l[1];E={video:{},params:g.parse(l[2])};w=E.params.width;t=E.params.height}E=E||{video:{},params:{}};G=new b("img",1);G.attr({src:this.editor.theme.url+"/img/trans.gif"});H=y.name;if(H==="video"){A=y;F=y.getAll("object")[0];j=y.getAll("embed")[0];w=A.attr("width");t=A.attr("height");u=A.attr("id");E.video={attrs:{},sources:[]};v=E.video.attrs;for(H in A.attributes.map){v[H]=A.attributes.map[H]}x=y.attr("src");if(x){E.video.sources.push({src:s.call(m,x,"src","video")})}k=A.getAll("source");for(z=0;z<k.length;z++){x=k[z].remove();E.video.sources.push({src:s.call(m,x.attr("src"),"src","source"),type:x.attr("type"),media:x.attr("media")})}if(v.poster){v.poster=s.call(m,v.poster,"poster","video")}}if(y.name==="object"){F=y;j=y.getAll("embed")[0]}if(y.name==="embed"){j=y}if(y.name==="iframe"){p=y;n="Iframe"}if(F){w=w||F.attr("width");t=t||F.attr("height");B=B||F.attr("style");u=u||F.attr("id");D=F.getAll("param");for(z=0;z<D.length;z++){o=D[z];H=o.remove().attr("name");if(!h[H]){E.params[H]=o.attr("value")}}E.params.src=E.params.src||F.attr("data")}if(j){w=w||j.attr("width");t=t||j.attr("height");B=B||j.attr("style");u=u||j.attr("id");for(H in j.attributes.map){if(!h[H]&&!E.params[H]){E.params[H]=j.attributes.map[H]}}}if(p){w=p.attr("width");t=p.attr("height");B=B||p.attr("style");u=p.attr("id");tinymce.each(d,function(i){G.attr(i,p.attr(i))});for(H in p.attributes.map){if(!h[H]&&!E.params[H]){E.params[H]=p.attributes.map[H]}}}if(E.params.movie){E.params.src=E.params.src||E.params.movie;delete E.params.movie}if(E.params.src){E.params.src=s.call(m,E.params.src,"src","object")}if(A){n=C.video.name}if(F&&!n){n=(C[(F.attr("clsid")||"").toLowerCase()]||C[(F.attr("type")||"").toLowerCase()]||{}).name}if(j&&!n){n=(C[(j.attr("type")||"").toLowerCase()]||{}).name}y.replace(G);if(j){j.remove()}if(F){q=r(F.remove());if(q){E.object_html=q}}if(A){q=r(A.remove());if(q){E.video_html=q}}G.attr({id:u,"class":"mceItemMedia mceItem"+(n||"Flash"),style:B,width:w||"320",height:t||"240","data-mce-json":g.serialize(E,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/media/editor_plugin_src.js
deleted file mode 100644 (file)
index 483db1d..0000000
+++ /dev/null
@@ -1,777 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node,\r
-               mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes;\r
-\r
-       // Media types supported by this plugin\r
-       mediaTypes = [\r
-               // Type, clsid:s, mime types, codebase\r
-               ["Flash", "d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],\r
-               ["ShockWave", "166b1bca-3f9c-11cf-8075-444553540000", "application/x-director", "http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],\r
-               ["WindowsMedia", "6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a", "application/x-mplayer2", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],\r
-               ["QuickTime", "02bf25d5-8c17-4b23-bc80-d3488abddc6b", "video/quicktime", "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],\r
-               ["RealMedia", "cfcdaa03-8be4-11cf-b84b-0020afbbccfa", "audio/x-pn-realaudio-plugin", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],\r
-               ["Java", "8ad9c840-044e-11d1-b3e9-00805f499d93", "application/x-java-applet", "http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],\r
-               ["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"],\r
-               ["Iframe"],\r
-               ["Video"]\r
-       ];\r
-\r
-       function toArray(obj) {\r
-               var undef, out, i;\r
-\r
-               if (obj && !obj.splice) {\r
-                       out = [];\r
-\r
-                       for (i = 0; true; i++) {\r
-                               if (obj[i])\r
-                                       out[i] = obj[i];\r
-                               else\r
-                                       break;\r
-                       }\r
-\r
-                       return out;\r
-               }\r
-\r
-               return obj;\r
-       };\r
-\r
-       tinymce.create('tinymce.plugins.MediaPlugin', {\r
-               init : function(ed, url) {\r
-                       var self = this, lookup = {}, i, y, item, name;\r
-\r
-                       function isMediaImg(node) {\r
-                               return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia');\r
-                       };\r
-\r
-                       self.editor = ed;\r
-                       self.url = url;\r
-\r
-                       // Parse media types into a lookup table\r
-                       scriptRegExp = '';\r
-                       for (i = 0; i < mediaTypes.length; i++) {\r
-                               name = mediaTypes[i][0];\r
-\r
-                               item = {\r
-                                       name : name,\r
-                                       clsids : tinymce.explode(mediaTypes[i][1] || ''),\r
-                                       mimes : tinymce.explode(mediaTypes[i][2] || ''),\r
-                                       codebase : mediaTypes[i][3]\r
-                               };\r
-\r
-                               for (y = 0; y < item.clsids.length; y++)\r
-                                       lookup['clsid:' + item.clsids[y]] = item;\r
-\r
-                               for (y = 0; y < item.mimes.length; y++)\r
-                                       lookup[item.mimes[y]] = item;\r
-\r
-                               lookup['mceItem' + name] = item;\r
-                               lookup[name.toLowerCase()] = item;\r
-\r
-                               scriptRegExp += (scriptRegExp ? '|' : '') + name;\r
-                       }\r
-\r
-                       // Handle the media_types setting\r
-                       tinymce.each(ed.getParam("media_types",\r
-                               "video=mp4,m4v,ogv,webm;" +\r
-                               "silverlight=xap;" +\r
-                               "flash=swf,flv;" +\r
-                               "shockwave=dcr;" +\r
-                               "quicktime=mov,qt,mpg,mp3,mpeg;" +\r
-                               "shockwave=dcr;" +\r
-                               "windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" +\r
-                               "realmedia=rm,ra,ram;" +\r
-                               "java=jar"\r
-                       ).split(';'), function(item) {\r
-                               var i, extensions, type;\r
-\r
-                               item = item.split(/=/);\r
-                               extensions = tinymce.explode(item[1].toLowerCase());\r
-                               for (i = 0; i < extensions.length; i++) {\r
-                                       type = lookup[item[0].toLowerCase()];\r
-\r
-                                       if (type)\r
-                                               lookup[extensions[i]] = type;\r
-                               }\r
-                       });\r
-\r
-                       scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)');\r
-                       self.lookup = lookup;\r
-\r
-                       ed.onPreInit.add(function() {\r
-                               // Allow video elements\r
-                               ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]');\r
-\r
-                               // Convert video elements to image placeholder\r
-                               ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) {\r
-                                       var i = nodes.length;\r
-\r
-                                       while (i--)\r
-                                               self.objectToImg(nodes[i]);\r
-                               });\r
-\r
-                               // Convert image placeholders to video elements\r
-                               ed.serializer.addNodeFilter('img', function(nodes, name, args) {\r
-                                       var i = nodes.length, node;\r
-\r
-                                       while (i--) {\r
-                                               node = nodes[i];\r
-                                               if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1)\r
-                                                       self.imgToObject(node, args);\r
-                                       }\r
-                               });\r
-                       });\r
-\r
-                       ed.onInit.add(function() {\r
-                               // Display "media" instead of "img" in element path\r
-                               if (ed.theme && ed.theme.onResolveName) {\r
-                                       ed.theme.onResolveName.add(function(theme, path_object) {\r
-                                               if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia'))\r
-                                                       path_object.name = 'media';\r
-                                       });\r
-                               }\r
-\r
-                               // Add contect menu if it's loaded\r
-                               if (ed && ed.plugins.contextmenu) {\r
-                                       ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) {\r
-                                               if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1)\r
-                                                       menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceMedia', function() {\r
-                               var data, img;\r
-\r
-                               img = ed.selection.getNode();\r
-                               if (isMediaImg(img)) {\r
-                                       data = ed.dom.getAttrib(img, 'data-mce-json');\r
-                                       if (data) {\r
-                                               data = JSON.parse(data);\r
-\r
-                                               // Add some extra properties to the data object\r
-                                               tinymce.each(rootAttributes, function(name) {\r
-                                                       var value = ed.dom.getAttrib(img, name);\r
-\r
-                                                       if (value)\r
-                                                               data[name] = value;\r
-                                               });\r
-\r
-                                               data.type = self.getType(img.className).name.toLowerCase();\r
-                                       }\r
-                               }\r
-\r
-                               if (!data) {\r
-                                       data = {\r
-                                               type : 'flash',\r
-                                               video: {sources:[]},\r
-                                               params: {}\r
-                                       };\r
-                               }\r
-\r
-                               ed.windowManager.open({\r
-                                       file : url + '/media.htm',\r
-                                       width : 430 + parseInt(ed.getLang('media.delta_width', 0)),\r
-                                       height : 500 + parseInt(ed.getLang('media.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url,\r
-                                       data : data\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});\r
-\r
-                       // Update media selection status\r
-                       ed.onNodeChange.add(function(ed, cm, node) {\r
-                               cm.setActive('media', isMediaImg(node));\r
-                       });\r
-               },\r
-\r
-               convertUrl : function(url, force_absolute) {\r
-                       var self = this, editor = self.editor, settings = editor.settings,\r
-                               urlConverter = settings.url_converter,\r
-                               urlConverterScope = settings.url_converter_scope || self;\r
-\r
-                       if (!url)\r
-                               return url;\r
-\r
-                       if (force_absolute)\r
-                               return editor.documentBaseURI.toAbsolute(url);\r
-\r
-                       return urlConverter.call(urlConverterScope, url, 'src', 'object');\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Media',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               /**\r
-                * Converts the JSON data object to an img node.\r
-                */\r
-               dataToImg : function(data, force_absolute) {\r
-                       var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;\r
-\r
-                       data.params.src = self.convertUrl(data.params.src, force_absolute);\r
-\r
-                       attrs = data.video.attrs;\r
-                       if (attrs)\r
-                               attrs.src = self.convertUrl(attrs.src, force_absolute);\r
-\r
-                       if (attrs)\r
-                               attrs.poster = self.convertUrl(attrs.poster, force_absolute);\r
-\r
-                       sources = toArray(data.video.sources);\r
-                       if (sources) {\r
-                               for (i = 0; i < sources.length; i++)\r
-                                       sources[i].src = self.convertUrl(sources[i].src, force_absolute);\r
-                       }\r
-\r
-                       img = self.editor.dom.create('img', {\r
-                               id : data.id,\r
-                               style : data.style,\r
-                               align : data.align,\r
-                               src : self.editor.theme.url + '/img/trans.gif',\r
-                               'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,\r
-                               'data-mce-json' : JSON.serialize(data, "'")\r
-                       });\r
-\r
-                       img.width = data.width || "320";\r
-                       img.height = data.height || "240";\r
-\r
-                       return img;\r
-               },\r
-\r
-               /**\r
-                * Converts the JSON data object to a HTML string.\r
-                */\r
-               dataToHtml : function(data, force_absolute) {\r
-                       return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});\r
-               },\r
-\r
-               /**\r
-                * Converts the JSON data object to a HTML string.\r
-                */\r
-               htmlToData : function(html) {\r
-                       var fragment, img, data;\r
-\r
-                       data = {\r
-                               type : 'flash',\r
-                               video: {sources:[]},\r
-                               params: {}\r
-                       };\r
-\r
-                       fragment = this.editor.parser.parse(html);\r
-                       img = fragment.getAll('img')[0];\r
-\r
-                       if (img) {\r
-                               data = JSON.parse(img.attr('data-mce-json'));\r
-                               data.type = this.getType(img.attr('class')).name.toLowerCase();\r
-\r
-                               // Add some extra properties to the data object\r
-                               tinymce.each(rootAttributes, function(name) {\r
-                                       var value = img.attr(name);\r
-\r
-                                       if (value)\r
-                                               data[name] = value;\r
-                               });\r
-                       }\r
-\r
-                       return data;\r
-               },\r
-\r
-               /**\r
-                * Get type item by extension, class, clsid or mime type.\r
-                *\r
-                * @method getType\r
-                * @param {String} value Value to get type item by.\r
-                * @return {Object} Type item object or undefined.\r
-                */\r
-               getType : function(value) {\r
-                       var i, values, typeItem;\r
-\r
-                       // Find type by checking the classes\r
-                       values = tinymce.explode(value, ' ');\r
-                       for (i = 0; i < values.length; i++) {\r
-                               typeItem = this.lookup[values[i]];\r
-\r
-                               if (typeItem)\r
-                                       return typeItem;\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * Converts a tinymce.html.Node image element to video/object/embed.\r
-                */\r
-               imgToObject : function(node, args) {\r
-                       var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,\r
-                               source, sources, params, param, typeItem, i, item, mp4Source, replacement,\r
-                               posterSrc, style;\r
-\r
-                       // Adds the flash player\r
-                       function addPlayer(video_src, poster_src) {\r
-                               var baseUri, flashVars, flashVarsOutput, params, flashPlayer;\r
-\r
-                               flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));\r
-                               if (flashPlayer) {\r
-                                       baseUri = editor.documentBaseURI;\r
-                                       data.params.src = flashPlayer;\r
-\r
-                                       // Convert the movie url to absolute urls\r
-                                       if (editor.getParam('flash_video_player_absvideourl', true)) {\r
-                                               video_src = baseUri.toAbsolute(video_src || '', true);\r
-                                               poster_src = baseUri.toAbsolute(poster_src || '', true);\r
-                                       }\r
-\r
-                                       // Generate flash vars\r
-                                       flashVarsOutput = '';\r
-                                       flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'});\r
-                                       tinymce.each(flashVars, function(value, name) {\r
-                                               // Replace $url and $poster variables in flashvars value\r
-                                               value = value.replace(/\$url/, video_src || '');\r
-                                               value = value.replace(/\$poster/, poster_src || '');\r
-\r
-                                               if (value.length > 0)\r
-                                                       flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value);\r
-                                       });\r
-\r
-                                       if (flashVarsOutput.length)\r
-                                               data.params.flashvars = flashVarsOutput;\r
-\r
-                                       params = editor.getParam('flash_video_player_params', {\r
-                                               allowfullscreen: true,\r
-                                               allowscriptaccess: true\r
-                                       });\r
-\r
-                                       tinymce.each(params, function(value, name) {\r
-                                               data.params[name] = "" + value;\r
-                                       });\r
-                               }\r
-                       };\r
-\r
-                       data = node.attr('data-mce-json');\r
-                       if (!data)\r
-                               return;\r
-\r
-                       data = JSON.parse(data);\r
-                       typeItem = this.getType(node.attr('class'));\r
-\r
-                       style = node.attr('data-mce-style')\r
-                       if (!style) {\r
-                               style = node.attr('style');\r
-\r
-                               if (style)\r
-                                       style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img'));\r
-                       }\r
-\r
-                       // Handle iframe\r
-                       if (typeItem.name === 'Iframe') {\r
-                               replacement = new Node('iframe', 1);\r
-\r
-                               tinymce.each(rootAttributes, function(name) {\r
-                                       var value = node.attr(name);\r
-\r
-                                       if (name == 'class' && value)\r
-                                               value = value.replace(/mceItem.+ ?/g, '');\r
-\r
-                                       if (value && value.length > 0)\r
-                                               replacement.attr(name, value);\r
-                               });\r
-\r
-                               for (name in data.params)\r
-                                       replacement.attr(name, data.params[name]);\r
-\r
-                               replacement.attr({\r
-                                       style: style,\r
-                                       src: data.params.src\r
-                               });\r
-\r
-                               node.replace(replacement);\r
-\r
-                               return;\r
-                       }\r
-\r
-                       // Handle scripts\r
-                       if (this.editor.settings.media_use_script) {\r
-                               replacement = new Node('script', 1).attr('type', 'text/javascript');\r
-\r
-                               value = new Node('#text', 3);\r
-                               value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, {\r
-                                       width: node.attr('width'),\r
-                                       height: node.attr('height')\r
-                               })) + ');';\r
-\r
-                               replacement.append(value);\r
-                               node.replace(replacement);\r
-\r
-                               return;\r
-                       }\r
-\r
-                       // Add HTML5 video element\r
-                       if (typeItem.name === 'Video' && data.video.sources[0]) {\r
-                               // Create new object element\r
-                               video = new Node('video', 1).attr(tinymce.extend({\r
-                                       id : node.attr('id'),\r
-                                       width: node.attr('width'),\r
-                                       height: node.attr('height'),\r
-                                       style : style\r
-                               }, data.video.attrs));\r
-\r
-                               // Get poster source and use that for flash fallback\r
-                               if (data.video.attrs)\r
-                                       posterSrc = data.video.attrs.poster;\r
-\r
-                               sources = data.video.sources = toArray(data.video.sources);\r
-                               for (i = 0; i < sources.length; i++) {\r
-                                       if (/\.mp4$/.test(sources[i].src))\r
-                                               mp4Source = sources[i].src;\r
-                               }\r
-\r
-                               if (!sources[0].type) {\r
-                                       video.attr('src', sources[0].src);\r
-                                       sources.splice(0, 1);\r
-                               }\r
-\r
-                               for (i = 0; i < sources.length; i++) {\r
-                                       source = new Node('source', 1).attr(sources[i]);\r
-                                       source.shortEnded = true;\r
-                                       video.append(source);\r
-                               }\r
-\r
-                               // Create flash fallback for video if we have a mp4 source\r
-                               if (mp4Source) {\r
-                                       addPlayer(mp4Source, posterSrc);\r
-                                       typeItem = self.getType('flash');\r
-                               } else\r
-                                       data.params.src = '';\r
-                       }\r
-\r
-                       // Do we have a params src then we can generate object\r
-                       if (data.params.src) {\r
-                               // Is flv movie add player for it\r
-                               if (/\.flv$/i.test(data.params.src))\r
-                                       addPlayer(data.params.src, '');\r
-\r
-                               if (args && args.force_absolute)\r
-                                       data.params.src = editor.documentBaseURI.toAbsolute(data.params.src);\r
-\r
-                               // Create new object element\r
-                               object = new Node('object', 1).attr({\r
-                                       id : node.attr('id'),\r
-                                       width: node.attr('width'),\r
-                                       height: node.attr('height'),\r
-                                       style : style\r
-                               });\r
-\r
-                               tinymce.each(rootAttributes, function(name) {\r
-                                       if (data[name] && name != 'type')\r
-                                               object.attr(name, data[name]);\r
-                               });\r
-\r
-                               // Add params\r
-                               for (name in data.params) {\r
-                                       param = new Node('param', 1);\r
-                                       param.shortEnded = true;\r
-                                       value = data.params[name];\r
-\r
-                                       // Windows media needs to use url instead of src for the media URL\r
-                                       if (name === 'src' && typeItem.name === 'WindowsMedia')\r
-                                               name = 'url';\r
-\r
-                                       param.attr({name: name, value: value});\r
-                                       object.append(param);\r
-                               }\r
-\r
-                               // Setup add type and classid if strict is disabled\r
-                               if (this.editor.getParam('media_strict', true)) {\r
-                                       object.attr({\r
-                                               data: data.params.src,\r
-                                               type: typeItem.mimes[0]\r
-                                       });\r
-                               } else {\r
-                                       object.attr({\r
-                                               classid: "clsid:" + typeItem.clsids[0],\r
-                                               codebase: typeItem.codebase\r
-                                       });\r
-\r
-                                       embed = new Node('embed', 1);\r
-                                       embed.shortEnded = true;\r
-                                       embed.attr({\r
-                                               id: node.attr('id'),\r
-                                               width: node.attr('width'),\r
-                                               height: node.attr('height'),\r
-                                               style : style,\r
-                                               type: typeItem.mimes[0]\r
-                                       });\r
-\r
-                                       for (name in data.params)\r
-                                               embed.attr(name, data.params[name]);\r
-\r
-                                       tinymce.each(rootAttributes, function(name) {\r
-                                               if (data[name] && name != 'type')\r
-                                                       embed.attr(name, data[name]);\r
-                                       });\r
-\r
-                                       object.append(embed);\r
-                               }\r
-\r
-                               // Insert raw HTML\r
-                               if (data.object_html) {\r
-                                       value = new Node('#text', 3);\r
-                                       value.raw = true;\r
-                                       value.value = data.object_html;\r
-                                       object.append(value);\r
-                               }\r
-\r
-                               // Append object to video element if it exists\r
-                               if (video)\r
-                                       video.append(object);\r
-                       }\r
-\r
-                       if (video) {\r
-                               // Insert raw HTML\r
-                               if (data.video_html) {\r
-                                       value = new Node('#text', 3);\r
-                                       value.raw = true;\r
-                                       value.value = data.video_html;\r
-                                       video.append(value);\r
-                               }\r
-                       }\r
-\r
-                       if (video || object)\r
-                               node.replace(video || object);\r
-                       else\r
-                               node.remove();\r
-               },\r
-\r
-               /**\r
-                * Converts a tinymce.html.Node video/object/embed to an img element.\r
-                *\r
-                * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this:\r
-                * <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" />\r
-                *\r
-                * The JSON structure will be like this:\r
-                * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}}\r
-                */\r
-               objectToImg : function(node) {\r
-                       var object, embed, video, iframe, img, name, id, width, height, style, i, html,\r
-                               param, params, source, sources, data, type, lookup = this.lookup,\r
-                               matches, attrs, urlConverter = this.editor.settings.url_converter,\r
-                               urlConverterScope = this.editor.settings.url_converter_scope;\r
-\r
-                       function getInnerHTML(node) {\r
-                               return new tinymce.html.Serializer({\r
-                                       inner: true,\r
-                                       validate: false\r
-                               }).serialize(node);\r
-                       };\r
-\r
-                       // If node isn't in document\r
-                       if (!node.parent)\r
-                               return;\r
-\r
-                       // Handle media scripts\r
-                       if (node.name === 'script') {\r
-                               if (node.firstChild)\r
-                                       matches = scriptRegExp.exec(node.firstChild.value);\r
-\r
-                               if (!matches)\r
-                                       return;\r
-\r
-                               type = matches[1];\r
-                               data = {video : {}, params : JSON.parse(matches[2])};\r
-                               width = data.params.width;\r
-                               height = data.params.height;\r
-                       }\r
-\r
-                       // Setup data objects\r
-                       data = data || {\r
-                               video : {},\r
-                               params : {}\r
-                       };\r
-\r
-                       // Setup new image object\r
-                       img = new Node('img', 1);\r
-                       img.attr({\r
-                               src : this.editor.theme.url + '/img/trans.gif'\r
-                       });\r
-\r
-                       // Video element\r
-                       name = node.name;\r
-                       if (name === 'video') {\r
-                               video = node;\r
-                               object = node.getAll('object')[0];\r
-                               embed = node.getAll('embed')[0];\r
-                               width = video.attr('width');\r
-                               height = video.attr('height');\r
-                               id = video.attr('id');\r
-                               data.video = {attrs : {}, sources : []};\r
-\r
-                               // Get all video attributes\r
-                               attrs = data.video.attrs;\r
-                               for (name in video.attributes.map)\r
-                                       attrs[name] = video.attributes.map[name];\r
-\r
-                               source = node.attr('src');\r
-                               if (source)\r
-                                       data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', 'video')});\r
-\r
-                               // Get all sources\r
-                               sources = video.getAll("source");\r
-                               for (i = 0; i < sources.length; i++) {\r
-                                       source = sources[i].remove();\r
-\r
-                                       data.video.sources.push({\r
-                                               src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'),\r
-                                               type: source.attr('type'),\r
-                                               media: source.attr('media')\r
-                                       });\r
-                               }\r
-\r
-                               // Convert the poster URL\r
-                               if (attrs.poster)\r
-                                       attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', 'video');\r
-                       }\r
-\r
-                       // Object element\r
-                       if (node.name === 'object') {\r
-                               object = node;\r
-                               embed = node.getAll('embed')[0];\r
-                       }\r
-\r
-                       // Embed element\r
-                       if (node.name === 'embed')\r
-                               embed = node;\r
-\r
-                       // Iframe element\r
-                       if (node.name === 'iframe') {\r
-                               iframe = node;\r
-                               type = 'Iframe';\r
-                       }\r
-\r
-                       if (object) {\r
-                               // Get width/height\r
-                               width = width || object.attr('width');\r
-                               height = height || object.attr('height');\r
-                               style = style || object.attr('style');\r
-                               id = id || object.attr('id');\r
-\r
-                               // Get all object params\r
-                               params = object.getAll("param");\r
-                               for (i = 0; i < params.length; i++) {\r
-                                       param = params[i];\r
-                                       name = param.remove().attr('name');\r
-\r
-                                       if (!excludedAttrs[name])\r
-                                               data.params[name] = param.attr('value');\r
-                               }\r
-\r
-                               data.params.src = data.params.src || object.attr('data');\r
-                       }\r
-\r
-                       if (embed) {\r
-                               // Get width/height\r
-                               width = width || embed.attr('width');\r
-                               height = height || embed.attr('height');\r
-                               style = style || embed.attr('style');\r
-                               id = id || embed.attr('id');\r
-\r
-                               // Get all embed attributes\r
-                               for (name in embed.attributes.map) {\r
-                                       if (!excludedAttrs[name] && !data.params[name])\r
-                                               data.params[name] = embed.attributes.map[name];\r
-                               }\r
-                       }\r
-\r
-                       if (iframe) {\r
-                               // Get width/height\r
-                               width = iframe.attr('width');\r
-                               height = iframe.attr('height');\r
-                               style = style || iframe.attr('style');\r
-                               id = iframe.attr('id');\r
-\r
-                               tinymce.each(rootAttributes, function(name) {\r
-                                       img.attr(name, iframe.attr(name));\r
-                               });\r
-\r
-                               // Get all iframe attributes\r
-                               for (name in iframe.attributes.map) {\r
-                                       if (!excludedAttrs[name] && !data.params[name])\r
-                                               data.params[name] = iframe.attributes.map[name];\r
-                               }\r
-                       }\r
-\r
-                       // Use src not movie\r
-                       if (data.params.movie) {\r
-                               data.params.src = data.params.src || data.params.movie;\r
-                               delete data.params.movie;\r
-                       }\r
-\r
-                       // Convert the URL to relative/absolute depending on configuration\r
-                       if (data.params.src)\r
-                               data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object');\r
-\r
-                       if (video)\r
-                               type = lookup.video.name;\r
-\r
-                       if (object && !type)\r
-                               type = (lookup[(object.attr('clsid') || '').toLowerCase()] || lookup[(object.attr('type') || '').toLowerCase()] || {}).name;\r
-\r
-                       if (embed && !type)\r
-                               type = (lookup[(embed.attr('type') || '').toLowerCase()] || {}).name;\r
-\r
-                       // Replace the video/object/embed element with a placeholder image containing the data\r
-                       node.replace(img);\r
-\r
-                       // Remove embed\r
-                       if (embed)\r
-                               embed.remove();\r
-\r
-                       // Serialize the inner HTML of the object element\r
-                       if (object) {\r
-                               html = getInnerHTML(object.remove());\r
-\r
-                               if (html)\r
-                                       data.object_html = html;\r
-                       }\r
-\r
-                       // Serialize the inner HTML of the video element\r
-                       if (video) {\r
-                               html = getInnerHTML(video.remove());\r
-\r
-                               if (html)\r
-                                       data.video_html = html;\r
-                       }\r
-\r
-                       // Set width/height of placeholder\r
-                       img.attr({\r
-                               id : id,\r
-                               'class' : 'mceItemMedia mceItem' + (type || 'Flash'),\r
-                               style : style,\r
-                               width : width || "320",\r
-                               height : height || "240",\r
-                               "data-mce-json" : JSON.serialize(data, "'")\r
-                       });\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/js/embed.js b/plugins/TinyMCE/js/plugins/media/js/embed.js
deleted file mode 100644 (file)
index f8dc810..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/**\r
- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
- */\r
-\r
-function writeFlash(p) {\r
-       writeEmbed(\r
-               'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
-               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
-               'application/x-shockwave-flash',\r
-               p\r
-       );\r
-}\r
-\r
-function writeShockWave(p) {\r
-       writeEmbed(\r
-       '166B1BCA-3F9C-11CF-8075-444553540000',\r
-       'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
-       'application/x-director',\r
-               p\r
-       );\r
-}\r
-\r
-function writeQuickTime(p) {\r
-       writeEmbed(\r
-               '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
-               'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
-               'video/quicktime',\r
-               p\r
-       );\r
-}\r
-\r
-function writeRealMedia(p) {\r
-       writeEmbed(\r
-               'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
-               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
-               'audio/x-pn-realaudio-plugin',\r
-               p\r
-       );\r
-}\r
-\r
-function writeWindowsMedia(p) {\r
-       p.url = p.src;\r
-       writeEmbed(\r
-               '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
-               'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
-               'application/x-mplayer2',\r
-               p\r
-       );\r
-}\r
-\r
-function writeEmbed(cls, cb, mt, p) {\r
-       var h = '', n;\r
-\r
-       h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
-       h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
-       h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
-       h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
-       h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
-       h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
-       h += '>';\r
-\r
-       for (n in p)\r
-               h += '<param name="' + n + '" value="' + p[n] + '">';\r
-\r
-       h += '<embed type="' + mt + '"';\r
-\r
-       for (n in p)\r
-               h += n + '="' + p[n] + '" ';\r
-\r
-       h += '></embed></object>';\r
-\r
-       document.write(h);\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/media/js/media.js b/plugins/TinyMCE/js/plugins/media/js/media.js
deleted file mode 100644 (file)
index a8acdd1..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-(function() {\r
-       var url;\r
-\r
-       if (url = tinyMCEPopup.getParam("media_external_list_url"))\r
-               document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
-\r
-       function get(id) {\r
-               return document.getElementById(id);\r
-       }\r
-\r
-       function getVal(id) {\r
-               var elm = get(id);\r
-\r
-               if (elm.nodeName == "SELECT")\r
-                       return elm.options[elm.selectedIndex].value;\r
-\r
-               if (elm.type == "checkbox")\r
-                       return elm.checked;\r
-\r
-               return elm.value;\r
-       }\r
-\r
-       function setVal(id, value, name) {\r
-               if (typeof(value) != 'undefined') {\r
-                       var elm = get(id);\r
-\r
-                       if (elm.nodeName == "SELECT")\r
-                               selectByValue(document.forms[0], id, value);\r
-                       else if (elm.type == "checkbox") {\r
-                               if (typeof(value) == 'string') {\r
-                                       value = value.toLowerCase();\r
-                                       value = (!name && value === 'true') || (name && value === name.toLowerCase());\r
-                               }\r
-                               elm.checked = !!value;\r
-                       } else\r
-                               elm.value = value;\r
-               }\r
-       }\r
-\r
-       window.Media = {\r
-               init : function() {\r
-                       var html, editor;\r
-\r
-                       this.editor = editor = tinyMCEPopup.editor;\r
-\r
-                       // Setup file browsers and color pickers\r
-                       get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');\r
-                       get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media');\r
-                       get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-                       get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('filebrowser_altsource1','video_altsource1','media','media');\r
-                       get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('filebrowser_altsource2','video_altsource2','media','media');\r
-                       get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image');\r
-\r
-                       html = this.getMediaListHTML('medialist', 'src', 'media', 'media');\r
-                       if (html == "")\r
-                               get("linklistrow").style.display = 'none';\r
-                       else\r
-                               get("linklistcontainer").innerHTML = html;\r
-\r
-                       if (isVisible('filebrowser'))\r
-                               get('src').style.width = '230px';\r
-\r
-                       if (isVisible('filebrowser_altsource1'))\r
-                               get('video_altsource1').style.width = '220px';\r
-\r
-                       if (isVisible('filebrowser_altsource2'))\r
-                               get('video_altsource2').style.width = '220px';\r
-\r
-                       if (isVisible('filebrowser_poster'))\r
-                               get('video_poster').style.width = '220px';\r
-\r
-                       this.data = tinyMCEPopup.getWindowArg('data');\r
-                       this.dataToForm();\r
-                       this.preview();\r
-               },\r
-\r
-               insert : function() {\r
-                       var editor = tinyMCEPopup.editor;\r
-\r
-                       this.formToData();\r
-                       editor.execCommand('mceRepaint');\r
-                       tinyMCEPopup.restoreSelection();\r
-                       editor.selection.setNode(editor.plugins.media.dataToImg(this.data));\r
-                       tinyMCEPopup.close();\r
-               },\r
-\r
-               preview : function() {\r
-                       get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true);\r
-               },\r
-\r
-               moveStates : function(to_form, field) {\r
-                       var data = this.data, editor = this.editor, data = this.data,\r
-                               mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src;\r
-\r
-                       defaultStates = {\r
-                               // QuickTime\r
-                               quicktime_autoplay : true,\r
-                               quicktime_controller : true,\r
-\r
-                               // Flash\r
-                               flash_play : true,\r
-                               flash_loop : true,\r
-                               flash_menu : true,\r
-\r
-                               // WindowsMedia\r
-                               windowsmedia_autostart : true,\r
-                               windowsmedia_enablecontextmenu : true,\r
-                               windowsmedia_invokeurls : true,\r
-\r
-                               // RealMedia\r
-                               realmedia_autogotourl : true,\r
-                               realmedia_imagestatus : true\r
-                       };\r
-\r
-                       function parseQueryParams(str) {\r
-                               var out = {};\r
-\r
-                               if (str) {\r
-                                       tinymce.each(str.split('&'), function(item) {\r
-                                               var parts = item.split('=');\r
-\r
-                                               out[unescape(parts[0])] = unescape(parts[1]);\r
-                                       });\r
-                               }\r
-\r
-                               return out;\r
-                       };\r
-\r
-                       function setOptions(type, names) {\r
-                               var i, name, formItemName, value, list;\r
-\r
-                               if (type == data.type || type == 'global') {\r
-                                       names = tinymce.explode(names);\r
-                                       for (i = 0; i < names.length; i++) {\r
-                                               name = names[i];\r
-                                               formItemName = type == 'global' ? name : type + '_' + name;\r
-\r
-                                               if (type == 'global')\r
-                                                       list = data;\r
-                                               else if (type == 'video') {\r
-                                                       list = data.video.attrs;\r
-\r
-                                                       if (!list && !to_form)\r
-                                                               data.video.attrs = list = {};\r
-                                               } else\r
-                                                       list = data.params;\r
-\r
-                                               if (list) {\r
-                                                       if (to_form) {\r
-                                                               setVal(formItemName, list[name], type == 'video' ? name : '');\r
-                                                       } else {\r
-                                                               delete list[name];\r
-\r
-                                                               value = getVal(formItemName);\r
-                                                               if (type == 'video' && value === true)\r
-                                                                       value = name;\r
-\r
-                                                               if (defaultStates[formItemName]) {\r
-                                                                       if (value !== defaultStates[formItemName]) {\r
-                                                                               value = "" + value;\r
-                                                                               list[name] = value;\r
-                                                                       }\r
-                                                               } else if (value) {\r
-                                                                       value = "" + value;\r
-                                                                       list[name] = value;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (!to_form) {\r
-                               data.type = get('media_type').options[get('media_type').selectedIndex].value;\r
-                               data.width = getVal('width');\r
-                               data.height = getVal('height');\r
-\r
-                               // Switch type based on extension\r
-                               src = getVal('src');\r
-                               if (field == 'src') {\r
-                                       ext = src.replace(/^.*\.([^.]+)$/, '$1');\r
-                                       if (typeInfo = mediaPlugin.getType(ext))\r
-                                               data.type = typeInfo.name.toLowerCase();\r
-\r
-                                       setVal('media_type', data.type);\r
-                               }\r
-\r
-                               if (data.type == "video") {\r
-                                       if (!data.video.sources)\r
-                                               data.video.sources = [];\r
-\r
-                                       data.video.sources[0] = {src: getVal('src')};\r
-                               }\r
-                       }\r
-\r
-                       // Hide all fieldsets and show the one active\r
-                       get('video_options').style.display = 'none';\r
-                       get('flash_options').style.display = 'none';\r
-                       get('quicktime_options').style.display = 'none';\r
-                       get('shockwave_options').style.display = 'none';\r
-                       get('windowsmedia_options').style.display = 'none';\r
-                       get('realmedia_options').style.display = 'none';\r
-\r
-                       if (get(data.type + '_options'))\r
-                               get(data.type + '_options').style.display = 'block';\r
-\r
-                       setVal('media_type', data.type);\r
-\r
-                       setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars');\r
-                       setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc');\r
-                       setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign');\r
-                       setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume');\r
-                       setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks');\r
-                       setOptions('video', 'poster,autoplay,loop,preload,controls');\r
-                       setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height');\r
-\r
-                       if (to_form) {\r
-                               if (data.type == 'video') {\r
-                                       if (data.video.sources[0])\r
-                                               setVal('src', data.video.sources[0].src);\r
-\r
-                                       src = data.video.sources[1];\r
-                                       if (src)\r
-                                               setVal('video_altsource1', src.src);\r
-\r
-                                       src = data.video.sources[2];\r
-                                       if (src)\r
-                                               setVal('video_altsource2', src.src);\r
-                               } else {\r
-                                       // Check flash vars\r
-                                       if (data.type == 'flash') {\r
-                                               tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) {\r
-                                                       if (value == '$url')\r
-                                                               data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src;\r
-                                               });\r
-                                       }\r
-\r
-                                       setVal('src', data.params.src);\r
-                               }\r
-                       } else {\r
-                               src = getVal("src");\r
-       \r
-                               // YouTube\r
-                               if (src.match(/youtube.com(.+)v=([^&]+)/)) {\r
-                                       data.width = 425;\r
-                                       data.height = 350;\r
-                                       data.params.frameborder = '0';\r
-                                       data.type = 'iframe';\r
-                                       src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1];\r
-                                       setVal('src', src);\r
-                                       setVal('media_type', data.type);\r
-                               }\r
-\r
-                               // Google video\r
-                               if (src.match(/video.google.com(.+)docid=([^&]+)/)) {\r
-                                       data.width = 425;\r
-                                       data.height = 326;\r
-                                       data.type = 'flash';\r
-                                       src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en';\r
-                                       setVal('src', src);\r
-                                       setVal('media_type', data.type);\r
-                               }\r
-\r
-                               if (data.type == 'video') {\r
-                                       if (!data.video.sources)\r
-                                               data.video.sources = [];\r
-\r
-                                       data.video.sources[0] = {src : src};\r
-\r
-                                       src = getVal("video_altsource1");\r
-                                       if (src)\r
-                                               data.video.sources[1] = {src : src};\r
-\r
-                                       src = getVal("video_altsource2");\r
-                                       if (src)\r
-                                               data.video.sources[2] = {src : src};\r
-                               } else\r
-                                       data.params.src = src;\r
-\r
-                               // Set default size\r
-                               setVal('width', data.width || 320);\r
-                               setVal('height', data.height || 240);\r
-                       }\r
-               },\r
-\r
-               dataToForm : function() {\r
-                       this.moveStates(true);\r
-               },\r
-\r
-               formToData : function(field) {\r
-                       if (field == "width" || field == "height")\r
-                               this.changeSize(field);\r
-\r
-                       if (field == 'source') {\r
-                               this.moveStates(false, field);\r
-                               setVal('source', this.editor.plugins.media.dataToHtml(this.data));\r
-                               this.panel = 'source';\r
-                       } else {\r
-                               if (this.panel == 'source') {\r
-                                       this.data = this.editor.plugins.media.htmlToData(getVal('source'));\r
-                                       this.dataToForm();\r
-                                       this.panel = '';\r
-                               }\r
-\r
-                               this.moveStates(false, field);\r
-                               this.preview();\r
-                       }\r
-               },\r
-\r
-               beforeResize : function() {\r
-                       this.width = parseInt(getVal('width') || "320", 10);\r
-                       this.height = parseInt(getVal('height') || "240", 10);\r
-               },\r
-\r
-               changeSize : function(type) {\r
-                       var width, height, scale, size;\r
-\r
-                       if (get('constrain').checked) {\r
-                               width = parseInt(getVal('width') || "320", 10);\r
-                               height = parseInt(getVal('height') || "240", 10);\r
-\r
-                               if (type == 'width') {\r
-                                       this.height = Math.round((width / this.width) * height);\r
-                                       setVal('height', this.height);\r
-                               } else {\r
-                                       this.width = Math.round((height / this.height) * width);\r
-                                       setVal('width', this.width);\r
-                               }\r
-                       }\r
-               },\r
-\r
-               getMediaListHTML : function() {\r
-                       if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {\r
-                               var html = "";\r
-\r
-                               html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;Media.formToData(\'src\');">';\r
-                               html += '<option value="">---</option>';\r
-\r
-                               for (var i=0; i<tinyMCEMediaList.length; i++)\r
-                                       html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';\r
-\r
-                               html += '</select>';\r
-\r
-                               return html;\r
-                       }\r
-\r
-                       return "";\r
-               }\r
-       };\r
-\r
-       tinyMCEPopup.requireLangPack();\r
-       tinyMCEPopup.onInit.add(function() {\r
-               Media.init();\r
-       });\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/media/langs/en_dlg.js
deleted file mode 100644 (file)
index 29d26a0..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-tinyMCE.addI18n('en.media_dlg',{\r
-title:"Insert / edit embedded media",\r
-general:"General",\r
-advanced:"Advanced",\r
-file:"File/URL",\r
-list:"List",\r
-size:"Dimensions",\r
-preview:"Preview",\r
-constrain_proportions:"Constrain proportions",\r
-type:"Type",\r
-id:"Id",\r
-name:"Name",\r
-class_name:"Class",\r
-vspace:"V-Space",\r
-hspace:"H-Space",\r
-play:"Auto play",\r
-loop:"Loop",\r
-menu:"Show menu",\r
-quality:"Quality",\r
-scale:"Scale",\r
-align:"Align",\r
-salign:"SAlign",\r
-wmode:"WMode",\r
-bgcolor:"Background",\r
-base:"Base",\r
-flashvars:"Flashvars",\r
-liveconnect:"SWLiveConnect",\r
-autohref:"AutoHREF",\r
-cache:"Cache",\r
-hidden:"Hidden",\r
-controller:"Controller",\r
-kioskmode:"Kiosk mode",\r
-playeveryframe:"Play every frame",\r
-targetcache:"Target cache",\r
-correction:"No correction",\r
-enablejavascript:"Enable JavaScript",\r
-starttime:"Start time",\r
-endtime:"End time",\r
-href:"Href",\r
-qtsrcchokespeed:"Choke speed",\r
-target:"Target",\r
-volume:"Volume",\r
-autostart:"Auto start",\r
-enabled:"Enabled",\r
-fullscreen:"Fullscreen",\r
-invokeurls:"Invoke URLs",\r
-mute:"Mute",\r
-stretchtofit:"Stretch to fit",\r
-windowlessvideo:"Windowless video",\r
-balance:"Balance",\r
-baseurl:"Base URL",\r
-captioningid:"Captioning id",\r
-currentmarker:"Current marker",\r
-currentposition:"Current position",\r
-defaultframe:"Default frame",\r
-playcount:"Play count",\r
-rate:"Rate",\r
-uimode:"UI Mode",\r
-flash_options:"Flash options",\r
-qt_options:"Quicktime options",\r
-wmp_options:"Windows media player options",\r
-rmp_options:"Real media player options",\r
-shockwave_options:"Shockwave options",\r
-autogotourl:"Auto goto URL",\r
-center:"Center",\r
-imagestatus:"Image status",\r
-maintainaspect:"Maintain aspect",\r
-nojava:"No java",\r
-prefetch:"Prefetch",\r
-shuffle:"Shuffle",\r
-console:"Console",\r
-numloop:"Num loops",\r
-controls:"Controls",\r
-scriptcallbacks:"Script callbacks",\r
-swstretchstyle:"Stretch style",\r
-swstretchhalign:"Stretch H-Align",\r
-swstretchvalign:"Stretch V-Align",\r
-sound:"Sound",\r
-progress:"Progress",\r
-qtsrc:"QT Src",\r
-qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",\r
-align_top:"Top",\r
-align_right:"Right",\r
-align_bottom:"Bottom",\r
-align_left:"Left",\r
-align_center:"Center",\r
-align_top_left:"Top left",\r
-align_top_right:"Top right",\r
-align_bottom_left:"Bottom left",\r
-align_bottom_right:"Bottom right",\r
-flv_options:"Flash video options",\r
-flv_scalemode:"Scale mode",\r
-flv_buffer:"Buffer",\r
-flv_starttime:"Start time",\r
-flv_defaultvolume:"Default volumne",\r
-flv_hiddengui:"Hidden GUI",\r
-flv_autostart:"Auto start",\r
-flv_loop:"Loop",\r
-flv_showscalemodes:"Show scale modes",\r
-flv_smoothvideo:"Smooth video",\r
-flv_jscallback:"JS Callback",\r
-html5_video_options:"HTML5 Video Options",\r
-altsource1:"Alternative source 1",\r
-altsource2:"Alternative source 2",\r
-preload:"Preload",\r
-poster:"Poster",\r
-\r
-source:"Source"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/media.htm b/plugins/TinyMCE/js/plugins/media/media.htm
deleted file mode 100644 (file)
index 807a537..0000000
+++ /dev/null
@@ -1,812 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#media_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/media.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <link href="css/media.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body style="display: none" role="application">\r
-<form onsubmit="Media.insert();return false;" action="#">\r
-               <div class="tabs" role="presentation">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.general}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>\r
-                               <li id="source_tab" aria-controls="source_panel"><span><a href="javascript:mcTabs.displayTab('source_tab','source_panel');Media.formToData('source');" onmousedown="return false;">{#media_dlg.source}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#media_dlg.general}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                                       <tr>\r
-                                                               <td><label for="media_type">{#media_dlg.type}</label></td>\r
-                                                               <td>\r
-                                                                       <select id="media_type" name="media_type" onchange="Media.formToData('type');">\r
-                                                                               <option value="video">HTML5 Video</option>\r
-                                                                               <option value="flash">Flash</option>\r
-                                                                               <option value="quicktime">QuickTime</option>\r
-                                                                               <option value="shockwave">Shockwave</option>\r
-                                                                               <option value="windowsmedia">Windows Media</option>\r
-                                                                               <option value="realmedia">Real Media</option>\r
-                                                                               <option value="iframe">Iframe</option>\r
-                                                                       </select>\r
-                                                               </td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                       <td><label for="src">{#media_dlg.file}</label></td>\r
-                                                               <td>\r
-                                                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="Media.formToData();" /></td>\r
-                                                                               <td id="filebrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                                       </table>\r
-                                                               </td>\r
-                                                       </tr>\r
-                                                       <tr id="linklistrow">\r
-                                                               <td><label for="linklist">{#media_dlg.list}</label></td>\r
-                                                               <td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>\r
-                                                       </tr>\r
-                                                       <tr>\r
-                                                               <td><label for="width">{#media_dlg.size}</label></td>\r
-                                                               <td>\r
-                                                                       <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                               <tr>\r
-                                                                                       <td><input type="text" id="width" name="width" value="" class="size" onchange="Media.formToData('width');" onfocus="Media.beforeResize();" /> x <input type="text" id="height" name="height" value="" class="size" onfocus="Media.beforeResize();" onchange="Media.formToData('height');" /></td>\r
-                                                                                       <td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" checked="checked" /></td>\r
-                                                                                       <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>\r
-                                                                               </tr>\r
-                                                                       </table>\r
-                                                               </td>\r
-                                                       </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset>\r
-                                       <legend>{#media_dlg.preview}</legend>\r
-                                       <div id="prev"></div>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#media_dlg.advanced}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">\r
-                                               <tr>\r
-                                                       <td><label for="id">{#media_dlg.id}</label></td>\r
-                                                       <td><input type="text" id="id" name="id" onchange="Media.formToData();" /></td>\r
-                                                       <td><label for="name">{#media_dlg.name}</label></td>\r
-                                                       <td><input type="text" id="name" name="name" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="align">{#media_dlg.align}</label></td>\r
-                                                       <td>\r
-                                                               <select id="align" name="align" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="top">{#media_dlg.align_top}</option>\r
-                                                                       <option value="right">{#media_dlg.align_right}</option>\r
-                                                                       <option value="bottom">{#media_dlg.align_bottom}</option>\r
-                                                                       <option value="left">{#media_dlg.align_left}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>\r
-                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="vspace">{#media_dlg.vspace}</label></td>\r
-                                                       <td><input type="text" id="vspace" name="vspace" class="number" onchange="Media.formToData();" /></td>\r
-                                                       <td><label for="hspace">{#media_dlg.hspace}</label></td>\r
-                                                       <td><input type="text" id="hspace" name="hspace" class="number" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="video_options">\r
-                                       <legend>{#media_dlg.html5_video_options}</legend>\r
-\r
-                                       <table role="presentation">\r
-                                               <tr>\r
-                                                       <td><label for="video_altsource1">{#media_dlg.altsource1}</label></td>\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="text" id="video_altsource1" name="video_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>\r
-                                                                               <td id="video_altsource1_filebrowser">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="video_altsource2">{#media_dlg.altsource2}</label></td>\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="text" id="video_altsource2" name="video_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>\r
-                                                                               <td id="video_altsource2_filebrowser">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="video_poster">{#media_dlg.poster}</label></td>\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="text" id="video_poster" name="video_poster" onchange="Media.formToData();" style="width: 240px" /></td>\r
-                                                                               <td id="video_poster_filebrowser">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="video_autoplay" name="video_autoplay" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="video_autoplay">{#media_dlg.play}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="video_loop" name="video_loop" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="video_loop">{#media_dlg.loop}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="video_preload" name="video_preload" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="video_preload">{#media_dlg.preload}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="video_controls" name="video_controls" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="video_controls">{#media_dlg.controls}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="flash_options">\r
-                                       <legend>{#media_dlg.flash_options}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td><label for="flash_quality">{#media_dlg.quality}</label></td>\r
-                                                       <td>\r
-                                                               <select id="flash_quality" name="flash_quality" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="high">high</option>\r
-                                                                       <option value="low">low</option>\r
-                                                                       <option value="autolow">autolow</option>\r
-                                                                       <option value="autohigh">autohigh</option>\r
-                                                                       <option value="best">best</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="flash_scale">{#media_dlg.scale}</label></td>\r
-                                                       <td>\r
-                                                               <select id="flash_scale" name="flash_scale" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="showall">showall</option>\r
-                                                                       <option value="noborder">noborder</option>\r
-                                                                       <option value="exactfit">exactfit</option>\r
-                                                                       <option value="noscale">noscale</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>\r
-                                                       <td>\r
-                                                               <select id="flash_wmode" name="flash_wmode" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="window">window</option>\r
-                                                                       <option value="opaque">opaque</option>\r
-                                                                       <option value="transparent">transparent</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="flash_salign">{#media_dlg.salign}</label></td>\r
-                                                       <td>\r
-                                                               <select id="flash_salign" name="flash_salign" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="l">{#media_dlg.align_left}</option>\r
-                                                                       <option value="t">{#media_dlg.align_top}</option>\r
-                                                                       <option value="r">{#media_dlg.align_right}</option>\r
-                                                                       <option value="b">{#media_dlg.align_bottom}</option>\r
-                                                                       <option value="tl">{#media_dlg.align_top_left}</option>\r
-                                                                       <option value="tr">{#media_dlg.align_top_right}</option>\r
-                                                                       <option value="bl">{#media_dlg.align_bottom_left}</option>\r
-                                                                       <option value="br">{#media_dlg.align_bottom_right}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="flash_play">{#media_dlg.play}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="flash_loop">{#media_dlg.loop}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="flash_menu">{#media_dlg.menu}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-\r
-                                       <table role="presentation">\r
-                                               <tr>\r
-                                                       <td><label for="flash_base">{#media_dlg.base}</label></td>\r
-                                                       <td><input type="text" id="flash_base" name="flash_base" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>\r
-                                                       <td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="quicktime_options">\r
-                                       <legend>{#media_dlg.qt_options}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_loop" name="quicktime_loop" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_loop">{#media_dlg.loop}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_autoplay" name="quicktime_autoplay" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_autoplay">{#media_dlg.play}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_cache" name="quicktime_cache" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_cache">{#media_dlg.cache}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_controller" name="quicktime_controller" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_controller">{#media_dlg.controller}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_correction" name="quicktime_correction" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_correction">{#media_dlg.correction}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_enablejavascript" name="quicktime_enablejavascript" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_enablejavascript">{#media_dlg.enablejavascript}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_kioskmode" name="quicktime_kioskmode" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_kioskmode">{#media_dlg.kioskmode}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_autohref" name="quicktime_autohref" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_autohref">{#media_dlg.autohref}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_playeveryframe" name="quicktime_playeveryframe" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_playeveryframe">{#media_dlg.playeveryframe}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="quicktime_targetcache" name="quicktime_targetcache" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="quicktime_targetcache">{#media_dlg.targetcache}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="quicktime_scale">{#media_dlg.scale}</label></td>\r
-                                                       <td><select id="quicktime_scale" name="quicktime_scale" class="mceEditableSelect" onchange="Media.formToData();">\r
-                                                                       <option value="">{#not_set}</option> \r
-                                                                       <option value="tofit">tofit</option>\r
-                                                                       <option value="aspect">aspect</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">&nbsp;</td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>\r
-                                                       <td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="quicktime_endtime">{#media_dlg.endtime}</label></td>\r
-                                                       <td><input type="text" id="quicktime_endtime" name="quicktime_endtime" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="quicktime_target">{#media_dlg.target}</label></td>\r
-                                                       <td><input type="text" id="quicktime_target" name="quicktime_target" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="quicktime_href">{#media_dlg.href}</label></td>\r
-                                                       <td><input type="text" id="quicktime_href" name="quicktime_href" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="quicktime_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>\r
-                                                       <td><input type="text" id="quicktime_qtsrcchokespeed" name="quicktime_qtsrcchokespeed" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="quicktime_volume">{#media_dlg.volume}</label></td>\r
-                                                       <td><input type="text" id="quicktime_volume" name="quicktime_volume" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>\r
-                                                       <td colspan="4">\r
-                                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="text" id="quicktime_qtsrc" name="quicktime_qtsrc" onchange="Media.formToData();" /></td>\r
-                                                                               <td id="qtsrcfilebrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="windowsmedia_options">\r
-                                       <legend>{#media_dlg.wmp_options}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_autostart" name="windowsmedia_autostart" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_autostart">{#media_dlg.autostart}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_enabled" name="windowsmedia_enabled" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_enabled">{#media_dlg.enabled}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_enablecontextmenu" name="windowsmedia_enablecontextmenu" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_enablecontextmenu">{#media_dlg.menu}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_fullscreen" name="windowsmedia_fullscreen" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_fullscreen">{#media_dlg.fullscreen}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_invokeurls" name="windowsmedia_invokeurls" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_invokeurls">{#media_dlg.invokeurls}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_mute" name="windowsmedia_mute" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_mute">{#media_dlg.mute}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_stretchtofit" name="windowsmedia_stretchtofit" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_stretchtofit">{#media_dlg.stretchtofit}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="windowsmedia_windowlessvideo" name="windowsmedia_windowlessvideo" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="windowsmedia_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="windowsmedia_balance">{#media_dlg.balance}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_balance" name="windowsmedia_balance" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="windowsmedia_baseurl">{#media_dlg.baseurl}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_baseurl" name="windowsmedia_baseurl" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="windowsmedia_captioningid">{#media_dlg.captioningid}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_captioningid" name="windowsmedia_captioningid" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="windowsmedia_currentmarker">{#media_dlg.currentmarker}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_currentmarker" name="windowsmedia_currentmarker" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="windowsmedia_currentposition">{#media_dlg.currentposition}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_currentposition" name="windowsmedia_currentposition" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="windowsmedia_defaultframe">{#media_dlg.defaultframe}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_defaultframe" name="windowsmedia_defaultframe" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="windowsmedia_playcount">{#media_dlg.playcount}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_playcount" name="windowsmedia_playcount" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="windowsmedia_rate">{#media_dlg.rate}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_rate" name="windowsmedia_rate" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="windowsmedia_uimode">{#media_dlg.uimode}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_uimode" name="windowsmedia_uimode" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="windowsmedia_volume">{#media_dlg.volume}</label></td>\r
-                                                       <td><input type="text" id="windowsmedia_volume" name="windowsmedia_volume" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="realmedia_options">\r
-                                       <legend>{#media_dlg.rmp_options}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_autostart" name="realmedia_autostart" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_autostart">{#media_dlg.autostart}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_loop" name="realmedia_loop" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_loop">{#media_dlg.loop}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_autogotourl" name="realmedia_autogotourl" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_autogotourl">{#media_dlg.autogotourl}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_center" name="realmedia_center" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_center">{#media_dlg.center}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_imagestatus" name="realmedia_imagestatus" checked="checked" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_imagestatus">{#media_dlg.imagestatus}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_maintainaspect" name="realmedia_maintainaspect" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_maintainaspect">{#media_dlg.maintainaspect}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_nojava" name="realmedia_nojava" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_nojava">{#media_dlg.nojava}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_prefetch" name="realmedia_prefetch" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_prefetch">{#media_dlg.prefetch}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="realmedia_shuffle" name="realmedia_shuffle" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="realmedia_shuffle">{#media_dlg.shuffle}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               &nbsp;\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="realmedia_console">{#media_dlg.console}</label></td>\r
-                                                       <td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="realmedia_controls">{#media_dlg.controls}</label></td>\r
-                                                       <td><input type="text" id="realmedia_controls" name="realmedia_controls" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="realmedia_numloop">{#media_dlg.numloop}</label></td>\r
-                                                       <td><input type="text" id="realmedia_numloop" name="realmedia_numloop" onchange="Media.formToData();" /></td>\r
-\r
-                                                       <td><label for="realmedia_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>\r
-                                                       <td><input type="text" id="realmedia_scriptcallbacks" name="realmedia_scriptcallbacks" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-\r
-                               <fieldset id="shockwave_options">\r
-                                       <legend>{#media_dlg.shockwave_options}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>\r
-                                                       <td>\r
-                                                               <select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="Media.formToData();">\r
-                                                                       <option value="none">{#not_set}</option>\r
-                                                                       <option value="meet">Meet</option>\r
-                                                                       <option value="fill">Fill</option>\r
-                                                                       <option value="stage">Stage</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>\r
-                                                       <td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="Media.formToData();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>\r
-                                                       <td>\r
-                                                               <select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="Media.formToData();">\r
-                                                                       <option value="none">{#not_set}</option>\r
-                                                                       <option value="left">{#media_dlg.align_left}</option>\r
-                                                                       <option value="center">{#media_dlg.align_center}</option>\r
-                                                                       <option value="right">{#media_dlg.align_right}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>\r
-                                                       <td>\r
-                                                               <select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="Media.formToData();">\r
-                                                                       <option value="none">{#not_set}</option>\r
-                                                                       <option value="meet">Meet</option>\r
-                                                                       <option value="fill">Fill</option>\r
-                                                                       <option value="stage">Stage</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="Media.formToData();" checked="checked" /></td>\r
-                                                                               <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="Media.formToData();" checked="checked" /></td>\r
-                                                                               <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-\r
-                                               <tr>\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="Media.formToData();" /></td>\r
-                                                                               <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-\r
-                                                       <td colspan="2">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="Media.formToData();" checked="checked" /></td>\r
-                                                                               <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="source_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#media_dlg.source}</legend>\r
-                                       <textarea id="source" style="width: 100%; height: 390px"></textarea>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/media/moxieplayer.swf b/plugins/TinyMCE/js/plugins/media/moxieplayer.swf
deleted file mode 100644 (file)
index 2a04035..0000000
Binary files a/plugins/TinyMCE/js/plugins/media/moxieplayer.swf and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js b/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js
deleted file mode 100644 (file)
index 7394735..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js
deleted file mode 100644 (file)
index b3ea82e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.Nonbreaking', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceNonBreaking', function() {\r
-                               ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});\r
-\r
-                       if (ed.getParam('nonbreaking_force_tab')) {\r
-                               ed.onKeyDown.add(function(ed, e) {\r
-                                       if (tinymce.isIE && e.keyCode == 9) {\r
-                                               ed.execCommand('mceNonBreaking');\r
-                                               ed.execCommand('mceNonBreaking');\r
-                                               ed.execCommand('mceNonBreaking');\r
-                                               tinymce.dom.Event.cancel(e);\r
-                                       }\r
-                               });\r
-                       }\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Nonbreaking space',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-\r
-               // Private methods\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js b/plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js
deleted file mode 100644 (file)
index cc7de78..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block);b.onContextMenu.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block);b.onContextMenu.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js
deleted file mode 100644 (file)
index b6cf154..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var Event = tinymce.dom.Event;\r
-\r
-       tinymce.create('tinymce.plugins.NonEditablePlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this, editClass, nonEditClass;\r
-\r
-                       t.editor = ed;\r
-                       editClass = ed.getParam("noneditable_editable_class", "mceEditable");\r
-                       nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");\r
-\r
-                       ed.onNodeChange.addToTop(function(ed, cm, n) {\r
-                               var sc, ec;\r
-\r
-                               // Block if start or end is inside a non editable element\r
-                               sc = ed.dom.getParent(ed.selection.getStart(), function(n) {\r
-                                       return ed.dom.hasClass(n, nonEditClass);\r
-                               });\r
-\r
-                               ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {\r
-                                       return ed.dom.hasClass(n, nonEditClass);\r
-                               });\r
-\r
-                               // Block or unblock\r
-                               if (sc || ec) {\r
-                                       t._setDisabled(1);\r
-                                       return false;\r
-                               } else\r
-                                       t._setDisabled(0);\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Non editable elements',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               _block : function(ed, e) {\r
-                       var k = e.keyCode;\r
-\r
-                       // Don't block arrow keys, pg up/down, and F1-F12\r
-                       if ((k > 32 && k < 41) || (k > 111 && k < 124))\r
-                               return;\r
-\r
-                       return Event.cancel(e);\r
-               },\r
-\r
-               _setDisabled : function(s) {\r
-                       var t = this, ed = t.editor;\r
-\r
-                       tinymce.each(ed.controlManager.controls, function(c) {\r
-                               c.setDisabled(s);\r
-                       });\r
-\r
-                       if (s !== t.disabled) {\r
-                               if (s) {\r
-                                       ed.onKeyDown.addToTop(t._block);\r
-                                       ed.onKeyPress.addToTop(t._block);\r
-                                       ed.onKeyUp.addToTop(t._block);\r
-                                       ed.onPaste.addToTop(t._block);\r
-                                       ed.onContextMenu.addToTop(t._block);\r
-                               } else {\r
-                                       ed.onKeyDown.remove(t._block);\r
-                                       ed.onKeyPress.remove(t._block);\r
-                                       ed.onKeyUp.remove(t._block);\r
-                                       ed.onPaste.remove(t._block);\r
-                                       ed.onContextMenu.remove(t._block);\r
-                               }\r
-\r
-                               t.disabled = s;\r
-                       }\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js b/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js
deleted file mode 100644 (file)
index 35085e8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+b.theme.url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js
deleted file mode 100644 (file)
index a094c19..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.PageBreakPlugin', {\r
-               init : function(ed, url) {\r
-                       var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;\r
-\r
-                       pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mcePageBreak', function() {\r
-                               ed.execCommand('mceInsertContent', 0, pb);\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});\r
-\r
-                       ed.onInit.add(function() {\r
-                               if (ed.theme.onResolveName) {\r
-                                       ed.theme.onResolveName.add(function(th, o) {\r
-                                               if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))\r
-                                                       o.name = 'pagebreak';\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       ed.onClick.add(function(ed, e) {\r
-                               e = e.target;\r
-\r
-                               if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))\r
-                                       ed.selection.select(e);\r
-                       });\r
-\r
-                       ed.onNodeChange.add(function(ed, cm, n) {\r
-                               cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));\r
-                       });\r
-\r
-                       ed.onBeforeSetContent.add(function(ed, o) {\r
-                               o.content = o.content.replace(pbRE, pb);\r
-                       });\r
-\r
-                       ed.onPostProcess.add(function(ed, o) {\r
-                               if (o.get)\r
-                                       o.content = o.content.replace(/<img[^>]+>/g, function(im) {\r
-                                               if (im.indexOf('class="mcePageBreak') !== -1)\r
-                                                       im = sep;\r
-\r
-                                               return im;\r
-                                       });\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'PageBreak',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/editor_plugin.js b/plugins/TinyMCE/js/plugins/paste/editor_plugin.js
deleted file mode 100644 (file)
index 22149cc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(d,k,l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:r.replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<pre>"+o.encode(r).replace(/\r?\n/g,"<br />")+"</pre>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"],])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j,x,v){var t,u,l,k,r,e,p,f,n=j.getWin(),z=j.getDoc(),s=j.selection,m=tinymce.is,y=tinymce.inArray,g=b(j,"paste_text_linebreaktype"),o=b(j,"paste_text_replacements");function q(d){c(d,function(h){if(h.constructor==RegExp){v=v.replace(h,"")}else{v=v.replace(h[0],h[1])}})}if((typeof(v)==="string")&&(v.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.decode(tinymce.html.Entities.encodeRaw(v));if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"<br />"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"</p><p>"],[/\n/g,"<br />"]])}}if((l=v.indexOf("</p><p>"))!=-1){k=v.lastIndexOf("</p><p>");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t<u;t++){p+="</"+e[t].nodeName.toLowerCase()+">";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+'<span id="_plain_text_marker">&nbsp;</span>');window.setTimeout(function(){var d=x.get("_plain_text_marker"),A,h,w,i;s.select(d,false);z.execCommand("Delete",false,null);d=null;A=s.getStart();h=x.getViewPort(n);w=x.getPos(A).y;i=A.clientHeight;if((w<h.y)||(w+i>h.y+h.h)){z.body.scrollTop=w<h.y?w:w-h.h+25}},0)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js
deleted file mode 100644 (file)
index 9f8d39f..0000000
+++ /dev/null
@@ -1,941 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var each = tinymce.each,\r
-               defs = {\r
-                       paste_auto_cleanup_on_paste : true,\r
-                       paste_enable_default_filters : true,\r
-                       paste_block_drop : false,\r
-                       paste_retain_style_properties : "none",\r
-                       paste_strip_class_attributes : "mso",\r
-                       paste_remove_spans : false,\r
-                       paste_remove_styles : false,\r
-                       paste_remove_styles_if_webkit : true,\r
-                       paste_convert_middot_lists : true,\r
-                       paste_convert_headers_to_strong : false,\r
-                       paste_dialog_width : "450",\r
-                       paste_dialog_height : "400",\r
-                       paste_text_use_dialog : false,\r
-                       paste_text_sticky : false,\r
-                       paste_text_sticky_default : false,\r
-                       paste_text_notifyalways : false,\r
-                       paste_text_linebreaktype : "p",\r
-                       paste_text_replacements : [\r
-                               [/\u2026/g, "..."],\r
-                               [/[\x93\x94\u201c\u201d]/g, '"'],\r
-                               [/[\x60\x91\x92\u2018\u2019]/g, "'"]\r
-                       ]\r
-               };\r
-\r
-       function getParam(ed, name) {\r
-               return ed.getParam(name, defs[name]);\r
-       }\r
-\r
-       tinymce.create('tinymce.plugins.PastePlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-                       t.url = url;\r
-\r
-                       // Setup plugin events\r
-                       t.onPreProcess = new tinymce.util.Dispatcher(t);\r
-                       t.onPostProcess = new tinymce.util.Dispatcher(t);\r
-\r
-                       // Register default handlers\r
-                       t.onPreProcess.add(t._preProcess);\r
-                       t.onPostProcess.add(t._postProcess);\r
-\r
-                       // Register optional preprocess handler\r
-                       t.onPreProcess.add(function(pl, o) {\r
-                               ed.execCallback('paste_preprocess', pl, o);\r
-                       });\r
-\r
-                       // Register optional postprocess\r
-                       t.onPostProcess.add(function(pl, o) {\r
-                               ed.execCallback('paste_postprocess', pl, o);\r
-                       });\r
-\r
-                       ed.onKeyDown.addToTop(function(ed, e) {\r
-                               // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that\r
-                               if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))\r
-                                       return false; // Stop other listeners\r
-                       });\r
-\r
-                       // Initialize plain text flag\r
-                       ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default');\r
-\r
-                       // This function executes the process handlers and inserts the contents\r
-                       // force_rich overrides plain text mode set by user, important for pasting with execCommand\r
-                       function process(o, force_rich) {\r
-                               var dom = ed.dom, rng;\r
-\r
-                               // Execute pre process handlers\r
-                               t.onPreProcess.dispatch(t, o);\r
-\r
-                               // Create DOM structure\r
-                               o.node = dom.create('div', 0, o.content);\r
-\r
-                               // If pasting inside the same element and the contents is only one block\r
-                               // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element\r
-                               if (tinymce.isGecko) {\r
-                                       rng = ed.selection.getRng(true);\r
-                                       if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {\r
-                                               // Is only one block node and it doesn't contain word stuff\r
-                                               if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1)\r
-                                                       dom.remove(o.node.firstChild, true);\r
-                                       }\r
-                               }\r
-\r
-                               // Execute post process handlers\r
-                               t.onPostProcess.dispatch(t, o);\r
-\r
-                               // Serialize content\r
-                               o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});\r
-\r
-                               // Plain text option active?\r
-                               if ((!force_rich) && (ed.pasteAsPlainText)) {\r
-                                       t._insertPlainText(ed, dom, o.content);\r
-\r
-                                       if (!getParam(ed, "paste_text_sticky")) {\r
-                                               ed.pasteAsPlainText = false;\r
-                                               ed.controlManager.setActive("pastetext", false);\r
-                                       }\r
-                               } else {\r
-                                       t._insert(o.content);\r
-                               }\r
-                       }\r
-\r
-                       // Add command for external usage\r
-                       ed.addCommand('mceInsertClipboardContent', function(u, o) {\r
-                               process(o, true);\r
-                       });\r
-\r
-                       if (!getParam(ed, "paste_text_use_dialog")) {\r
-                               ed.addCommand('mcePasteText', function(u, v) {\r
-                                       var cookie = tinymce.util.Cookie;\r
-\r
-                                       ed.pasteAsPlainText = !ed.pasteAsPlainText;\r
-                                       ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);\r
-\r
-                                       if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {\r
-                                               if (getParam(ed, "paste_text_sticky")) {\r
-                                                       ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
-                                               } else {\r
-                                                       ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
-                                               }\r
-\r
-                                               if (!getParam(ed, "paste_text_notifyalways")) {\r
-                                                       cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))\r
-                                               }\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});\r
-                       ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});\r
-\r
-                       // This function grabs the contents from the clipboard by adding a\r
-                       // hidden div and placing the caret inside it and after the browser paste\r
-                       // is done it grabs that contents and processes that\r
-                       function grabContent(e) {\r
-                               var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;\r
-\r
-                               // Check if browser supports direct plaintext access\r
-                               if (e.clipboardData || dom.doc.dataTransfer) {\r
-                                       textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');\r
-\r
-                                       if (ed.pasteAsPlainText) {\r
-                                               e.preventDefault();\r
-                                               process({content : textContent.replace(/\r?\n/g, '<br />')});\r
-                                               return;\r
-                                       }\r
-                               }\r
-\r
-                               if (dom.get('_mcePaste'))\r
-                                       return;\r
-\r
-                               // Create container to paste into\r
-                               n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF');\r
-\r
-                               // If contentEditable mode we need to find out the position of the closest element\r
-                               if (body != ed.getDoc().body)\r
-                                       posY = dom.getPos(ed.selection.getStart(), body).y;\r
-                               else\r
-                                       posY = body.scrollTop + dom.getViewPort(ed.getWin()).y;\r
-\r
-                               // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles\r
-                               // If also needs to be in view on IE or the paste would fail\r
-                               dom.setStyles(n, {\r
-                                       position : 'absolute',\r
-                                       left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div\r
-                                       top : posY - 25,\r
-                                       width : 1,\r
-                                       height : 1,\r
-                                       overflow : 'hidden'\r
-                               });\r
-\r
-                               if (tinymce.isIE) {\r
-                                       // Store away the old range\r
-                                       oldRng = sel.getRng();\r
-\r
-                                       // Select the container\r
-                                       rng = dom.doc.body.createTextRange();\r
-                                       rng.moveToElementText(n);\r
-                                       rng.execCommand('Paste');\r
-\r
-                                       // Remove container\r
-                                       dom.remove(n);\r
-\r
-                                       // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due\r
-                                       // to IE security settings so we pass the junk though better than nothing right\r
-                                       if (n.innerHTML === '\uFEFF\uFEFF') {\r
-                                               ed.execCommand('mcePasteWord');\r
-                                               e.preventDefault();\r
-                                               return;\r
-                                       }\r
-\r
-                                       // Restore the old range and clear the contents before pasting\r
-                                       sel.setRng(oldRng);\r
-                                       sel.setContent('');\r
-\r
-                                       // For some odd reason we need to detach the the mceInsertContent call from the paste event\r
-                                       // It's like IE has a reference to the parent element that you paste in and the selection gets messed up\r
-                                       // when it tries to restore the selection\r
-                                       setTimeout(function() {\r
-                                               // Process contents\r
-                                               process({content : n.innerHTML});\r
-                                       }, 0);\r
-\r
-                                       // Block the real paste event\r
-                                       return tinymce.dom.Event.cancel(e);\r
-                               } else {\r
-                                       function block(e) {\r
-                                               e.preventDefault();\r
-                                       };\r
-\r
-                                       // Block mousedown and click to prevent selection change\r
-                                       dom.bind(ed.getDoc(), 'mousedown', block);\r
-                                       dom.bind(ed.getDoc(), 'keydown', block);\r
-\r
-                                       or = ed.selection.getRng();\r
-\r
-                                       // Move select contents inside DIV\r
-                                       n = n.firstChild;\r
-                                       rng = ed.getDoc().createRange();\r
-                                       rng.setStart(n, 0);\r
-                                       rng.setEnd(n, 2);\r
-                                       sel.setRng(rng);\r
-\r
-                                       // Wait a while and grab the pasted contents\r
-                                       window.setTimeout(function() {\r
-                                               var h = '', nl;\r
-\r
-                                               // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit\r
-                                               if (!dom.select('div.mcePaste > div.mcePaste').length) {\r
-                                                       nl = dom.select('div.mcePaste');\r
-\r
-                                                       // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string\r
-                                                       each(nl, function(n) {\r
-                                                               var child = n.firstChild;\r
-\r
-                                                               // WebKit inserts a DIV container with lots of odd styles\r
-                                                               if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {\r
-                                                                       dom.remove(child, 1);\r
-                                                               }\r
-\r
-                                                               // Remove apply style spans\r
-                                                               each(dom.select('span.Apple-style-span', n), function(n) {\r
-                                                                       dom.remove(n, 1);\r
-                                                               });\r
-\r
-                                                               // Remove bogus br elements\r
-                                                               each(dom.select('br[data-mce-bogus]', n), function(n) {\r
-                                                                       dom.remove(n);\r
-                                                               });\r
-\r
-                                                               // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV\r
-                                                               if (n.parentNode.className != 'mcePaste')\r
-                                                                       h += n.innerHTML;\r
-                                                       });\r
-                                               } else {\r
-                                                       // Found WebKit weirdness so force the content into plain text mode\r
-                                                       h = '<pre>' + dom.encode(textContent).replace(/\r?\n/g, '<br />') + '</pre>';\r
-                                               }\r
-\r
-                                               // Remove the nodes\r
-                                               each(dom.select('div.mcePaste'), function(n) {\r
-                                                       dom.remove(n);\r
-                                               });\r
-\r
-                                               // Restore the old selection\r
-                                               if (or)\r
-                                                       sel.setRng(or);\r
-\r
-                                               process({content : h});\r
-\r
-                                               // Unblock events ones we got the contents\r
-                                               dom.unbind(ed.getDoc(), 'mousedown', block);\r
-                                               dom.unbind(ed.getDoc(), 'keydown', block);\r
-                                       }, 0);\r
-                               }\r
-                       }\r
-\r
-                       // Check if we should use the new auto process method                   \r
-                       if (getParam(ed, "paste_auto_cleanup_on_paste")) {\r
-                               // Is it's Opera or older FF use key handler\r
-                               if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {\r
-                                       ed.onKeyDown.addToTop(function(ed, e) {\r
-                                               if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))\r
-                                                       grabContent(e);\r
-                                       });\r
-                               } else {\r
-                                       // Grab contents on paste event on Gecko and WebKit\r
-                                       ed.onPaste.addToTop(function(ed, e) {\r
-                                               return grabContent(e);\r
-                                       });\r
-                               }\r
-                       }\r
-\r
-                       ed.onInit.add(function() {\r
-                               ed.controlManager.setActive("pastetext", ed.pasteAsPlainText);\r
-\r
-                               // Block all drag/drop events\r
-                               if (getParam(ed, "paste_block_drop")) {\r
-                                       ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {\r
-                                               e.preventDefault();\r
-                                               e.stopPropagation();\r
-\r
-                                               return false;\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       // Add legacy support\r
-                       t._legacySupport();\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Paste text/word',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               _preProcess : function(pl, o) {\r
-                       var ed = this.editor,\r
-                               h = o.content,\r
-                               grep = tinymce.grep,\r
-                               explode = tinymce.explode,\r
-                               trim = tinymce.trim,\r
-                               len, stripClass;\r
-\r
-                       //console.log('Before preprocess:' + o.content);\r
-\r
-                       function process(items) {\r
-                               each(items, function(v) {\r
-                                       // Remove or replace\r
-                                       if (v.constructor == RegExp)\r
-                                               h = h.replace(v, '');\r
-                                       else\r
-                                               h = h.replace(v[0], v[1]);\r
-                               });\r
-                       }\r
-                       \r
-                       if (ed.settings.paste_enable_default_filters == false) {\r
-                               return;\r
-                       }\r
-\r
-                       // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser\r
-                       if (tinymce.isIE && document.documentMode >= 9) {\r
-                               // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser\r
-                               process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);\r
-\r
-                               // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break\r
-                               process([\r
-                                       [/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact\r
-                                       [/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s\r
-                                       [/<BR><BR>/g, '<br>'], // Replace back the double brs but into a single BR\r
-                               ]);\r
-                       }\r
-\r
-                       // Detect Word content and process it more aggressive\r
-                       if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {\r
-                               o.wordContent = true;                   // Mark the pasted contents as word specific content\r
-                               //console.log('Word contents detected.');\r
-\r
-                               // Process away some basic content\r
-                               process([\r
-                                       /^\s*(&nbsp;)+/gi,                              // &nbsp; entities at the start of contents\r
-                                       /(&nbsp;|<br[^>]*>)+\s*$/gi             // &nbsp; entities at the end of contents\r
-                               ]);\r
-\r
-                               if (getParam(ed, "paste_convert_headers_to_strong")) {\r
-                                       h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");\r
-                               }\r
-\r
-                               if (getParam(ed, "paste_convert_middot_lists")) {\r
-                                       process([\r
-                                               [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'],                                    // Convert supportLists to a list item marker\r
-                                               [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'],             // Convert mso-list and symbol spans to item markers\r
-                                               [/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__']                             // Convert mso-list and symbol paragraphs to item markers (FF)\r
-                                       ]);\r
-                               }\r
-\r
-                               process([\r
-                                       // Word comments like conditional comments etc\r
-                                       /<!--[\s\S]+?-->/gi,\r
-\r
-                                       // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags\r
-                                       /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,\r
-\r
-                                       // Convert <s> into <strike> for line-though\r
-                                       [/<(\/?)s>/gi, "<$1strike>"],\r
-\r
-                                       // Replace nsbp entites to char since it's easier to handle\r
-                                       [/&nbsp;/gi, "\u00a0"]\r
-                               ]);\r
-\r
-                               // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.\r
-                               // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.\r
-                               do {\r
-                                       len = h.length;\r
-                                       h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
-                               } while (len != h.length);\r
-\r
-                               // Remove all spans if no styles is to be retained\r
-                               if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {\r
-                                       h = h.replace(/<\/?span[^>]*>/gi, "");\r
-                               } else {\r
-                                       // We're keeping styles, so at least clean them up.\r
-                                       // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx\r
-\r
-                                       process([\r
-                                               // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length\r
-                                               [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,\r
-                                                       function(str, spaces) {\r
-                                                               return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";\r
-                                                       }\r
-                                               ],\r
-\r
-                                               // Examine all styles: delete junk, transform some, and keep the rest\r
-                                               [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,\r
-                                                       function(str, tag, style) {\r
-                                                               var n = [],\r
-                                                                       i = 0,\r
-                                                                       s = explode(trim(style).replace(/&quot;/gi, "'"), ";");\r
-\r
-                                                               // Examine each style definition within the tag's style attribute\r
-                                                               each(s, function(v) {\r
-                                                                       var name, value,\r
-                                                                               parts = explode(v, ":");\r
-\r
-                                                                       function ensureUnits(v) {\r
-                                                                               return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";\r
-                                                                       }\r
-\r
-                                                                       if (parts.length == 2) {\r
-                                                                               name = parts[0].toLowerCase();\r
-                                                                               value = parts[1].toLowerCase();\r
-\r
-                                                                               // Translate certain MS Office styles into their CSS equivalents\r
-                                                                               switch (name) {\r
-                                                                                       case "mso-padding-alt":\r
-                                                                                       case "mso-padding-top-alt":\r
-                                                                                       case "mso-padding-right-alt":\r
-                                                                                       case "mso-padding-bottom-alt":\r
-                                                                                       case "mso-padding-left-alt":\r
-                                                                                       case "mso-margin-alt":\r
-                                                                                       case "mso-margin-top-alt":\r
-                                                                                       case "mso-margin-right-alt":\r
-                                                                                       case "mso-margin-bottom-alt":\r
-                                                                                       case "mso-margin-left-alt":\r
-                                                                                       case "mso-table-layout-alt":\r
-                                                                                       case "mso-height":\r
-                                                                                       case "mso-width":\r
-                                                                                       case "mso-vertical-align-alt":\r
-                                                                                               n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);\r
-                                                                                               return;\r
-\r
-                                                                                       case "horiz-align":\r
-                                                                                               n[i++] = "text-align:" + value;\r
-                                                                                               return;\r
-\r
-                                                                                       case "vert-align":\r
-                                                                                               n[i++] = "vertical-align:" + value;\r
-                                                                                               return;\r
-\r
-                                                                                       case "font-color":\r
-                                                                                       case "mso-foreground":\r
-                                                                                               n[i++] = "color:" + value;\r
-                                                                                               return;\r
-\r
-                                                                                       case "mso-background":\r
-                                                                                       case "mso-highlight":\r
-                                                                                               n[i++] = "background:" + value;\r
-                                                                                               return;\r
-\r
-                                                                                       case "mso-default-height":\r
-                                                                                               n[i++] = "min-height:" + ensureUnits(value);\r
-                                                                                               return;\r
-\r
-                                                                                       case "mso-default-width":\r
-                                                                                               n[i++] = "min-width:" + ensureUnits(value);\r
-                                                                                               return;\r
-\r
-                                                                                       case "mso-padding-between-alt":\r
-                                                                                               n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);\r
-                                                                                               return;\r
-\r
-                                                                                       case "text-line-through":\r
-                                                                                               if ((value == "single") || (value == "double")) {\r
-                                                                                                       n[i++] = "text-decoration:line-through";\r
-                                                                                               }\r
-                                                                                               return;\r
-\r
-                                                                                       case "mso-zero-height":\r
-                                                                                               if (value == "yes") {\r
-                                                                                                       n[i++] = "display:none";\r
-                                                                                               }\r
-                                                                                               return;\r
-                                                                               }\r
-\r
-                                                                               // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name\r
-                                                                               if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {\r
-                                                                                       return;\r
-                                                                               }\r
-\r
-                                                                               // If it reached this point, it must be a valid CSS style\r
-                                                                               n[i++] = name + ":" + parts[1];         // Lower-case name, but keep value case\r
-                                                                       }\r
-                                                               });\r
-\r
-                                                               // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.\r
-                                                               if (i > 0) {\r
-                                                                       return tag + ' style="' + n.join(';') + '"';\r
-                                                               } else {\r
-                                                                       return tag;\r
-                                                               }\r
-                                                       }\r
-                                               ]\r
-                                       ]);\r
-                               }\r
-                       }\r
-\r
-                       // Replace headers with <strong>\r
-                       if (getParam(ed, "paste_convert_headers_to_strong")) {\r
-                               process([\r
-                                       [/<h[1-6][^>]*>/gi, "<p><strong>"],\r
-                                       [/<\/h[1-6][^>]*>/gi, "</strong></p>"]\r
-                               ]);\r
-                       }\r
-\r
-                       process([\r
-                               // Copy paste from Java like Open Office will produce this junk on FF\r
-                               [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']\r
-                       ]);\r
-\r
-                       // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").\r
-                       // Note:-  paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.\r
-                       stripClass = getParam(ed, "paste_strip_class_attributes");\r
-\r
-                       if (stripClass !== "none") {\r
-                               function removeClasses(match, g1) {\r
-                                               if (stripClass === "all")\r
-                                                       return '';\r
-\r
-                                               var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),\r
-                                                       function(v) {\r
-                                                               return (/^(?!mso)/i.test(v));\r
-                                                       }\r
-                                               );\r
-\r
-                                               return cls.length ? ' class="' + cls.join(" ") + '"' : '';\r
-                               };\r
-\r
-                               h = h.replace(/ class="([^"]+)"/gi, removeClasses);\r
-                               h = h.replace(/ class=([\-\w]+)/gi, removeClasses);\r
-                       }\r
-\r
-                       // Remove spans option\r
-                       if (getParam(ed, "paste_remove_spans")) {\r
-                               h = h.replace(/<\/?span[^>]*>/gi, "");\r
-                       }\r
-\r
-                       //console.log('After preprocess:' + h);\r
-\r
-                       o.content = h;\r
-               },\r
-\r
-               /**\r
-                * Various post process items.\r
-                */\r
-               _postProcess : function(pl, o) {\r
-                       var t = this, ed = t.editor, dom = ed.dom, styleProps;\r
-\r
-                       if (ed.settings.paste_enable_default_filters == false) {\r
-                               return;\r
-                       }\r
-                       \r
-                       if (o.wordContent) {\r
-                               // Remove named anchors or TOC links\r
-                               each(dom.select('a', o.node), function(a) {\r
-                                       if (!a.href || a.href.indexOf('#_Toc') != -1)\r
-                                               dom.remove(a, 1);\r
-                               });\r
-\r
-                               if (getParam(ed, "paste_convert_middot_lists")) {\r
-                                       t._convertLists(pl, o);\r
-                               }\r
-\r
-                               // Process styles\r
-                               styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties\r
-\r
-                               // Process only if a string was specified and not equal to "all" or "*"\r
-                               if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {\r
-                                       styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));\r
-\r
-                                       // Retains some style properties\r
-                                       each(dom.select('*', o.node), function(el) {\r
-                                               var newStyle = {}, npc = 0, i, sp, sv;\r
-\r
-                                               // Store a subset of the existing styles\r
-                                               if (styleProps) {\r
-                                                       for (i = 0; i < styleProps.length; i++) {\r
-                                                               sp = styleProps[i];\r
-                                                               sv = dom.getStyle(el, sp);\r
-\r
-                                                               if (sv) {\r
-                                                                       newStyle[sp] = sv;\r
-                                                                       npc++;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Remove all of the existing styles\r
-                                               dom.setAttrib(el, 'style', '');\r
-\r
-                                               if (styleProps && npc > 0)\r
-                                                       dom.setStyles(el, newStyle); // Add back the stored subset of styles\r
-                                               else // Remove empty span tags that do not have class attributes\r
-                                                       if (el.nodeName == 'SPAN' && !el.className)\r
-                                                               dom.remove(el, true);\r
-                                       });\r
-                               }\r
-                       }\r
-\r
-                       // Remove all style information or only specifically on WebKit to avoid the style bug on that browser\r
-                       if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {\r
-                               each(dom.select('*[style]', o.node), function(el) {\r
-                                       el.removeAttribute('style');\r
-                                       el.removeAttribute('data-mce-style');\r
-                               });\r
-                       } else {\r
-                               if (tinymce.isWebKit) {\r
-                                       // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />\r
-                                       // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles\r
-                                       each(dom.select('*', o.node), function(el) {\r
-                                               el.removeAttribute('data-mce-style');\r
-                                       });\r
-                               }\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.\r
-                */\r
-               _convertLists : function(pl, o) {\r
-                       var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;\r
-\r
-                       // Convert middot lists into real semantic lists\r
-                       each(dom.select('p', o.node), function(p) {\r
-                               var sib, val = '', type, html, idx, parents;\r
-\r
-                               // Get text node value at beginning of paragraph\r
-                               for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)\r
-                                       val += sib.nodeValue;\r
-\r
-                               val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');\r
-\r
-                               // Detect unordered lists look for bullets\r
-                               if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))\r
-                                       type = 'ul';\r
-\r
-                               // Detect ordered lists 1., a. or ixv.\r
-                               if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))\r
-                                       type = 'ol';\r
-\r
-                               // Check if node value matches the list pattern: o&nbsp;&nbsp;\r
-                               if (type) {\r
-                                       margin = parseFloat(p.style.marginLeft || 0);\r
-\r
-                                       if (margin > lastMargin)\r
-                                               levels.push(margin);\r
-\r
-                                       if (!listElm || type != lastType) {\r
-                                               listElm = dom.create(type);\r
-                                               dom.insertAfter(listElm, p);\r
-                                       } else {\r
-                                               // Nested list element\r
-                                               if (margin > lastMargin) {\r
-                                                       listElm = li.appendChild(dom.create(type));\r
-                                               } else if (margin < lastMargin) {\r
-                                                       // Find parent level based on margin value\r
-                                                       idx = tinymce.inArray(levels, margin);\r
-                                                       parents = dom.getParents(listElm.parentNode, type);\r
-                                                       listElm = parents[parents.length - 1 - idx] || listElm;\r
-                                               }\r
-                                       }\r
-\r
-                                       // Remove middot or number spans if they exists\r
-                                       each(dom.select('span', p), function(span) {\r
-                                               var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');\r
-\r
-                                               // Remove span with the middot or the number\r
-                                               if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))\r
-                                                       dom.remove(span);\r
-                                               else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))\r
-                                                       dom.remove(span);\r
-                                       });\r
-\r
-                                       html = p.innerHTML;\r
-\r
-                                       // Remove middot/list items\r
-                                       if (type == 'ul')\r
-                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');\r
-                                       else\r
-                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');\r
-\r
-                                       // Create li and add paragraph data into the new li\r
-                                       li = listElm.appendChild(dom.create('li', 0, html));\r
-                                       dom.remove(p);\r
-\r
-                                       lastMargin = margin;\r
-                                       lastType = type;\r
-                               } else\r
-                                       listElm = lastMargin = 0; // End list element\r
-                       });\r
-\r
-                       // Remove any left over makers\r
-                       html = o.node.innerHTML;\r
-                       if (html.indexOf('__MCE_ITEM__') != -1)\r
-                               o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');\r
-               },\r
-\r
-               /**\r
-                * Inserts the specified contents at the caret position.\r
-                */\r
-               _insert : function(h, skip_undo) {\r
-                       var ed = this.editor, r = ed.selection.getRng();\r
-\r
-                       // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.\r
-                       if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)\r
-                               ed.getDoc().execCommand('Delete', false, null);\r
-\r
-                       ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});\r
-               },\r
-\r
-               /**\r
-                * Instead of the old plain text method which tried to re-create a paste operation, the\r
-                * new approach adds a plain text mode toggle switch that changes the behavior of paste.\r
-                * This function is passed the same input that the regular paste plugin produces.\r
-                * It performs additional scrubbing and produces (and inserts) the plain text.\r
-                * This approach leverages all of the great existing functionality in the paste\r
-                * plugin, and requires minimal changes to add the new functionality.\r
-                * Speednet - June 2009\r
-                */\r
-               _insertPlainText : function(ed, dom, h) {\r
-                       var i, len, pos, rpos, node, breakElms, before, after,\r
-                               w = ed.getWin(),\r
-                               d = ed.getDoc(),\r
-                               sel = ed.selection,\r
-                               is = tinymce.is,\r
-                               inArray = tinymce.inArray,\r
-                               linebr = getParam(ed, "paste_text_linebreaktype"),\r
-                               rl = getParam(ed, "paste_text_replacements");\r
-\r
-                       function process(items) {\r
-                               each(items, function(v) {\r
-                                       if (v.constructor == RegExp)\r
-                                               h = h.replace(v, "");\r
-                                       else\r
-                                               h = h.replace(v[0], v[1]);\r
-                               });\r
-                       };\r
-\r
-                       if ((typeof(h) === "string") && (h.length > 0)) {\r
-                               // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line\r
-                               if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {\r
-                                       process([\r
-                                               /[\n\r]+/g\r
-                                       ]);\r
-                               } else {\r
-                                       // Otherwise just get rid of carriage returns (only need linefeeds)\r
-                                       process([\r
-                                               /\r+/g\r
-                                       ]);\r
-                               }\r
-\r
-                               process([\r
-                                       [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"],               // Block tags get a blank line after them\r
-                                       [/<br[^>]*>|<\/tr>/gi, "\n"],                           // Single linebreak for <br /> tags and table rows\r
-                                       [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"],           // Table cells get tabs betweem them\r
-                                       /<[a-z!\/?][^>]*>/gi,                                           // Delete all remaining tags\r
-                                       [/&nbsp;/gi, " "],                                                      // Convert non-break spaces to regular spaces (remember, *plain text*)\r
-                                       [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],    // Cool little RegExp deletes whitespace around linebreak chars.\r
-                                       [/\n{3,}/g, "\n\n"],                                                    // Max. 2 consecutive linebreaks\r
-                                       /^\s+|\s+$/g                                                                    // Trim the front & back\r
-                               ]);\r
-\r
-                               h = dom.decode(tinymce.html.Entities.encodeRaw(h));\r
-\r
-                               // Delete any highlighted text before pasting\r
-                               if (!sel.isCollapsed()) {\r
-                                       d.execCommand("Delete", false, null);\r
-                               }\r
-\r
-                               // Perform default or custom replacements\r
-                               if (is(rl, "array") || (is(rl, "array"))) {\r
-                                       process(rl);\r
-                               }\r
-                               else if (is(rl, "string")) {\r
-                                       process(new RegExp(rl, "gi"));\r
-                               }\r
-\r
-                               // Treat paragraphs as specified in the config\r
-                               if (linebr == "none") {\r
-                                       process([\r
-                                               [/\n+/g, " "]\r
-                                       ]);\r
-                               }\r
-                               else if (linebr == "br") {\r
-                                       process([\r
-                                               [/\n/g, "<br />"]\r
-                                       ]);\r
-                               }\r
-                               else {\r
-                                       process([\r
-                                               /^\s+|\s+$/g,\r
-                                               [/\n\n/g, "</p><p>"],\r
-                                               [/\n/g, "<br />"]\r
-                                       ]);\r
-                               }\r
-\r
-                               // This next piece of code handles the situation where we're pasting more than one paragraph of plain\r
-                               // text, and we are pasting the content into the middle of a block node in the editor.  The block\r
-                               // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).\r
-                               // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the\r
-                               // pasted text is prepended to "Para B".  Any other paragraphs of pasted text are placed between\r
-                               // "Para A" and "Para B".  This code solves a host of problems with the original plain text plugin and\r
-                               // now handles styles correctly.  (Pasting plain text into a styled paragraph is supposed to make the\r
-                               // plain text take the same style as the existing paragraph.)\r
-                               if ((pos = h.indexOf("</p><p>")) != -1) {\r
-                                       rpos = h.lastIndexOf("</p><p>");\r
-                                       node = sel.getNode(); \r
-                                       breakElms = [];         // Get list of elements to break \r
-\r
-                                       do {\r
-                                               if (node.nodeType == 1) {\r
-                                                       // Don't break tables and break at body\r
-                                                       if (node.nodeName == "TD" || node.nodeName == "BODY") {\r
-                                                               break;\r
-                                                       }\r
-\r
-                                                       breakElms[breakElms.length] = node;\r
-                                               }\r
-                                       } while (node = node.parentNode);\r
-\r
-                                       // Are we in the middle of a block node?\r
-                                       if (breakElms.length > 0) {\r
-                                               before = h.substring(0, pos);\r
-                                               after = "";\r
-\r
-                                               for (i=0, len=breakElms.length; i<len; i++) {\r
-                                                       before += "</" + breakElms[i].nodeName.toLowerCase() + ">";\r
-                                                       after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";\r
-                                               }\r
-\r
-                                               if (pos == rpos) {\r
-                                                       h = before + after + h.substring(pos+7);\r
-                                               }\r
-                                               else {\r
-                                                       h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // Insert content at the caret, plus add a marker for repositioning the caret\r
-                               ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker">&nbsp;</span>');\r
-\r
-                               // Reposition the caret to the marker, which was placed immediately after the inserted content.\r
-                               // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.\r
-                               // The second part of the code scrolls the content up if the caret is positioned off-screen.\r
-                               // This is only necessary for WebKit browsers, but it doesn't hurt to use for all.\r
-                               window.setTimeout(function() {\r
-                                       var marker = dom.get('_plain_text_marker'),\r
-                                               elm, vp, y, elmHeight;\r
-\r
-                                       sel.select(marker, false);\r
-                                       d.execCommand("Delete", false, null);\r
-                                       marker = null;\r
-\r
-                                       // Get element, position and height\r
-                                       elm = sel.getStart();\r
-                                       vp = dom.getViewPort(w);\r
-                                       y = dom.getPos(elm).y;\r
-                                       elmHeight = elm.clientHeight;\r
-\r
-                                       // Is element within viewport if not then scroll it into view\r
-                                       if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {\r
-                                               d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;\r
-                                       }\r
-                               }, 0);\r
-                       }\r
-               },\r
-\r
-               /**\r
-                * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.\r
-                */\r
-               _legacySupport : function() {\r
-                       var t = this, ed = t.editor;\r
-\r
-                       // Register command(s) for backwards compatibility\r
-                       ed.addCommand("mcePasteWord", function() {\r
-                               ed.windowManager.open({\r
-                                       file: t.url + "/pasteword.htm",\r
-                                       width: parseInt(getParam(ed, "paste_dialog_width")),\r
-                                       height: parseInt(getParam(ed, "paste_dialog_height")),\r
-                                       inline: 1\r
-                               });\r
-                       });\r
-\r
-                       if (getParam(ed, "paste_text_use_dialog")) {\r
-                               ed.addCommand("mcePasteText", function() {\r
-                                       ed.windowManager.open({\r
-                                               file : t.url + "/pastetext.htm",\r
-                                               width: parseInt(getParam(ed, "paste_dialog_width")),\r
-                                               height: parseInt(getParam(ed, "paste_dialog_height")),\r
-                                               inline : 1\r
-                                       });\r
-                               });\r
-                       }\r
-\r
-                       // Register button for backwards compatibility\r
-                       ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/paste/js/pastetext.js b/plugins/TinyMCE/js/plugins/paste/js/pastetext.js
deleted file mode 100644 (file)
index c524f9e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var PasteTextDialog = {\r
-       init : function() {\r
-               this.resize();\r
-       },\r
-\r
-       insert : function() {\r
-               var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;\r
-\r
-               // Convert linebreaks into paragraphs\r
-               if (document.getElementById('linebreaks').checked) {\r
-                       lines = h.split(/\r?\n/);\r
-                       if (lines.length > 1) {\r
-                               h = '';\r
-                               tinymce.each(lines, function(row) {\r
-                                       h += '<p>' + row + '</p>';\r
-                               });\r
-                       }\r
-               }\r
-\r
-               tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       resize : function() {\r
-               var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
-\r
-               el = document.getElementById('content');\r
-\r
-               el.style.width  = (vp.w - 20) + 'px';\r
-               el.style.height = (vp.h - 90) + 'px';\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/paste/js/pasteword.js b/plugins/TinyMCE/js/plugins/paste/js/pasteword.js
deleted file mode 100644 (file)
index a52731c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var PasteWordDialog = {\r
-       init : function() {\r
-               var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';\r
-\r
-               // Create iframe\r
-               el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';\r
-               ifr = document.getElementById('iframe');\r
-               doc = ifr.contentWindow.document;\r
-\r
-               // Force absolute CSS urls\r
-               css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];\r
-               css = css.concat(tinymce.explode(ed.settings.content_css) || []);\r
-               tinymce.each(css, function(u) {\r
-                       cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';\r
-               });\r
-\r
-               // Write content into iframe\r
-               doc.open();\r
-               doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');\r
-               doc.close();\r
-\r
-               doc.designMode = 'on';\r
-               this.resize();\r
-\r
-               window.setTimeout(function() {\r
-                       ifr.contentWindow.focus();\r
-               }, 10);\r
-       },\r
-\r
-       insert : function() {\r
-               var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;\r
-\r
-               tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       resize : function() {\r
-               var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
-\r
-               el = document.getElementById('iframe');\r
-\r
-               if (el) {\r
-                       el.style.width  = (vp.w - 20) + 'px';\r
-                       el.style.height = (vp.h - 90) + 'px';\r
-               }\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js
deleted file mode 100644 (file)
index eeac778..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-tinyMCE.addI18n('en.paste_dlg',{\r
-text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
-text_linebreaks:"Keep linebreaks",\r
-word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/pastetext.htm b/plugins/TinyMCE/js/plugins/paste/pastetext.htm
deleted file mode 100644 (file)
index b655945..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#paste.paste_text_desc}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/pastetext.js"></script>\r
-</head>\r
-<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">\r
-       <form name="source" onsubmit="return PasteTextDialog.insert();" action="#">\r
-               <div style="float: left" class="title">{#paste.paste_text_desc}</div>\r
-\r
-               <div style="float: right">\r
-                       <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>\r
-               </div>\r
-\r
-               <br style="clear: both" />\r
-\r
-               <div>{#paste_dlg.text_title}</div>\r
-\r
-               <textarea id="content" name="content" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" name="insert" value="{#insert}" id="insert" />\r
-                       <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
-               </div>\r
-       </form>\r
-</body> \r
-</html>
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/pasteword.htm b/plugins/TinyMCE/js/plugins/paste/pasteword.htm
deleted file mode 100644 (file)
index 0f6bb41..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#paste.paste_word_desc}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/pasteword.js"></script>\r
-</head>\r
-<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">\r
-       <form name="source" onsubmit="return PasteWordDialog.insert();" action="#">\r
-               <div class="title">{#paste.paste_word_desc}</div>\r
-\r
-               <div>{#paste_dlg.word_title}</div>\r
-\r
-               <div id="iframecontainer"></div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/preview/editor_plugin.js b/plugins/TinyMCE/js/plugins/preview/editor_plugin.js
deleted file mode 100644 (file)
index 507909c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js
deleted file mode 100644 (file)
index 80f00f0..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
-       tinymce.create('tinymce.plugins.Preview', {
-               init : function(ed, url) {
-                       var t = this, css = tinymce.explode(ed.settings.content_css);
-
-                       t.editor = ed;
-
-                       // Force absolute CSS urls      
-                       tinymce.each(css, function(u, k) {
-                               css[k] = ed.documentBaseURI.toAbsolute(u);
-                       });
-
-                       ed.addCommand('mcePreview', function() {
-                               ed.windowManager.open({
-                                       file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"),
-                                       width : parseInt(ed.getParam("plugin_preview_width", "550")),
-                                       height : parseInt(ed.getParam("plugin_preview_height", "600")),
-                                       resizable : "yes",
-                                       scrollbars : "yes",
-                                       popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
-                                       inline : ed.getParam("plugin_preview_inline", 1)
-                               }, {
-                                       base : ed.documentBaseURI.getURI()
-                               });
-                       });
-
-                       ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'});
-               },
-
-               getInfo : function() {
-                       return {
-                               longname : 'Preview',
-                               author : 'Moxiecode Systems AB',
-                               authorurl : 'http://tinymce.moxiecode.com',
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion
-                       };
-               }
-       });
-
-       // Register plugin
-       tinymce.PluginManager.add('preview', tinymce.plugins.Preview);
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/preview/example.html b/plugins/TinyMCE/js/plugins/preview/example.html
deleted file mode 100644 (file)
index b2c3d90..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<script language="javascript" src="../../tiny_mce_popup.js"></script>\r
-<script type="text/javascript" src="jscripts/embed.js"></script>\r
-<script type="text/javascript">\r
-tinyMCEPopup.onInit.add(function(ed) {\r
-       var dom = tinyMCEPopup.dom;\r
-\r
-       // Load editor content_css\r
-       tinymce.each(ed.settings.content_css.split(','), function(u) {\r
-               dom.loadCSS(ed.documentBaseURI.toAbsolute(u));\r
-       });\r
-\r
-       // Place contents inside div container\r
-       dom.setHTML('content', ed.getContent());\r
-});\r
-</script>\r
-<title>Example of a custom preview page</title>\r
-</head>\r
-<body>\r
-\r
-Editor contents: <br />\r
-<div id="content">\r
-<!-- Gets filled with editor contents -->\r
-</div>\r
-\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/preview/jscripts/embed.js b/plugins/TinyMCE/js/plugins/preview/jscripts/embed.js
deleted file mode 100644 (file)
index f8dc810..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/**\r
- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
- */\r
-\r
-function writeFlash(p) {\r
-       writeEmbed(\r
-               'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
-               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
-               'application/x-shockwave-flash',\r
-               p\r
-       );\r
-}\r
-\r
-function writeShockWave(p) {\r
-       writeEmbed(\r
-       '166B1BCA-3F9C-11CF-8075-444553540000',\r
-       'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
-       'application/x-director',\r
-               p\r
-       );\r
-}\r
-\r
-function writeQuickTime(p) {\r
-       writeEmbed(\r
-               '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
-               'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
-               'video/quicktime',\r
-               p\r
-       );\r
-}\r
-\r
-function writeRealMedia(p) {\r
-       writeEmbed(\r
-               'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
-               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
-               'audio/x-pn-realaudio-plugin',\r
-               p\r
-       );\r
-}\r
-\r
-function writeWindowsMedia(p) {\r
-       p.url = p.src;\r
-       writeEmbed(\r
-               '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
-               'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
-               'application/x-mplayer2',\r
-               p\r
-       );\r
-}\r
-\r
-function writeEmbed(cls, cb, mt, p) {\r
-       var h = '', n;\r
-\r
-       h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
-       h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
-       h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
-       h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
-       h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
-       h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
-       h += '>';\r
-\r
-       for (n in p)\r
-               h += '<param name="' + n + '" value="' + p[n] + '">';\r
-\r
-       h += '<embed type="' + mt + '"';\r
-\r
-       for (n in p)\r
-               h += n + '="' + p[n] + '" ';\r
-\r
-       h += '></embed></object>';\r
-\r
-       document.write(h);\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/preview/preview.html b/plugins/TinyMCE/js/plugins/preview/preview.html
deleted file mode 100644 (file)
index 67e7b14..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-<script type="text/javascript" src="jscripts/embed.js"></script>\r
-<script type="text/javascript"><!--\r
-document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');\r
-// -->\r
-</script>\r
-<title>{#preview.preview_desc}</title>\r
-</head>\r
-<body id="content">\r
-<script type="text/javascript">\r
-       document.write(tinyMCEPopup.editor.getContent());\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/print/editor_plugin.js b/plugins/TinyMCE/js/plugins/print/editor_plugin.js
deleted file mode 100644 (file)
index b5b3a55..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/print/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/print/editor_plugin_src.js
deleted file mode 100644 (file)
index 3933fe6..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.Print', {\r
-               init : function(ed, url) {\r
-                       ed.addCommand('mcePrint', function() {\r
-                               ed.getWin().print();\r
-                       });\r
-\r
-                       ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'});\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Print',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('print', tinymce.plugins.Print);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/save/editor_plugin.js b/plugins/TinyMCE/js/plugins/save/editor_plugin.js
deleted file mode 100644 (file)
index 8e93996..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/save/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/save/editor_plugin_src.js
deleted file mode 100644 (file)
index f5a3de8..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.Save', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceSave', t._save, t);\r
-                       ed.addCommand('mceCancel', t._cancel, t);\r
-\r
-                       // Register buttons\r
-                       ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'});\r
-                       ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});\r
-\r
-                       ed.onNodeChange.add(t._nodeChange, t);\r
-                       ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave');\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Save',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _nodeChange : function(ed, cm, n) {\r
-                       var ed = this.editor;\r
-\r
-                       if (ed.getParam('save_enablewhendirty')) {\r
-                               cm.setDisabled('save', !ed.isDirty());\r
-                               cm.setDisabled('cancel', !ed.isDirty());\r
-                       }\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _save : function() {\r
-                       var ed = this.editor, formObj, os, i, elementId;\r
-\r
-                       formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');\r
-\r
-                       if (ed.getParam("save_enablewhendirty") && !ed.isDirty())\r
-                               return;\r
-\r
-                       tinyMCE.triggerSave();\r
-\r
-                       // Use callback instead\r
-                       if (os = ed.getParam("save_onsavecallback")) {\r
-                               if (ed.execCallback('save_onsavecallback', ed)) {\r
-                                       ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));\r
-                                       ed.nodeChanged();\r
-                               }\r
-\r
-                               return;\r
-                       }\r
-\r
-                       if (formObj) {\r
-                               ed.isNotDirty = true;\r
-\r
-                               if (formObj.onsubmit == null || formObj.onsubmit() != false)\r
-                                       formObj.submit();\r
-\r
-                               ed.nodeChanged();\r
-                       } else\r
-                               ed.windowManager.alert("Error: No form element found.");\r
-               },\r
-\r
-               _cancel : function() {\r
-                       var ed = this.editor, os, h = tinymce.trim(ed.startContent);\r
-\r
-                       // Use callback instead\r
-                       if (os = ed.getParam("save_oncancelcallback")) {\r
-                               ed.execCallback('save_oncancelcallback', ed);\r
-                               return;\r
-                       }\r
-\r
-                       ed.setContent(h);\r
-                       ed.undoManager.clear();\r
-                       ed.nodeChanged();\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('save', tinymce.plugins.Save);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css b/plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css
deleted file mode 100644 (file)
index ecdf58c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.panel_wrapper {height:85px;}\r
-.panel_wrapper div.current {height:85px;}\r
-\r
-/* IE */\r
-* html .panel_wrapper {height:100px;}\r
-* html .panel_wrapper div.current {height:100px;}\r
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js b/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js
deleted file mode 100644 (file)
index 165bc12..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js
deleted file mode 100644 (file)
index 4c87e8f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.SearchReplacePlugin', {\r
-               init : function(ed, url) {\r
-                       function open(m) {\r
-                               // Keep IE from writing out the f/r character to the editor\r
-                               // instance while initializing a new dialog. See: #3131190\r
-                               window.focus();\r
-\r
-                               ed.windowManager.open({\r
-                                       file : url + '/searchreplace.htm',\r
-                                       width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),\r
-                                       height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),\r
-                                       inline : 1,\r
-                                       auto_focus : 0\r
-                               }, {\r
-                                       mode : m,\r
-                                       search_string : ed.selection.getContent({format : 'text'}),\r
-                                       plugin_url : url\r
-                               });\r
-                       };\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceSearch', function() {\r
-                               open('search');\r
-                       });\r
-\r
-                       ed.addCommand('mceReplace', function() {\r
-                               open('replace');\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});\r
-                       ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});\r
-\r
-                       ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Search/Replace',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js b/plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js
deleted file mode 100644 (file)
index 80284b9..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var SearchReplaceDialog = {\r
-       init : function(ed) {\r
-               var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");\r
-\r
-               t.switchMode(m);\r
-\r
-               f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");\r
-\r
-               // Focus input field\r
-               f[m + '_panel_searchstring'].focus();\r
-               \r
-               mcTabs.onChange.add(function(tab_id, panel_id) {\r
-                       t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));\r
-               });\r
-       },\r
-\r
-       switchMode : function(m) {\r
-               var f, lm = this.lastMode;\r
-\r
-               if (lm != m) {\r
-                       f = document.forms[0];\r
-\r
-                       if (lm) {\r
-                               f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;\r
-                               f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;\r
-                               f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;\r
-                               f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;\r
-                       }\r
-\r
-                       mcTabs.displayTab(m + '_tab',  m + '_panel');\r
-                       document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";\r
-                       document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";\r
-                       this.lastMode = m;\r
-               }\r
-       },\r
-\r
-       searchNext : function(a) {\r
-               var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;\r
-\r
-               // Get input\r
-               f = document.forms[0];\r
-               s = f[m + '_panel_searchstring'].value;\r
-               b = f[m + '_panel_backwardsu'].checked;\r
-               ca = f[m + '_panel_casesensitivebox'].checked;\r
-               rs = f['replace_panel_replacestring'].value;\r
-\r
-               if (tinymce.isIE) {\r
-                       r = ed.getDoc().selection.createRange();\r
-               }\r
-\r
-               if (s == '')\r
-                       return;\r
-\r
-               function fix() {\r
-                       // Correct Firefox graphics glitches\r
-                       // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? \r
-                       r = se.getRng().cloneRange();\r
-                       ed.getDoc().execCommand('SelectAll', false, null);\r
-                       se.setRng(r);\r
-               };\r
-\r
-               function replace() {\r
-                       ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE\r
-               };\r
-\r
-               // IE flags\r
-               if (ca)\r
-                       fl = fl | 4;\r
-\r
-               switch (a) {\r
-                       case 'all':\r
-                               // Move caret to beginning of text\r
-                               ed.execCommand('SelectAll');\r
-                               ed.selection.collapse(true);\r
-\r
-                               if (tinymce.isIE) {\r
-                                       ed.focus();\r
-                                       r = ed.getDoc().selection.createRange();\r
-\r
-                                       while (r.findText(s, b ? -1 : 1, fl)) {\r
-                                               r.scrollIntoView();\r
-                                               r.select();\r
-                                               replace();\r
-                                               fo = 1;\r
-\r
-                                               if (b) {\r
-                                                       r.moveEnd("character", -(rs.length)); // Otherwise will loop forever\r
-                                               }\r
-                                       }\r
-\r
-                                       tinyMCEPopup.storeSelection();\r
-                               } else {\r
-                                       while (w.find(s, ca, b, false, false, false, false)) {\r
-                                               replace();\r
-                                               fo = 1;\r
-                                       }\r
-                               }\r
-\r
-                               if (fo)\r
-                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));\r
-                               else\r
-                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
-\r
-                               return;\r
-\r
-                       case 'current':\r
-                               if (!ed.selection.isCollapsed())\r
-                                       replace();\r
-\r
-                               break;\r
-               }\r
-\r
-               se.collapse(b);\r
-               r = se.getRng();\r
-\r
-               // Whats the point\r
-               if (!s)\r
-                       return;\r
-\r
-               if (tinymce.isIE) {\r
-                       ed.focus();\r
-                       r = ed.getDoc().selection.createRange();\r
-\r
-                       if (r.findText(s, b ? -1 : 1, fl)) {\r
-                               r.scrollIntoView();\r
-                               r.select();\r
-                       } else\r
-                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
-\r
-                       tinyMCEPopup.storeSelection();\r
-               } else {\r
-                       if (!w.find(s, ca, b, false, false, false, false))\r
-                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
-                       else\r
-                               fix();\r
-               }\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js
deleted file mode 100644 (file)
index 370959a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-tinyMCE.addI18n('en.searchreplace_dlg',{\r
-searchnext_desc:"Find again",\r
-notfound:"The search has been completed. The search string could not be found.",\r
-search_title:"Find",\r
-replace_title:"Find/Replace",\r
-allreplaced:"All occurrences of the search string were replaced.",\r
-findwhat:"Find what",\r
-replacewith:"Replace with",\r
-direction:"Direction",\r
-up:"Up",\r
-down:"Down",\r
-mcase:"Match case",\r
-findnext:"Find next",\r
-replace:"Replace",\r
-replaceall:"Replace all"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm b/plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm
deleted file mode 100644 (file)
index 5a22d8a..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#searchreplace_dlg.replace_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="js/searchreplace.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />\r
-</head>\r
-<body style="display:none;" role="application" aria-labelledby="app_title">\r
-<span id="app_title" style="display:none">{#searchreplace_dlg.replace_title}</span>\r
-<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="search_tab" aria-controls="search_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>\r
-                       <li id="replace_tab" aria-controls="replace_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="search_panel" class="panel">\r
-                       <table role="presentation" border="0" cellspacing="0" cellpadding="2">\r
-                               <tr>\r
-                                       <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
-                                       <td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" aria-required="true" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td colspan="2">\r
-                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">\r
-                                                       <tr role="group" aria-labelledby="search_panel_backwards_label">\r
-                                                               <td><label id="search_panel_backwards_label">{#searchreplace_dlg.direction}</label></td>\r
-                                                               <td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>\r
-                                                               <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
-                                                               <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
-                                                               <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
-                                                       </tr>\r
-                                               </table>\r
-                                       </td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td colspan="2">\r
-                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                       <tr>\r
-                                                               <td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
-                                                               <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
-                                                       </tr>\r
-                                               </table>\r
-                                       </td>\r
-                               </tr>\r
-                       </table>\r
-               </div>\r
-\r
-               <div id="replace_panel" class="panel">\r
-                       <table role="presentation" border="0" cellspacing="0" cellpadding="2">\r
-                               <tr>\r
-                                       <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
-                                       <td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" aria-required="true" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>\r
-                                       <td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" aria-required="true" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td colspan="2">\r
-                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">\r
-                                                       <tr role="group" aria-labelledby="replace_panel_dir_label">\r
-                                                               <td><label id="replace_panel_dir_label">{#searchreplace_dlg.direction}</label></td>\r
-                                                               <td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>\r
-                                                               <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
-                                                               <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
-                                                               <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
-                                                       </tr>\r
-                                               </table>\r
-                                       </td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td colspan="2">\r
-                                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                       <tr>\r
-                                                               <td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
-                                                               <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
-                                                       </tr>\r
-                                               </table>\r
-                                       </td>\r
-                               </tr>\r
-                       </table>\r
-               </div>\r
-\r
-       </div>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />\r
-               <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />\r
-               <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/css/content.css b/plugins/TinyMCE/js/plugins/spellchecker/css/content.css
deleted file mode 100644 (file)
index 24efa02..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js b/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js
deleted file mode 100644 (file)
index 0c42739..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(l){var g=this.editor,f=g.dom,j=g.getDoc(),h=g.selection,i=h.getBookmark(),d=[],k=l.join("|"),m=this._getSeparators(),e=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(g.getBody(),function(o){if(o.nodeType==3){d.push(o)}});c(d,function(t){var r,q,o,s,p=t.nodeValue;if(e.test(p)){p=f.encode(p);q=f.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(e,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(f.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(f.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(f.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(e,'$1<span class="mceItemHiddenSpellWord">$2</span>')}f.replace(q,t)}});h.moveToBookmark(i)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js
deleted file mode 100644 (file)
index ee4df88..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;\r
-\r
-       tinymce.create('tinymce.plugins.SpellcheckerPlugin', {\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Spellchecker',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               init : function(ed, url) {\r
-                       var t = this, cm;\r
-\r
-                       t.url = url;\r
-                       t.editor = ed;\r
-                       t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");\r
-\r
-                       if (t.rpcUrl == '{backend}') {\r
-                               // Sniff if the browser supports native spellchecking (Don't know of a better way)\r
-                               if (tinymce.isIE)\r
-                                       return;\r
-\r
-                               t.hasSupport = true;\r
-\r
-                               // Disable the context menu when spellchecking is active\r
-                               ed.onContextMenu.addToTop(function(ed, e) {\r
-                                       if (t.active)\r
-                                               return false;\r
-                               });\r
-                       }\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceSpellCheck', function() {\r
-                               if (t.rpcUrl == '{backend}') {\r
-                                       // Enable/disable native spellchecker\r
-                                       t.editor.getBody().spellcheck = t.active = !t.active;\r
-                                       return;\r
-                               }\r
-\r
-                               if (!t.active) {\r
-                                       ed.setProgressState(1);\r
-                                       t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {\r
-                                               if (r.length > 0) {\r
-                                                       t.active = 1;\r
-                                                       t._markWords(r);\r
-                                                       ed.setProgressState(0);\r
-                                                       ed.nodeChanged();\r
-                                               } else {\r
-                                                       ed.setProgressState(0);\r
-\r
-                                                       if (ed.getParam('spellchecker_report_no_misspellings', true))\r
-                                                               ed.windowManager.alert('spellchecker.no_mpell');\r
-                                               }\r
-                                       });\r
-                               } else\r
-                                       t._done();\r
-                       });\r
-\r
-                       if (ed.settings.content_css !== false)\r
-                               ed.contentCSS.push(url + '/css/content.css');\r
-\r
-                       ed.onClick.add(t._showMenu, t);\r
-                       ed.onContextMenu.add(t._showMenu, t);\r
-                       ed.onBeforeGetContent.add(function() {\r
-                               if (t.active)\r
-                                       t._removeWords();\r
-                       });\r
-\r
-                       ed.onNodeChange.add(function(ed, cm) {\r
-                               cm.setActive('spellchecker', t.active);\r
-                       });\r
-\r
-                       ed.onSetContent.add(function() {\r
-                               t._done();\r
-                       });\r
-\r
-                       ed.onBeforeGetContent.add(function() {\r
-                               t._done();\r
-                       });\r
-\r
-                       ed.onBeforeExecCommand.add(function(ed, cmd) {\r
-                               if (cmd == 'mceFullScreen')\r
-                                       t._done();\r
-                       });\r
-\r
-                       // Find selected language\r
-                       t.languages = {};\r
-                       each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {\r
-                               if (k.indexOf('+') === 0) {\r
-                                       k = k.substring(1);\r
-                                       t.selectedLang = v;\r
-                               }\r
-\r
-                               t.languages[k] = v;\r
-                       });\r
-               },\r
-\r
-               createControl : function(n, cm) {\r
-                       var t = this, c, ed = t.editor;\r
-\r
-                       if (n == 'spellchecker') {\r
-                               // Use basic button if we use the native spellchecker\r
-                               if (t.rpcUrl == '{backend}') {\r
-                                       // Create simple toggle button if we have native support\r
-                                       if (t.hasSupport)\r
-                                               c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
-\r
-                                       return c;\r
-                               }\r
-\r
-                               c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
-\r
-                               c.onRenderMenu.add(function(c, m) {\r
-                                       m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
-                                       each(t.languages, function(v, k) {\r
-                                               var o = {icon : 1}, mi;\r
-\r
-                                               o.onclick = function() {\r
-                                                       if (v == t.selectedLang) {\r
-                                                               return;\r
-                                                       }\r
-                                                       mi.setSelected(1);\r
-                                                       t.selectedItem.setSelected(0);\r
-                                                       t.selectedItem = mi;\r
-                                                       t.selectedLang = v;\r
-                                               };\r
-\r
-                                               o.title = k;\r
-                                               mi = m.add(o);\r
-                                               mi.setSelected(v == t.selectedLang);\r
-\r
-                                               if (v == t.selectedLang)\r
-                                                       t.selectedItem = mi;\r
-                                       })\r
-                               });\r
-\r
-                               return c;\r
-                       }\r
-               },\r
-\r
-               // Internal functions\r
-\r
-               _walk : function(n, f) {\r
-                       var d = this.editor.getDoc(), w;\r
-\r
-                       if (d.createTreeWalker) {\r
-                               w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
-\r
-                               while ((n = w.nextNode()) != null)\r
-                                       f.call(this, n);\r
-                       } else\r
-                               tinymce.walk(n, f, 'childNodes');\r
-               },\r
-\r
-               _getSeparators : function() {\r
-                       var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');\r
-\r
-                       // Build word separator regexp\r
-                       for (i=0; i<str.length; i++)\r
-                               re += '\\' + str.charAt(i);\r
-\r
-                       return re;\r
-               },\r
-\r
-               _getWords : function() {\r
-                       var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];\r
-\r
-                       // Get area text\r
-                       this._walk(ed.getBody(), function(n) {\r
-                               if (n.nodeType == 3)\r
-                                       tx += n.nodeValue + ' ';\r
-                       });\r
-\r
-                       // split the text up into individual words\r
-                       if (ed.getParam('spellchecker_word_pattern')) {\r
-                               // look for words that match the pattern\r
-                               rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');\r
-                       } else {\r
-                               // Split words by separator\r
-                               tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');\r
-                               tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));\r
-                               rawWords = tx.split(' ');\r
-                       }\r
-\r
-                       // Build word array and remove duplicates\r
-                       each(rawWords, function(v) {\r
-                               if (!lo[v]) {\r
-                                       wl.push(v);\r
-                                       lo[v] = 1;\r
-                               }\r
-                       });\r
-\r
-                       return wl;\r
-               },\r
-\r
-               _removeWords : function(w) {\r
-                       var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();\r
-\r
-                       each(dom.select('span').reverse(), function(n) {\r
-                               if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {\r
-                                       if (!w || dom.decode(n.innerHTML) == w)\r
-                                               dom.remove(n, 1);\r
-                               }\r
-                       });\r
-\r
-                       se.moveToBookmark(b);\r
-               },\r
-\r
-               _markWords : function(wl) {\r
-                       var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, b = se.getBookmark(), nl = [],\r
-                               w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');\r
-\r
-                       // Collect all text nodes\r
-                       this._walk(ed.getBody(), function(n) {\r
-                               if (n.nodeType == 3) {\r
-                                       nl.push(n);\r
-                               }\r
-                       });\r
-\r
-                       // Wrap incorrect words in spans\r
-                       each(nl, function(n) {\r
-                               var node, elem, txt, pos, v = n.nodeValue;\r
-\r
-                               if (rx.test(v)) {\r
-                                       // Encode the content\r
-                                       v = dom.encode(v);\r
-                                       // Create container element\r
-                                       elem = dom.create('span', {'class' : 'mceItemHidden'});\r
-\r
-                                       // Following code fixes IE issues by creating text nodes\r
-                                       // using DOM methods instead of innerHTML.\r
-                                       // Bug #3124: <PRE> elements content is broken after spellchecking.\r
-                                       // Bug #1408: Preceding whitespace characters are removed\r
-                                       // @TODO: I'm not sure that both are still issues on IE9.\r
-                                       if (tinymce.isIE) {\r
-                                               // Enclose mispelled words with temporal tag\r
-                                               v = v.replace(rx, '$1<mcespell>$2</mcespell>');\r
-                                               // Loop over the content finding mispelled words\r
-                                               while ((pos = v.indexOf('<mcespell>')) != -1) {\r
-                                                       // Add text node for the content before the word\r
-                                                       txt = v.substring(0, pos);\r
-                                                       if (txt.length) {\r
-                                                               node = doc.createTextNode(dom.decode(txt));\r
-                                                               elem.appendChild(node);\r
-                                                       }\r
-                                                       v = v.substring(pos+10);\r
-                                                       pos = v.indexOf('</mcespell>');\r
-                                                       txt = v.substring(0, pos);\r
-                                                       v = v.substring(pos+11);\r
-                                                       // Add span element for the word\r
-                                                       elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));\r
-                                               }\r
-                                               // Add text node for the rest of the content\r
-                                               if (v.length) {\r
-                                                       node = doc.createTextNode(dom.decode(v));\r
-                                                       elem.appendChild(node);\r
-                                               }\r
-                                       } else {\r
-                                               // Other browsers preserve whitespace characters on innerHTML usage\r
-                                               elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');\r
-                                       }\r
-\r
-                                       // Finally, replace the node with the container\r
-                                       dom.replace(elem, n);\r
-                               }\r
-                       });\r
-\r
-                       se.moveToBookmark(b);\r
-               },\r
-\r
-               _showMenu : function(ed, e) {\r
-                       var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;\r
-\r
-                       e = 0; // Fixes IE memory leak\r
-\r
-                       if (!m) {\r
-                               m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});\r
-                               t._menu = m;\r
-                       }\r
-\r
-                       if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {\r
-                               m.removeAll();\r
-                               m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
-\r
-                               t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {\r
-                                       var ignoreRpc;\r
-\r
-                                       m.removeAll();\r
-\r
-                                       if (r.length > 0) {\r
-                                               m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
-                                               each(r, function(v) {\r
-                                                       m.add({title : v, onclick : function() {\r
-                                                               dom.replace(ed.getDoc().createTextNode(v), wordSpan);\r
-                                                               t._checkDone();\r
-                                                       }});\r
-                                               });\r
-\r
-                                               m.addSeparator();\r
-                                       } else\r
-                                               m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
-\r
-                                       ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');\r
-                                       m.add({\r
-                                               title : 'spellchecker.ignore_word',\r
-                                               onclick : function() {\r
-                                                       var word = wordSpan.innerHTML;\r
-\r
-                                                       dom.remove(wordSpan, 1);\r
-                                                       t._checkDone();\r
-\r
-                                                       // tell the server if we need to\r
-                                                       if (ignoreRpc) {\r
-                                                               ed.setProgressState(1);\r
-                                                               t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {\r
-                                                                       ed.setProgressState(0);\r
-                                                               });\r
-                                                       }\r
-                                               }\r
-                                       });\r
-\r
-                                       m.add({\r
-                                               title : 'spellchecker.ignore_words',\r
-                                               onclick : function() {\r
-                                                       var word = wordSpan.innerHTML;\r
-\r
-                                                       t._removeWords(dom.decode(word));\r
-                                                       t._checkDone();\r
-\r
-                                                       // tell the server if we need to\r
-                                                       if (ignoreRpc) {\r
-                                                               ed.setProgressState(1);\r
-                                                               t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {\r
-                                                                       ed.setProgressState(0);\r
-                                                               });\r
-                                                       }\r
-                                               }\r
-                                       });\r
-\r
-                                       if (t.editor.getParam("spellchecker_enable_learn_rpc")) {\r
-                                               m.add({\r
-                                                       title : 'spellchecker.learn_word',\r
-                                                       onclick : function() {\r
-                                                               var word = wordSpan.innerHTML;\r
-\r
-                                                               dom.remove(wordSpan, 1);\r
-                                                               t._checkDone();\r
-\r
-                                                               ed.setProgressState(1);\r
-                                                               t._sendRPC('learnWord', [t.selectedLang, word], function(r) {\r
-                                                                       ed.setProgressState(0);\r
-                                                               });\r
-                                                       }\r
-                                               });\r
-                                       }\r
-\r
-                                       m.update();\r
-                               });\r
-\r
-                               p1 = DOM.getPos(ed.getContentAreaContainer());\r
-                               m.settings.offset_x = p1.x;\r
-                               m.settings.offset_y = p1.y;\r
-\r
-                               ed.selection.select(wordSpan);\r
-                               p1 = dom.getPos(wordSpan);\r
-                               m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);\r
-\r
-                               return tinymce.dom.Event.cancel(e);\r
-                       } else\r
-                               m.hideMenu();\r
-               },\r
-\r
-               _checkDone : function() {\r
-                       var t = this, ed = t.editor, dom = ed.dom, o;\r
-\r
-                       each(dom.select('span'), function(n) {\r
-                               if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {\r
-                                       o = true;\r
-                                       return false;\r
-                               }\r
-                       });\r
-\r
-                       if (!o)\r
-                               t._done();\r
-               },\r
-\r
-               _done : function() {\r
-                       var t = this, la = t.active;\r
-\r
-                       if (t.active) {\r
-                               t.active = 0;\r
-                               t._removeWords();\r
-\r
-                               if (t._menu)\r
-                                       t._menu.hideMenu();\r
-\r
-                               if (la)\r
-                                       t.editor.nodeChanged();\r
-                       }\r
-               },\r
-\r
-               _sendRPC : function(m, p, cb) {\r
-                       var t = this;\r
-\r
-                       JSONRequest.sendRPC({\r
-                               url : t.rpcUrl,\r
-                               method : m,\r
-                               params : p,\r
-                               success : cb,\r
-                               error : function(e, x) {\r
-                                       t.editor.setProgressState(0);\r
-                                       t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif b/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif
deleted file mode 100644 (file)
index 7d0a4db..0000000
Binary files a/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/plugins/style/css/props.css b/plugins/TinyMCE/js/plugins/style/css/props.css
deleted file mode 100644 (file)
index eb1f264..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#text_font {width:250px;}\r
-#text_size {width:70px;}\r
-.mceAddSelectValue {background:#DDD;}\r
-select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;}\r
-#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;}\r
-#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;}\r
-#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;}\r
-.panel_wrapper div.current {padding-top:10px;height:230px;}\r
-.delim {border-left:1px solid gray;}\r
-.tdelim {border-bottom:1px solid gray;}\r
-#block_display {width:145px;}\r
-#list_type {width:115px;}\r
-.disabled {background:#EEE;}\r
diff --git a/plugins/TinyMCE/js/plugins/style/editor_plugin.js b/plugins/TinyMCE/js/plugins/style/editor_plugin.js
deleted file mode 100644 (file)
index cab2153..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/style/editor_plugin_src.js
deleted file mode 100644 (file)
index 5f7755f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.StylePlugin', {\r
-               init : function(ed, url) {\r
-                       // Register commands\r
-                       ed.addCommand('mceStyleProps', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/props.htm',\r
-                                       width : 480 + parseInt(ed.getLang('style.delta_width', 0)),\r
-                                       height : 320 + parseInt(ed.getLang('style.delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url,\r
-                                       style_text : ed.selection.getNode().style.cssText\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceSetElementStyle', function(ui, v) {\r
-                               if (e = ed.selection.getNode()) {\r
-                                       ed.dom.setAttrib(e, 'style', v);\r
-                                       ed.execCommand('mceRepaint');\r
-                               }\r
-                       });\r
-\r
-                       ed.onNodeChange.add(function(ed, cm, n) {\r
-                               cm.setDisabled('styleprops', n.nodeName === 'BODY');\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'});\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Style',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/js/props.js b/plugins/TinyMCE/js/plugins/style/js/props.js
deleted file mode 100644 (file)
index 6800a9a..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var defaultFonts = "" + \r
-       "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + \r
-       "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
-       "Courier New, Courier, mono=Courier New, Courier, mono;" + \r
-       "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
-       "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + \r
-       "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + \r
-       "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";\r
-\r
-var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";\r
-var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
-var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";\r
-var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
-var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";\r
-var defaultTextStyle = "normal;italic;oblique";\r
-var defaultVariant = "normal;small-caps";\r
-var defaultLineHeight = "normal";\r
-var defaultAttachment = "fixed;scroll";\r
-var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y";\r
-var defaultPosH = "left;center;right";\r
-var defaultPosV = "top;center;bottom";\r
-var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom";\r
-var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none";\r
-var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset";\r
-var defaultBorderWidth = "thin;medium;thick";\r
-var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";\r
-\r
-function init() {\r
-       var ce = document.getElementById('container'), h;\r
-\r
-       ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');\r
-\r
-       h = getBrowserHTML('background_image_browser','background_image','image','advimage');\r
-       document.getElementById("background_image_browser").innerHTML = h;\r
-\r
-       document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color');\r
-       document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color');\r
-       document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top');\r
-       document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right');\r
-       document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom');\r
-       document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left');\r
-\r
-       fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true);\r
-       fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true);\r
-       fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true);\r
-       fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true);\r
-       fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true);\r
-       fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true);\r
-       fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true);\r
-       fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true);\r
-       fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true);\r
-\r
-       fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true);\r
-       fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true);\r
-\r
-       fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true);\r
-       fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true);\r
-       fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true);\r
-       fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true);\r
-       fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true);\r
-       fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true);\r
-       fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true);\r
-       fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true);\r
-       fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true);\r
-       fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true);\r
-       fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true);\r
-       fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true);\r
-       fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true);\r
-       fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true);\r
-\r
-       fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true);\r
-       fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true);\r
-       fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true);\r
-       fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true);\r
-\r
-       fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true);\r
-       fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true);\r
-\r
-       fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true);\r
-       fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true);\r
-\r
-       fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true);\r
-\r
-       fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true);\r
-\r
-       fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true);\r
-       fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true);\r
-\r
-       TinyMCE_EditableSelects.init();\r
-       setupFormData();\r
-       showDisabledControls();\r
-}\r
-\r
-function setupFormData() {\r
-       var ce = document.getElementById('container'), f = document.forms[0], s, b, i;\r
-\r
-       // Setup text fields\r
-\r
-       selectByValue(f, 'text_font', ce.style.fontFamily, true, true);\r
-       selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true);\r
-       selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize));\r
-       selectByValue(f, 'text_weight', ce.style.fontWeight, true, true);\r
-       selectByValue(f, 'text_style', ce.style.fontStyle, true, true);\r
-       selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true);\r
-       selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight));\r
-       selectByValue(f, 'text_case', ce.style.textTransform, true, true);\r
-       selectByValue(f, 'text_variant', ce.style.fontVariant, true, true);\r
-       f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color);\r
-       updateColor('text_color_pick', 'text_color');\r
-       f.text_underline.checked = inStr(ce.style.textDecoration, 'underline');\r
-       f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');\r
-       f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');\r
-       f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');\r
-\r
-       // Setup background fields\r
-\r
-       f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor);\r
-       updateColor('background_color_pick', 'background_color');\r
-       f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
-       selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true);\r
-       selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true);\r
-       selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true);\r
-       selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0)));\r
-       selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true);\r
-       selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1)));\r
-\r
-       // Setup block fields\r
-\r
-       selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true);\r
-       selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing));\r
-       selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true);\r
-       selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing));\r
-       selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true);\r
-       selectByValue(f, 'block_text_align', ce.style.textAlign, true, true);\r
-       f.block_text_indent.value = getNum(ce.style.textIndent);\r
-       selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent));\r
-       selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true);\r
-       selectByValue(f, 'block_display', ce.style.display, true, true);\r
-\r
-       // Setup box fields\r
-\r
-       f.box_width.value = getNum(ce.style.width);\r
-       selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width));\r
-\r
-       f.box_height.value = getNum(ce.style.height);\r
-       selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height));\r
-       selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true);\r
-\r
-       selectByValue(f, 'box_clear', ce.style.clear, true, true);\r
-\r
-       setupBox(f, ce, 'box_padding', 'padding', '');\r
-       setupBox(f, ce, 'box_margin', 'margin', '');\r
-\r
-       // Setup border fields\r
-\r
-       setupBox(f, ce, 'border_style', 'border', 'Style');\r
-       setupBox(f, ce, 'border_width', 'border', 'Width');\r
-       setupBox(f, ce, 'border_color', 'border', 'Color');\r
-\r
-       updateColor('border_color_top_pick', 'border_color_top');\r
-       updateColor('border_color_right_pick', 'border_color_right');\r
-       updateColor('border_color_bottom_pick', 'border_color_bottom');\r
-       updateColor('border_color_left_pick', 'border_color_left');\r
-\r
-       f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);\r
-       f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);\r
-       f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);\r
-       f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);\r
-\r
-       // Setup list fields\r
-\r
-       selectByValue(f, 'list_type', ce.style.listStyleType, true, true);\r
-       selectByValue(f, 'list_position', ce.style.listStylePosition, true, true);\r
-       f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
-\r
-       // Setup box fields\r
-\r
-       selectByValue(f, 'positioning_type', ce.style.position, true, true);\r
-       selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true);\r
-       selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true);\r
-       f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : "";\r
-\r
-       f.positioning_width.value = getNum(ce.style.width);\r
-       selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width));\r
-\r
-       f.positioning_height.value = getNum(ce.style.height);\r
-       selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height));\r
-\r
-       setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']);\r
-\r
-       s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");\r
-       s = s.replace(/,/g, ' ');\r
-\r
-       if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) {\r
-               f.positioning_clip_top.value = getNum(getVal(s, 0));\r
-               selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
-               f.positioning_clip_right.value = getNum(getVal(s, 1));\r
-               selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1)));\r
-               f.positioning_clip_bottom.value = getNum(getVal(s, 2));\r
-               selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2)));\r
-               f.positioning_clip_left.value = getNum(getVal(s, 3));\r
-               selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3)));\r
-       } else {\r
-               f.positioning_clip_top.value = getNum(getVal(s, 0));\r
-               selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
-               f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value;\r
-       }\r
-\r
-//     setupBox(f, ce, '', 'border', 'Color');\r
-}\r
-\r
-function getMeasurement(s) {\r
-       return s.replace(/^([0-9.]+)(.*)$/, "$2");\r
-}\r
-\r
-function getNum(s) {\r
-       if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))\r
-               return s.replace(/[^0-9.]/g, '');\r
-\r
-       return s;\r
-}\r
-\r
-function inStr(s, n) {\r
-       return new RegExp(n, 'gi').test(s);\r
-}\r
-\r
-function getVal(s, i) {\r
-       var a = s.split(' ');\r
-\r
-       if (a.length > 1)\r
-               return a[i];\r
-\r
-       return "";\r
-}\r
-\r
-function setValue(f, n, v) {\r
-       if (f.elements[n].type == "text")\r
-               f.elements[n].value = v;\r
-       else\r
-               selectByValue(f, n, v, true, true);\r
-}\r
-\r
-function setupBox(f, ce, fp, pr, sf, b) {\r
-       if (typeof(b) == "undefined")\r
-               b = ['Top', 'Right', 'Bottom', 'Left'];\r
-\r
-       if (isSame(ce, pr, sf, b)) {\r
-               f.elements[fp + "_same"].checked = true;\r
-\r
-               setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
-               f.elements[fp + "_top"].disabled = false;\r
-\r
-               f.elements[fp + "_right"].value = "";\r
-               f.elements[fp + "_right"].disabled = true;\r
-               f.elements[fp + "_bottom"].value = "";\r
-               f.elements[fp + "_bottom"].disabled = true;\r
-               f.elements[fp + "_left"].value = "";\r
-               f.elements[fp + "_left"].disabled = true;\r
-\r
-               if (f.elements[fp + "_top_measurement"]) {\r
-                       selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
-                       f.elements[fp + "_left_measurement"].disabled = true;\r
-                       f.elements[fp + "_bottom_measurement"].disabled = true;\r
-                       f.elements[fp + "_right_measurement"].disabled = true;\r
-               }\r
-       } else {\r
-               f.elements[fp + "_same"].checked = false;\r
-\r
-               setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
-               f.elements[fp + "_top"].disabled = false;\r
-\r
-               setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf]));\r
-               f.elements[fp + "_right"].disabled = false;\r
-\r
-               setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf]));\r
-               f.elements[fp + "_bottom"].disabled = false;\r
-\r
-               setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf]));\r
-               f.elements[fp + "_left"].disabled = false;\r
-\r
-               if (f.elements[fp + "_top_measurement"]) {\r
-                       selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
-                       selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf]));\r
-                       selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf]));\r
-                       selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf]));\r
-                       f.elements[fp + "_left_measurement"].disabled = false;\r
-                       f.elements[fp + "_bottom_measurement"].disabled = false;\r
-                       f.elements[fp + "_right_measurement"].disabled = false;\r
-               }\r
-       }\r
-}\r
-\r
-function isSame(e, pr, sf, b) {\r
-       var a = [], i, x;\r
-\r
-       if (typeof(b) == "undefined")\r
-               b = ['Top', 'Right', 'Bottom', 'Left'];\r
-\r
-       if (typeof(sf) == "undefined" || sf == null)\r
-               sf = "";\r
-\r
-       a[0] = e.style[pr + b[0] + sf];\r
-       a[1] = e.style[pr + b[1] + sf];\r
-       a[2] = e.style[pr + b[2] + sf];\r
-       a[3] = e.style[pr + b[3] + sf];\r
-\r
-       for (i=0; i<a.length; i++) {\r
-               if (a[i] == null)\r
-                       return false;\r
-\r
-               for (x=0; x<a.length; x++) {\r
-                       if (a[x] != a[i])\r
-                               return false;\r
-               }\r
-       }\r
-\r
-       return true;\r
-};\r
-\r
-function hasEqualValues(a) {\r
-       var i, x;\r
-\r
-       for (i=0; i<a.length; i++) {\r
-               if (a[i] == null)\r
-                       return false;\r
-\r
-               for (x=0; x<a.length; x++) {\r
-                       if (a[x] != a[i])\r
-                               return false;\r
-               }\r
-       }\r
-\r
-       return true;\r
-}\r
-\r
-function applyAction() {\r
-       var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;\r
-\r
-       generateCSS();\r
-\r
-       tinyMCEPopup.restoreSelection();\r
-       ed.dom.setAttrib(ed.selection.getSelectedBlocks(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));\r
-}\r
-\r
-function updateAction() {\r
-       applyAction();\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function generateCSS() {\r
-       var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;\r
-\r
-       ce.style.cssText = "";\r
-\r
-       // Build text styles\r
-       ce.style.fontFamily = f.text_font.value;\r
-       ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");\r
-       ce.style.fontStyle = f.text_style.value;\r
-       ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");\r
-       ce.style.textTransform = f.text_case.value;\r
-       ce.style.fontWeight = f.text_weight.value;\r
-       ce.style.fontVariant = f.text_variant.value;\r
-       ce.style.color = f.text_color.value;\r
-\r
-       s = "";\r
-       s += f.text_underline.checked ? " underline" : "";\r
-       s += f.text_overline.checked ? " overline" : "";\r
-       s += f.text_linethrough.checked ? " line-through" : "";\r
-       s += f.text_blink.checked ? " blink" : "";\r
-       s = s.length > 0 ? s.substring(1) : s;\r
-\r
-       if (f.text_none.checked)\r
-               s = "none";\r
-\r
-       ce.style.textDecoration = s;\r
-\r
-       // Build background styles\r
-\r
-       ce.style.backgroundColor = f.background_color.value;\r
-       ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : "";\r
-       ce.style.backgroundRepeat = f.background_repeat.value;\r
-       ce.style.backgroundAttachment = f.background_attachment.value;\r
-\r
-       if (f.background_hpos.value != "") {\r
-               s = "";\r
-               s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " ";\r
-               s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : "");\r
-               ce.style.backgroundPosition = s;\r
-       }\r
-\r
-       // Build block styles\r
-\r
-       ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : "");\r
-       ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : "");\r
-       ce.style.verticalAlign = f.block_vertical_alignment.value;\r
-       ce.style.textAlign = f.block_text_align.value;\r
-       ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : "");\r
-       ce.style.whiteSpace = f.block_whitespace.value;\r
-       ce.style.display = f.block_display.value;\r
-\r
-       // Build box styles\r
-\r
-       ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : "");\r
-       ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : "");\r
-       ce.style.styleFloat = f.box_float.value;\r
-       ce.style.cssFloat = f.box_float.value;\r
-\r
-       ce.style.clear = f.box_clear.value;\r
-\r
-       if (!f.box_padding_same.checked) {\r
-               ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");\r
-               ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : "");\r
-               ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : "");\r
-               ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : "");\r
-       } else\r
-               ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");               \r
-\r
-       if (!f.box_margin_same.checked) {\r
-               ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");\r
-               ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : "");\r
-               ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : "");\r
-               ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : "");\r
-       } else\r
-               ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");           \r
-\r
-       // Build border styles\r
-\r
-       if (!f.border_style_same.checked) {\r
-               ce.style.borderTopStyle = f.border_style_top.value;\r
-               ce.style.borderRightStyle = f.border_style_right.value;\r
-               ce.style.borderBottomStyle = f.border_style_bottom.value;\r
-               ce.style.borderLeftStyle = f.border_style_left.value;\r
-       } else\r
-               ce.style.borderStyle = f.border_style_top.value;\r
-\r
-       if (!f.border_width_same.checked) {\r
-               ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
-               ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : "");\r
-               ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");\r
-               ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");\r
-       } else\r
-               ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
-\r
-       if (!f.border_color_same.checked) {\r
-               ce.style.borderTopColor = f.border_color_top.value;\r
-               ce.style.borderRightColor = f.border_color_right.value;\r
-               ce.style.borderBottomColor = f.border_color_bottom.value;\r
-               ce.style.borderLeftColor = f.border_color_left.value;\r
-       } else\r
-               ce.style.borderColor = f.border_color_top.value;\r
-\r
-       // Build list styles\r
-\r
-       ce.style.listStyleType = f.list_type.value;\r
-       ce.style.listStylePosition = f.list_position.value;\r
-       ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : "";\r
-\r
-       // Build positioning styles\r
-\r
-       ce.style.position = f.positioning_type.value;\r
-       ce.style.visibility = f.positioning_visibility.value;\r
-\r
-       if (ce.style.width == "")\r
-               ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : "");\r
-\r
-       if (ce.style.height == "")\r
-               ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : "");\r
-\r
-       ce.style.zIndex = f.positioning_zindex.value;\r
-       ce.style.overflow = f.positioning_overflow.value;\r
-\r
-       if (!f.positioning_placement_same.checked) {\r
-               ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
-               ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : "");\r
-               ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : "");\r
-               ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : "");\r
-       } else {\r
-               s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
-               ce.style.top = s;\r
-               ce.style.right = s;\r
-               ce.style.bottom = s;\r
-               ce.style.left = s;\r
-       }\r
-\r
-       if (!f.positioning_clip_same.checked) {\r
-               s = "rect(";\r
-               s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " ";\r
-               s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " ";\r
-               s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " ";\r
-               s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto");\r
-               s += ")";\r
-\r
-               if (s != "rect(auto auto auto auto)")\r
-                       ce.style.clip = s;\r
-       } else {\r
-               s = "rect(";\r
-               t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto";\r
-               s += t + " ";\r
-               s += t + " ";\r
-               s += t + " ";\r
-               s += t + ")";\r
-\r
-               if (s != "rect(auto auto auto auto)")\r
-                       ce.style.clip = s;\r
-       }\r
-\r
-       ce.style.cssText = ce.style.cssText;\r
-}\r
-\r
-function isNum(s) {\r
-       return new RegExp('[0-9]+', 'g').test(s);\r
-}\r
-\r
-function showDisabledControls() {\r
-       var f = document.forms, i, a;\r
-\r
-       for (i=0; i<f.length; i++) {\r
-               for (a=0; a<f[i].elements.length; a++) {\r
-                       if (f[i].elements[a].disabled)\r
-                               tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");\r
-                       else\r
-                               tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");\r
-               }\r
-       }\r
-}\r
-\r
-function fillSelect(f, s, param, dval, sep, em) {\r
-       var i, ar, p, se;\r
-\r
-       f = document.forms[f];\r
-       sep = typeof(sep) == "undefined" ? ";" : sep;\r
-\r
-       if (em)\r
-               addSelectValue(f, s, "", "");\r
-\r
-       ar = tinyMCEPopup.getParam(param, dval).split(sep);\r
-       for (i=0; i<ar.length; i++) {\r
-               se = false;\r
-\r
-               if (ar[i].charAt(0) == '+') {\r
-                       ar[i] = ar[i].substring(1);\r
-                       se = true;\r
-               }\r
-\r
-               p = ar[i].split('=');\r
-\r
-               if (p.length > 1) {\r
-                       addSelectValue(f, s, p[0], p[1]);\r
-\r
-                       if (se)\r
-                               selectByValue(f, s, p[1]);\r
-               } else {\r
-                       addSelectValue(f, s, p[0], p[0]);\r
-\r
-                       if (se)\r
-                               selectByValue(f, s, p[0]);\r
-               }\r
-       }\r
-}\r
-\r
-function toggleSame(ce, pre) {\r
-       var el = document.forms[0].elements, i;\r
-\r
-       if (ce.checked) {\r
-               el[pre + "_top"].disabled = false;\r
-               el[pre + "_right"].disabled = true;\r
-               el[pre + "_bottom"].disabled = true;\r
-               el[pre + "_left"].disabled = true;\r
-\r
-               if (el[pre + "_top_measurement"]) {\r
-                       el[pre + "_top_measurement"].disabled = false;\r
-                       el[pre + "_right_measurement"].disabled = true;\r
-                       el[pre + "_bottom_measurement"].disabled = true;\r
-                       el[pre + "_left_measurement"].disabled = true;\r
-               }\r
-       } else {\r
-               el[pre + "_top"].disabled = false;\r
-               el[pre + "_right"].disabled = false;\r
-               el[pre + "_bottom"].disabled = false;\r
-               el[pre + "_left"].disabled = false;\r
-\r
-               if (el[pre + "_top_measurement"]) {\r
-                       el[pre + "_top_measurement"].disabled = false;\r
-                       el[pre + "_right_measurement"].disabled = false;\r
-                       el[pre + "_bottom_measurement"].disabled = false;\r
-                       el[pre + "_left_measurement"].disabled = false;\r
-               }\r
-       }\r
-\r
-       showDisabledControls();\r
-}\r
-\r
-function synch(fr, to) {\r
-       var f = document.forms[0];\r
-\r
-       f.elements[to].value = f.elements[fr].value;\r
-\r
-       if (f.elements[fr + "_measurement"])\r
-               selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/style/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/style/langs/en_dlg.js
deleted file mode 100644 (file)
index df0a173..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-tinyMCE.addI18n('en.style_dlg',{\r
-title:"Edit CSS Style",\r
-apply:"Apply",\r
-text_tab:"Text",\r
-background_tab:"Background",\r
-block_tab:"Block",\r
-box_tab:"Box",\r
-border_tab:"Border",\r
-list_tab:"List",\r
-positioning_tab:"Positioning",\r
-text_props:"Text",\r
-text_font:"Font",\r
-text_size:"Size",\r
-text_weight:"Weight",\r
-text_style:"Style",\r
-text_variant:"Variant",\r
-text_lineheight:"Line height",\r
-text_case:"Case",\r
-text_color:"Color",\r
-text_decoration:"Decoration",\r
-text_overline:"overline",\r
-text_underline:"underline",\r
-text_striketrough:"strikethrough",\r
-text_blink:"blink",\r
-text_none:"none",\r
-background_color:"Background color",\r
-background_image:"Background image",\r
-background_repeat:"Repeat",\r
-background_attachment:"Attachment",\r
-background_hpos:"Horizontal position",\r
-background_vpos:"Vertical position",\r
-block_wordspacing:"Word spacing",\r
-block_letterspacing:"Letter spacing",\r
-block_vertical_alignment:"Vertical alignment",\r
-block_text_align:"Text align",\r
-block_text_indent:"Text indent",\r
-block_whitespace:"Whitespace",\r
-block_display:"Display",\r
-box_width:"Width",\r
-box_height:"Height",\r
-box_float:"Float",\r
-box_clear:"Clear",\r
-padding:"Padding",\r
-same:"Same for all",\r
-top:"Top",\r
-right:"Right",\r
-bottom:"Bottom",\r
-left:"Left",\r
-margin:"Margin",\r
-style:"Style",\r
-width:"Width",\r
-height:"Height",\r
-color:"Color",\r
-list_type:"Type",\r
-bullet_image:"Bullet image",\r
-position:"Position",\r
-positioning_type:"Type",\r
-visibility:"Visibility",\r
-zindex:"Z-index",\r
-overflow:"Overflow",\r
-placement:"Placement",\r
-clip:"Clip",\r
-text:"Text",\r
-background:"Background",\r
-block:"Block",\r
-box:"Box",\r
-border:"Border",\r
-list:"List",\r
-position:"Position"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/props.htm b/plugins/TinyMCE/js/plugins/style/props.htm
deleted file mode 100644 (file)
index b5a3d15..0000000
+++ /dev/null
@@ -1,838 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-       <title>{#style_dlg.title}</title>
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>
-       <script type="text/javascript" src="js/props.js"></script>
-       <link href="css/props.css" rel="stylesheet" type="text/css" />
-</head>
-
-<body id="styleprops" style="display: none" role="application" aria-labelledby="app_title">
-<span id="app_title" style="display:none">{#style_dlg.title}</span>
-<form onsubmit="updateAction();return false;" action="#">
-<div class="tabs">
-       <ul>
-               <li id="text_tab" class="current" aria-controls="text_panel"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
-               <li id="background_tab" aria-controls="background_panel"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
-               <li id="block_tab" aria-controls="block_panel"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
-               <li id="box_tab" aria-controls="box_panel"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
-               <li id="border_tab" aria-controls="border_panel"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
-               <li id="list_tab" aria-controls="list_panel"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
-               <li id="positioning_tab" aria-controls="positioning_panel"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
-       </ul>
-</div>
-
-<div class="panel_wrapper">
-<div id="text_panel" class="panel current">
-       <fieldset>
-               <legend>{#style_dlg.text}</legend>
-               <table role="presentation" border="0" width="100%">
-                       <tr>
-                               <td><label for="text_font">{#style_dlg.text_font}</label></td>
-                               <td colspan="3">
-                                       <select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="text_size">{#style_dlg.text_size}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="text_size_measurement_label" for="text_size_measurement" style="display: none; visibility: hidden;">Text Size Measurement Unit</label>
-                                                               <select id="text_size_measurement" name="text_size_measurement" aria-labelledby="text_size_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                               <td><label for="text_weight">{#style_dlg.text_weight}</label></td>
-                               <td>
-                                       <select id="text_weight" name="text_weight"></select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="text_style">{#style_dlg.text_style}</label></td>
-                               <td>
-                                       <select id="text_style" name="text_style" class="mceEditableSelect"></select>
-                               </td>
-                               <td><label for="text_variant">{#style_dlg.text_variant}</label></td>
-                               <td>
-                                       <select id="text_variant" name="text_variant"></select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td>
-                                                               <select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
-                                                       </td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="text_lineheight_measurement_label" for="text_lineheight_measurement" style="display: none; visibility: hidden;">Line Height Measurement Unit</label>
-                                                               <select id="text_lineheight_measurement" name="text_lineheight_measurement" aria-labelledby="text_lineheight_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                               <td><label for="text_case">{#style_dlg.text_case}</label></td>
-                               <td>
-                                       <select id="text_case" name="text_case"></select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="text_color">{#style_dlg.text_color}</label></td>
-                               <td colspan="2">
-                                       <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                               <tr>
-                                                       <td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
-                                                       <td id="text_color_pickcontainer">&nbsp;</td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
-                               <td colspan="2">
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
-                                                       <td><label for="text_underline">{#style_dlg.text_underline}</label></td>
-                                               </tr>
-                                               <tr>
-                                                       <td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
-                                                       <td><label for="text_overline">{#style_dlg.text_overline}</label></td>
-                                               </tr>
-                                               <tr>
-                                                       <td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
-                                                       <td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
-                                               </tr>
-                                               <tr>
-                                                       <td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
-                                                       <td><label for="text_blink">{#style_dlg.text_blink}</label></td>
-                                               </tr>
-                                               <tr>
-                                                       <td><input id="text_none" name="text_none" class="checkbox" type="checkbox" /></td>
-                                                       <td><label for="text_none">{#style_dlg.text_none}</label></td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div id="background_panel" class="panel">
-       <fieldset>
-               <legend>{#style_dlg.background}</legend>
-               <table role="presentation" border="0">
-                       <tr>
-                               <td><label for="background_color">{#style_dlg.background_color}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                               <tr>
-                                                       <td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
-                                                       <td id="background_color_pickcontainer">&nbsp;</td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="background_image">{#style_dlg.background_image}</label></td>
-                               <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                       <tr> 
-                                               <td><input id="background_image" name="background_image" type="text" /></td> 
-                                               <td id="background_image_browser">&nbsp;</td>
-                                       </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
-                               <td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
-                               <td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="background_hpos_measurement_label" for="background_hpos_measurement" style="display: none; visibility: hidden;">Horizontal position measurement unit</label>
-                                                               <select id="background_hpos_measurement" name="background_hpos_measurement" aria-labelledby="background_hpos_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-
-                                                               <label id="background_vpos_measurement_label" for="background_vpos_measurement" style="display: none; visibility: hidden;">Vertical position measurement unit</label>
-                                                               <select id="background_vpos_measurement" name="background_vpos_measurement" aria-labelledby="background_vpos_measurement_label">></select></td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div id="block_panel" class="panel">
-       <fieldset>
-               <legend>{#style_dlg.block}</legend>
-               <table role="presentation" border="0">
-                       <tr>
-                               <td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="block_wordspacing_measurement_label" for="block_wordspacing_measurement" style="display: none; visibility: hidden;">Word spacing measurement unit</label>
-                                                               <select id="block_wordspacing_measurement" name="block_wordspacing_measurement" aria-labelledby="block_wordspacing_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="block_letterspacing_measurement_label" for="block_letterspacing_measurement" style="display: none; visibility: hidden;">Letter spacing measurement unit</label>
-                                                               <select id="block_letterspacing_measurement" name="block_letterspacing_measurement" aria-labelledby="block_letterspacing_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
-                               <td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
-                               <td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="block_text_indent_measurement_label" for="block_text_indent_measurement" style="display: none; visibility: hidden;">Text Indent Measurement Unit</label>
-
-                                                               <select id="block_text_indent_measurement" name="block_text_indent_measurement" aria-labelledby="block_text_indent_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
-                               <td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="block_display">{#style_dlg.block_display}</label></td>
-                               <td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div id="box_panel" class="panel">
-       <fieldset>
-               <legend>{#style_dlg.box}</legend>
-               <table role="presentation" border="0">
-                       <tr>
-                               <td><label for="box_width">{#style_dlg.box_width}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_width_measurement_label" for="box_width_measurement" style="display: none; visibility: hidden;">Box Width Measurement Unit</label>
-                                                               <select id="box_width_measurement" name="box_width_measurement" aria-labelledby="box_width_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                               <td>&nbsp;&nbsp;&nbsp;<label for="box_float">{#style_dlg.box_float}</label></td>
-                               <td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
-                       </tr>
-
-                       <tr>
-                               <td><label for="box_height">{#style_dlg.box_height}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_height_measurement_label" for="box_height_measurement" style="display: none; visibility: hidden;">Box Height Measurement Unit</label>
-                                                               <select id="box_height_measurement" name="box_height_measurement" aria-labelledby="box_height_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                               <td>&nbsp;&nbsp;&nbsp;<label for="box_clear">{#style_dlg.box_clear}</label></td>
-                               <td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
-                       </tr>
-               </table>
-<div style="float: left; width: 49%">
-       <fieldset>
-               <legend>{#style_dlg.padding}</legend>
-
-               <table role="presentation" border="0">
-                       <tr>
-                               <td>&nbsp;</td>
-                               <td><input type="checkbox" id="box_padding_same" name="box_padding_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_padding');" /> <label for="box_padding_same">{#style_dlg.same}</label></td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_padding_top">{#style_dlg.top}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_padding_top" name="box_padding_top" class="mceEditableSelect" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_padding_top_measurement_label" for="box_padding_top_measurement" style="display: none; visibility: hidden;">Padding Top Measurement Unit</label>
-                                                               <select id="box_padding_top_measurement" name="box_padding_top_measurement" aria-labelledby="box_padding_top_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_padding_right">{#style_dlg.right}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_padding_right" name="box_padding_right" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_padding_right_measurement_label" for="box_padding_right_measurement" style="display: none; visibility: hidden;">Padding Right Measurement Unit</label>
-                                                               <select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled" aria-labelledby="box_padding_right_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_padding_bottom">{#style_dlg.bottom}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_padding_bottom" name="box_padding_bottom" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_padding_bottom_measurement_label" for="box_padding_bottom_measurement" style="display: none; visibility: hidden;">Padding Bottom Measurement Unit</label>
-                                                               <select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled" aria-labelledby="box_padding_bottom_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_padding_left">{#style_dlg.left}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_padding_left" name="box_padding_left" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_padding_left_measurement_label" for="box_padding_left_measurement" style="display: none; visibility: hidden;">Padding Left Measurement Unit</label>
-                                                               <select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled" aria-labelledby="box_padding_left_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div style="float: right; width: 49%">
-       <fieldset>
-               <legend>{#style_dlg.margin}</legend>
-
-               <table role="presentation" border="0">
-                       <tr>
-                               <td>&nbsp;</td>
-                               <td><input type="checkbox" id="box_margin_same" name="box_margin_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_margin');" /> <label for="box_margin_same">{#style_dlg.same}</label></td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_margin_top">{#style_dlg.top}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_margin_top" name="box_margin_top" class="mceEditableSelect" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_margin_top_measurement_label" for="box_margin_top_measurement" style="display: none; visibility: hidden;">Margin Top Measurement Unit</label>
-                                                               <select id="box_margin_top_measurement" name="box_margin_top_measurement" aria-labelledby="box_margin_top_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_margin_right">{#style_dlg.right}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_margin_right" name="box_margin_right" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_margin_right_measurement_label" for="box_margin_right_measurement" style="display: none; visibility: hidden;">Margin Right Measurement Unit</label>
-                                                               <select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled" aria-labelledby="box_margin_right_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_margin_bottom">{#style_dlg.bottom}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_margin_bottom" name="box_margin_bottom" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_margin_bottom_measurement_label" for="box_margin_bottom_measurement" style="display: none; visibility: hidden;">Margin Bottom Measurement Unit</label>
-                                                               <select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled" aria-labelledby="box_margin_bottom_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><label for="box_margin_left">{#style_dlg.left}</label></td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="box_margin_left" name="box_margin_left" class="mceEditableSelect" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="box_margin_left_measurement_label" for="box_margin_left_measurement" style="display: none; visibility: hidden;">Margin Left Measurement Unit</label>
-                                                               <select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled" aria-labelledby="box_margin_left_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-<br style="clear: both" />
-</div>
-
-<div id="border_panel" class="panel">
-       <fieldset>
-               <legend>{#style_dlg.border}</legend>    
-               <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%">
-               <tr>
-                       <td class="tdelim">&nbsp;</td>
-                       <td class="tdelim delim">&nbsp;</td>
-                       <td class="tdelim">{#style_dlg.style}</td>
-                       <td class="tdelim delim">&nbsp;</td>
-                       <td class="tdelim">{#style_dlg.width}</td>
-                       <td class="tdelim delim">&nbsp;</td>
-                       <td class="tdelim">{#style_dlg.color}</td>
-               </tr>
-
-               <tr>
-                       <td>&nbsp;</td>
-                       <td class="delim">&nbsp;</td>
-                       <td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
-                       <td class="delim">&nbsp;</td>
-                       <td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
-                       <td class="delim">&nbsp;</td>
-                       <td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
-               </tr>
-
-               <tr>
-                       <td>{#style_dlg.top}</td>
-                       <td class="delim">&nbsp;</td>
-                       <td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                       <tr>
-                                               <td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
-                                               <td>&nbsp;</td>
-                                               <td>
-                                                       <label id="border_width_top_measurement_label" for="border_width_top_measurement" style="display: none; visibility: hidden;">Width top Measurement Unit</label>
-                                                       <select id="border_width_top_measurement" name="border_width_top_measurement" aria-labelledby="border_width_top_measurement_label"></select>
-                                               </td>
-                                       </tr>
-                               </table>
-                       </td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                       <tr>
-                                               <td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
-                                               <td id="border_color_top_pickcontainer">&nbsp;</td>
-                                       </tr>
-                               </table>
-                       </td>
-               </tr>
-
-               <tr>
-                       <td>{#style_dlg.right}</td>
-                       <td class="delim">&nbsp;</td>
-                       <td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                       <tr>
-                                               <td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
-                                               <td>&nbsp;</td>
-                                               <td>
-                                                       <label id="border_width_right_measurement_label" for="border_width_right_measurement" style="display: none; visibility: hidden;">Width Right Measurement Unit</label>
-                                                       <select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled" aria-labelledby="border_width_right_measurement_label"></select>
-                                               </td>
-                                       </tr>
-                               </table>
-                       </td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                       <tr>
-                                               <td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
-                                               <td id="border_color_right_pickcontainer">&nbsp;</td>
-                                       </tr>
-                               </table>
-                       </td>
-               </tr>
-
-               <tr>
-                       <td>{#style_dlg.bottom}</td>
-                       <td class="delim">&nbsp;</td>
-                       <td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                       <tr>
-                                               <td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
-                                               <td>&nbsp;</td>
-                                               <td>
-                                                       <label id="border_width_bottom_measurement_label" for="border_width_bottom_measurement" style="display: none; visibility: hidden;">Width Bottom Measurement Unit</label>
-                                                       <select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled" aria-labelledby="border_width_bottom_measurement_label"></select>
-                                               </td>
-                                       </tr>
-                               </table>
-                       </td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                       <tr>
-                                               <td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
-                                               <td id="border_color_bottom_pickcontainer">&nbsp;</td>
-                                       </tr>
-                               </table>
-                       </td>
-               </tr>
-
-               <tr>
-                       <td>{#style_dlg.left}</td>
-                       <td class="delim">&nbsp;</td>
-                       <td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                       <tr>
-                                               <td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
-                                               <td>&nbsp;</td>
-                                               <td>
-                                                       <label id="border_width_left_measurement_label" for="border_width_left_measurement" style="display: none; visibility: hidden;">Width Left Measurement Unit</label>
-                                                       <select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled" aria-labelledby="border_width_left_measurement_label"></select>
-                                               </td>
-                                       </tr>
-                               </table>
-                       </td>
-                       <td class="delim">&nbsp;</td>
-                       <td>
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">
-                                       <tr>
-                                               <td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
-                                               <td id="border_color_left_pickcontainer">&nbsp;</td>
-                                       </tr>
-                               </table>
-                       </td>
-               </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div id="list_panel" class="panel">
-<fieldset>
-       <legend>{#style_dlg.list}</legend>
-       <table role="presentation" border="0">
-               <tr>
-                       <td><label for="list_type">{#style_dlg.list_type}</label></td>
-                       <td><select id="list_type" name="list_type" class="mceEditableSelect"></select></td>
-               </tr>
-
-               <tr>
-                       <td><label for="list_bullet_image">{#style_dlg.bullet_image}</label></td>
-                       <td><input id="list_bullet_image" name="list_bullet_image" type="text" /></td>
-               </tr>
-
-               <tr>
-                       <td><label for="list_position">{#style_dlg.position}</label></td>
-                       <td><select id="list_position" name="list_position" class="mceEditableSelect"></select></td>
-               </tr>
-       </table>
-</fieldset>
-</div>
-
-<div id="positioning_panel" class="panel">
-<fieldset>
-       <legend>{#style_dlg.position}</legend>
-<table role="presentation" border="0">
-       <tr>
-               <td><label for="positioning_type">{#style_dlg.positioning_type}</label></td>
-               <td><select id="positioning_type" name="positioning_type" class="mceEditableSelect"></select></td>
-               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_visibility">{#style_dlg.visibility}</label></td>
-               <td><select id="positioning_visibility" name="positioning_visibility" class="mceEditableSelect"></select></td>
-       </tr>
-
-       <tr>
-               <td><label for="positioning_width">{#style_dlg.width}</label></td>
-               <td>
-                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                               <tr>
-                                       <td><input type="text" id="positioning_width" name="positioning_width" onChange="synch('positioning_width','box_width');" /></td>
-                                       <td>&nbsp;</td>
-                                       <td>
-                                               <label id="positioning_width_measurement_label" for="positioning_width_measurement" style="display: none; visibility: hidden;">Positioning width Measurement Unit</label>
-                                               <select id="positioning_width_measurement" name="positioning_width_measurement" aria-labelledby="positioning_width_measurement_label"></select>
-                                       </td>
-                               </tr>
-                       </table>
-               </td>
-               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_zindex">{#style_dlg.zindex}</label></td>
-               <td><input type="text" id="positioning_zindex" name="positioning_zindex" /></td>
-       </tr>
-
-       <tr>
-               <td><label for="positioning_height">{#style_dlg.height}</label></td>
-               <td>
-                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                               <tr>
-                                       <td><input type="text" id="positioning_height" name="positioning_height" onChange="synch('positioning_height','box_height');" /></td>
-                                       <td>&nbsp;</td>
-                                       <td>
-                                               <label id="positioning_height_measurement_label" for="positioning_height_measurement" style="display: none; visibility: hidden;">Positioning Height Measurement Unit</label>
-                                               <select id="positioning_height_measurement" name="positioning_height_measurement" aria-labelledby="positioning_height_measurement_label"></select>
-                                       </td>
-                               </tr>
-                       </table>
-               </td>
-               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_overflow">{#style_dlg.overflow}</label></td>
-               <td><select id="positioning_overflow" name="positioning_overflow" class="mceEditableSelect"></select></td>
-       </tr>
-</table>
-
-<div style="float: left; width: 49%">
-       <fieldset>
-               <legend>{#style_dlg.placement}</legend>
-
-               <table role="presentation" border="0">
-                       <tr>
-                               <td>&nbsp;</td>
-                               <td><input type="checkbox" id="positioning_placement_same" name="positioning_placement_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_placement');" /> <label for="positioning_placement_same">{#style_dlg.same}</label></td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.top}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_placement_top" name="positioning_placement_top" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_placement_top_measurement_label" for="positioning_placement_top_measurement" style="display: none; visibility: hidden;">Placement Top Measurement Unit</label>
-                                                               <select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement" aria-labelledby="positioning_placement_top_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.right}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_placement_right" name="positioning_placement_right" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_placement_right_measurement_label" for="positioning_placement_right_measurement" style="display: none; visibility: hidden;">Placement Right Measurement Unit</label>
-                                                               <select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled" aria-labelledby="positioning_placement_right_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.bottom}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_placement_bottom" name="positioning_placement_bottom" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_placement_bottom_measurement_label" for="positioning_placement_bottom_measurement" style="display: none; visibility: hidden;">Placement Bottom Measurement Unit</label>
-                                                               <select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled" aria-labelledby="positioning_placement_bottom_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.left}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_placement_left" name="positioning_placement_left" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_placement_left_measurement_label" for="positioning_placement_left_measurement" style="display: none; visibility: hidden;">Placement Left Measurement Unit</label>
-                                                               <select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled" aria-labelledby="positioning_placement_left_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-
-<div style="float: right; width: 49%">
-       <fieldset>
-               <legend>{#style_dlg.clip}</legend>
-
-               <table role="presentation" border="0">
-                       <tr>
-                               <td>&nbsp;</td>
-                               <td><input type="checkbox" id="positioning_clip_same" name="positioning_clip_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_clip');" /> <label for="positioning_clip_same">{#style_dlg.same}</label></td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.top}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_clip_top" name="positioning_clip_top" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_clip_top_measurement_label" for="positioning_clip_top_measurement" style="display: none; visibility: hidden;">Clip Top Measurement Unit</label>
-                                                               <select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement" aria-labelledby="positioning_clip_top_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.right}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_clip_right" name="positioning_clip_right" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_clip_right_measurement_label" for="positioning_clip_right_measurement" style="display: none; visibility: hidden;">Clip Right Measurement Unit</label>
-                                                               <select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled" aria-labelledby="positioning_clip_right_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.bottom}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_clip_bottom" name="positioning_clip_bottom" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_clip_bottom_measurement_label" for="positioning_clip_bottom_measurement" style="display: none; visibility: hidden;">Clip Bottom Measurement Unit</label>
-                                                               <select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled" aria-labelledby="positioning_clip_bottom_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{#style_dlg.left}</td>
-                               <td>
-                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">
-                                               <tr>
-                                                       <td><input type="text" id="positioning_clip_left" name="positioning_clip_left" disabled="disabled" /></td>
-                                                       <td>&nbsp;</td>
-                                                       <td>
-                                                               <label id="positioning_clip_left_measurement_label" for="positioning_clip_left_measurement" style="display: none; visibility: hidden;">Clip Left Measurement Unit</label>
-                                                               <select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled" aria-labelledby="positioning_clip_left_measurement_label"></select>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </fieldset>
-</div>
-<br style="clear: both" />
-</div>
-</fieldset>
-</div>
-
-<div class="mceActionPanel">
-       <input type="submit" id="insert" name="insert" value="{#update}" />
-       <input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
-       <input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
-</div>
-</form>
-
-<div style="display: none">
-       <div id="container"></div>
-</div>
-
-</body>
-</html>
diff --git a/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js b/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js
deleted file mode 100644 (file)
index d18689d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(r){n=c.select(":input:enabled,*[tabindex]");function i(s){return s.type!="hidden"&&s.tabIndex!="-1"&&!(n[m].style.display=="none")&&!(n[m].style.visibility=="hidden")}d(n,function(t,s){if(t.id==l.id){j=s;return false}});if(r>0){for(m=j+1;m<n.length;m++){if(i(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(i(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js
deleted file mode 100644 (file)
index f4545e1..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;\r
-\r
-       tinymce.create('tinymce.plugins.TabFocusPlugin', {\r
-               init : function(ed, url) {\r
-                       function tabCancel(ed, e) {\r
-                               if (e.keyCode === 9)\r
-                                       return Event.cancel(e);\r
-                       };\r
-\r
-                       function tabHandler(ed, e) {\r
-                               var x, i, f, el, v;\r
-\r
-                               function find(d) {\r
-                                       el = DOM.select(':input:enabled,*[tabindex]');\r
-                                       function canSelect(e) {\r
-                                               return e.type != 'hidden' && \r
-                                               e.tabIndex != '-1' && \r
-                                                       !(el[i].style.display == "none") && \r
-                                                       !(el[i].style.visibility == "hidden");\r
-                                   }\r
-\r
-                                       each(el, function(e, i) {\r
-                                               if (e.id == ed.id) {\r
-                                                       x = i;\r
-                                                       return false;\r
-                                               }\r
-                                       });\r
-\r
-                                       if (d > 0) {\r
-                                               for (i = x + 1; i < el.length; i++) {\r
-                                                       if (canSelect(el[i]))\r
-                                                               return el[i];\r
-                                               }\r
-                                       } else {\r
-                                               for (i = x - 1; i >= 0; i--) {\r
-                                                       if (canSelect(el[i]))\r
-                                                               return el[i];\r
-                                               }\r
-                                       }\r
-\r
-                                       return null;\r
-                               };\r
-\r
-                               if (e.keyCode === 9) {\r
-                                       v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));\r
-\r
-                                       if (v.length == 1) {\r
-                                               v[1] = v[0];\r
-                                               v[0] = ':prev';\r
-                                       }\r
-\r
-                                       // Find element to focus\r
-                                       if (e.shiftKey) {\r
-                                               if (v[0] == ':prev')\r
-                                                       el = find(-1);\r
-                                               else\r
-                                                       el = DOM.get(v[0]);\r
-                                       } else {\r
-                                               if (v[1] == ':next')\r
-                                                       el = find(1);\r
-                                               else\r
-                                                       el = DOM.get(v[1]);\r
-                                       }\r
-\r
-                                       if (el) {\r
-                                               if (el.id && (ed = tinymce.get(el.id || el.name)))\r
-                                                       ed.focus();\r
-                                               else\r
-                                                       window.setTimeout(function() {\r
-                                                               if (!tinymce.isWebKit)\r
-                                                                       window.focus();\r
-                                                               el.focus();\r
-                                                       }, 10);\r
-\r
-                                               return Event.cancel(e);\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       ed.onKeyUp.add(tabCancel);\r
-\r
-                       if (tinymce.isGecko) {\r
-                               ed.onKeyPress.add(tabHandler);\r
-                               ed.onKeyDown.add(tabCancel);\r
-                       } else\r
-                               ed.onKeyDown.add(tabHandler);\r
-\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Tabfocus',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/cell.htm b/plugins/TinyMCE/js/plugins/table/cell.htm
deleted file mode 100644 (file)
index a72a8d6..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#table_dlg.cell_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/cell.js"></script>\r
-       <link href="css/cell.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="tablecell" style="display: none" role="application">\r
-       <form onsubmit="updateAction();return false;" action="#">\r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.general_props}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td><label for="align">{#table_dlg.align}</label></td>\r
-                                                       <td>\r
-                                                               <select id="align" name="align" class="mceFocus">\r
-                                                                       <option value="">{#not_set}</option>\r
-                                                                       <option value="center">{#table_dlg.align_middle}</option>\r
-                                                                       <option value="left">{#table_dlg.align_left}</option>\r
-                                                                       <option value="right">{#table_dlg.align_right}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-               \r
-                                                       <td><label for="celltype">{#table_dlg.cell_type}</label></td>\r
-                                                       <td>\r
-                                                               <select id="celltype" name="celltype">\r
-                                                                       <option value="td">{#table_dlg.td}</option>\r
-                                                                       <option value="th">{#table_dlg.th}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="valign">{#table_dlg.valign}</label></td>\r
-                                                       <td>\r
-                                                               <select id="valign" name="valign">\r
-                                                                       <option value="">{#not_set}</option>\r
-                                                                       <option value="top">{#table_dlg.align_top}</option>\r
-                                                                       <option value="middle">{#table_dlg.align_middle}</option>\r
-                                                                       <option value="bottom">{#table_dlg.align_bottom}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                                       <td><label for="scope">{#table_dlg.scope}</label></td>\r
-                                                       <td>\r
-                                                               <select id="scope" name="scope">\r
-                                                                       <option value="">{#not_set}</option>\r
-                                                                       <option value="col">{#table.col}</option>\r
-                                                                       <option value="row">{#table.row}</option>\r
-                                                                       <option value="rowgroup">{#table_dlg.rowgroup}</option>\r
-                                                                       <option value="colgroup">{#table_dlg.colgroup}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="width">{#table_dlg.width}</label></td>\r
-                                                       <td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>\r
-\r
-                                                       <td><label for="height">{#table_dlg.height}</label></td>\r
-                                                       <td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr id="styleSelectRow">\r
-                                                       <td><label for="class">{#class_name}</label></td>\r
-                                                       <td colspan="3">\r
-                                                               <select id="class" name="class" class="mceEditableSelect">\r
-                                                                       <option value="" selected="selected">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.advanced_props}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
-                                                       <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
-                                                       <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="dir" name="dir" style="width: 200px"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
-                                                       <td>\r
-                                                               <input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>\r
-                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr role="group" aria-labelledby="bordercolor_label">\r
-                                                       <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>\r
-                                                                               <td id="bordercolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr role="group" aria-labelledby="bgcolor_label">\r
-                                                       <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
-                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <div>\r
-                               <select id="action" name="action">\r
-                                       <option value="cell">{#table_dlg.cell_cell}</option>\r
-                                       <option value="row">{#table_dlg.cell_row}</option>\r
-                                       <option value="col">{#table_dlg.cell_col}</option>\r
-                                       <option value="all">{#table_dlg.cell_all}</option>\r
-                               </select>\r
-                       </div>\r
-\r
-                       <input type="submit" id="insert" name="insert" value="{#update}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/css/cell.css b/plugins/TinyMCE/js/plugins/table/css/cell.css
deleted file mode 100644 (file)
index a067ecd..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* CSS file for cell dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
-       height: 200px;\r
-}\r
-\r
-.advfield {\r
-       width: 200px;\r
-}\r
-\r
-#action {\r
-       margin-bottom: 3px;\r
-}\r
-\r
-#class {\r
-       width: 150px;\r
-}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/css/row.css b/plugins/TinyMCE/js/plugins/table/css/row.css
deleted file mode 100644 (file)
index 1f7755d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* CSS file for row dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
-       height: 200px;\r
-}\r
-\r
-.advfield {\r
-       width: 200px;\r
-}\r
-\r
-#action {\r
-       margin-bottom: 3px;\r
-}\r
-\r
-#rowtype,#align,#valign,#class,#height {\r
-       width: 150px;\r
-}\r
-\r
-#height {\r
-       width: 50px;    \r
-}\r
-\r
-.col2 {\r
-       padding-left: 20px;\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/table/css/table.css b/plugins/TinyMCE/js/plugins/table/css/table.css
deleted file mode 100644 (file)
index d11c3f6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* CSS file for table dialog in the table plugin */\r
-\r
-.panel_wrapper div.current {\r
-       height: 245px;\r
-}\r
-\r
-.advfield {\r
-       width: 200px;\r
-}\r
-\r
-#class {\r
-       width: 150px;\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/table/editor_plugin.js b/plugins/TinyMCE/js/plugins/table/editor_plugin.js
deleted file mode 100644 (file)
index f010031..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(c){var d=c.each;function b(f,g){var h=g.ownerDocument,e=h.createRange(),j;e.setStartBefore(g);e.setEnd(f.endContainer,f.endOffset);j=h.createElement("body");j.appendChild(e.cloneContents());return j.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(H,G,K){var f,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;f=[];d(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);d(O,function(P,Q){Q+=M;d(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(f[Q]){while(f[Q][R]){R++}}U=h(W,"rowspan");V=h(W,"colspan");for(T=Q;T<Q+U;T++){if(!f[T]){f[T]=[]}for(S=R;S<R+V;S++){f[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=f[O];if(N){return N[M]}}function h(N,M){return parseInt(N.getAttribute(M)||1)}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];d(H.rows,function(N){d(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function e(M){var N;c.walk(M,function(P){var O;if(P.nodeType==3){d(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=c.isIE?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!c.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();d(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}d(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=f[Math.min(f.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=f[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=f[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(e(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(e(P.cells[0]),P.cells[0])}}}}}function C(){d(f,function(M,N){d(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=h(P,"colspan");R=h(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(e(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!f[R]||!f[R][U]){continue}V=f[R][U].elm;if(V!=T){N=c.grep(V.childNodes);d(N,function(Z){T.appendChild(Z)});if(N.length){N=c.grep(T.childNodes);Q=0;d(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;d(f,function(W,X){d(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<f[0].length;R++){if(!f[M][R]){continue}S=f[M][R].elm;if(S!=P){if(!Q){O=h(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&f[M-1][R]){V=f[M-1][R].elm;O=h(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=e(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function g(N){var O,M;d(f,function(P,Q){d(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});d(f,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=h(P,"colspan");Q=h(P,"rowspan");if(R==1){if(!N){G.insertAfter(e(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(e(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];d(f,function(N,O){d(N,function(Q,P){if(j(Q)&&c.inArray(M,P)===-1){d(f,function(T){var R=T[P].elm,S;S=h(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");d(Q.cells,function(S){var T=h(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);d(f[R.y],function(S){var T;S=S.elm;if(S!=O){T=h(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();d(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();d(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;d(f,function(S){var R;Q=0;d(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}d(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(e(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}})}function F(M){var N;d(f,function(O,P){d(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;d(f,function(P,Q){d(P,function(S,R){var U,T;if(j(S)){S=f[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=f[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=f[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=f[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(f[y][x]){G.addClass(f[y][x].elm,"mceSelected")}}}}}c.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:g,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}c.create("tinymce.plugins.TablePlugin",{init:function(f,g){var e,l,h=true;function k(o){var n=f.selection,m=f.dom.getParent(o||n.getNode(),"table");if(m){return new a(m,f.dom,n)}}function j(){f.getBody().style.webkitUserSelect="";if(h){f.dom.removeClass(f.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");h=false}}d([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(m){f.addButton(m[0],{title:m[1],cmd:m[2],ui:m[3]})});if(!c.isIE){f.onClick.add(function(m,n){n=n.target;if(n.nodeName==="TABLE"){m.selection.select(n);m.nodeChanged()}})}f.onPreProcess.add(function(n,o){var m,p,q,s=n.dom,r;m=s.select("table",o.node);p=m.length;while(p--){q=m[p];s.setAttrib(q,"data-mce-style","");if((r=s.getAttrib(q,"width"))){s.setStyle(q,"width",r);s.setAttrib(q,"width","")}if((r=s.getAttrib(q,"height"))){s.setStyle(q,"height",r);s.setAttrib(q,"height","")}}});f.onNodeChange.add(function(o,m,r){var q;r=o.selection.getStart();q=o.dom.getParent(r,"td,th,caption");m.setActive("table",r.nodeName==="TABLE"||!!q);if(q&&q.nodeName==="CAPTION"){q=0}m.setDisabled("delete_table",!q);m.setDisabled("delete_col",!q);m.setDisabled("delete_table",!q);m.setDisabled("delete_row",!q);m.setDisabled("col_after",!q);m.setDisabled("col_before",!q);m.setDisabled("row_after",!q);m.setDisabled("row_before",!q);m.setDisabled("row_props",!q);m.setDisabled("cell_props",!q);m.setDisabled("split_cells",!q);m.setDisabled("merge_cells",!q)});f.onInit.add(function(n){var m,q,r=n.dom,o;e=n.windowManager;n.onMouseDown.add(function(s,t){if(t.button!=2){j();q=r.getParent(t.target,"td,th");m=r.getParent(q,"table")}});r.bind(n.getDoc(),"mouseover",function(w){var u,t,v=w.target;if(q&&(o||v!=q)&&(v.nodeName=="TD"||v.nodeName=="TH")){t=r.getParent(v,"table");if(t==m){if(!o){o=k(t);o.setStartCell(q);n.getBody().style.webkitUserSelect="none"}o.setEndCell(v);h=true}u=n.selection.getSel();try{if(u.removeAllRanges){u.removeAllRanges()}else{u.empty()}}catch(s){}w.preventDefault()}});n.onMouseUp.add(function(B,C){var t,v=B.selection,D,E=v.getSel(),s,w,u,A;if(q){if(o){B.getBody().style.webkitUserSelect=""}function z(F,H){var G=new c.dom.TreeWalker(F,F);do{if(F.nodeType==3&&c.trim(F.nodeValue).length!=0){if(H){t.setStart(F,0)}else{t.setEnd(F,F.nodeValue.length)}return}if(F.nodeName=="BR"){if(H){t.setStartBefore(F)}else{t.setEndBefore(F)}return}}while(F=(H?G.next():G.prev()))}D=r.select("td.mceSelected,th.mceSelected");if(D.length>0){t=r.createRng();w=D[0];A=D[D.length-1];t.setStart(w);t.setEnd(w);z(w,1);s=new c.dom.TreeWalker(w,r.getParent(D[0],"table"));do{if(w.nodeName=="TD"||w.nodeName=="TH"){if(!r.hasClass(w,"mceSelected")){break}u=w}}while(w=s.next());z(u);v.setRng(t)}B.nodeChanged();q=o=m=null}});n.onKeyUp.add(function(s,t){j()});if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(u,s,w){var z,v=n.selection,t=v.getNode()||n.getBody();if(n.dom.getParent(w,"td")||n.dom.getParent(w,"th")||n.dom.select("td.mceSelected,th.mceSelected").length){s.removeAll();if(t.nodeName=="A"&&!n.dom.getAttrib(t,"name")){s.add({title:"advanced.link_desc",icon:"link",cmd:n.plugins.advlink?"mceAdvLink":"mceLink",ui:true});s.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});s.addSeparator()}if(t.nodeName=="IMG"&&t.className.indexOf("mceItem")==-1){s.add({title:"advanced.image_desc",icon:"image",cmd:n.plugins.advimage?"mceAdvImage":"mceImage",ui:true});s.addSeparator()}s.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});s.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});s.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});s.addSeparator();z=s.addMenu({title:"table.cell"});z.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});z.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});z.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});z=s.addMenu({title:"table.row"});z.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});z.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});z.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});z.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});z.addSeparator();z.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});z.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});z.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!l);z.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!l);z=s.addMenu({title:"table.col"});z.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});z.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});z.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{s.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!c.isIE){function p(){var s;for(s=n.getBody().lastChild;s&&s.nodeType==3&&!s.nodeValue.length;s=s.previousSibling){}if(s&&s.nodeName=="TABLE"){n.dom.add(n.getBody(),"p",null,'<br mce_bogus="1" />')}}if(c.isGecko){n.onKeyDown.add(function(t,v){var s,u,w=t.dom;if(v.keyCode==37||v.keyCode==38){s=t.selection.getRng();u=w.getParent(s.startContainer,"table");if(u&&t.getBody().firstChild==u){if(b(s,u)){s=w.createRng();s.setStartBefore(u);s.setEndBefore(u);t.selection.setRng(s);v.preventDefault()}}}})}n.onKeyUp.add(p);n.onSetContent.add(p);n.onVisualAid.add(p);n.onPreProcess.add(function(s,u){var t=u.node.lastChild;if(t&&t.childNodes.length==1&&t.firstChild.nodeName=="BR"){s.dom.remove(t)}});p()}});d({mceTableSplitCells:function(m){m.split()},mceTableMergeCells:function(n){var o,p,m;m=f.dom.getParent(f.selection.getNode(),"th,td");if(m){o=m.rowSpan;p=m.colSpan}if(!f.dom.select("td.mceSelected,th.mceSelected").length){e.open({url:g+"/merge_cells.htm",width:240+parseInt(f.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(f.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:o,cols:p,onaction:function(q){n.merge(m,q.cols,q.rows)},plugin_url:g})}else{n.merge()}},mceTableInsertRowBefore:function(m){m.insertRow(true)},mceTableInsertRowAfter:function(m){m.insertRow()},mceTableInsertColBefore:function(m){m.insertCol(true)},mceTableInsertColAfter:function(m){m.insertCol()},mceTableDeleteCol:function(m){m.deleteCols()},mceTableDeleteRow:function(m){m.deleteRows()},mceTableCutRow:function(m){l=m.cutRows()},mceTableCopyRow:function(m){l=m.copyRows()},mceTablePasteRowBefore:function(m){m.pasteRows(l,true)},mceTablePasteRowAfter:function(m){m.pasteRows(l)},mceTableDelete:function(m){m.deleteTable()}},function(n,m){f.addCommand(m,function(){var o=k();if(o){n(o);f.execCommand("mceRepaint");j()}})});d({mceInsertTable:function(m){e.open({url:g+"/table.htm",width:400+parseInt(f.getLang("table.table_delta_width",0)),height:320+parseInt(f.getLang("table.table_delta_height",0)),inline:1},{plugin_url:g,action:m?m.action:0})},mceTableRowProps:function(){e.open({url:g+"/row.htm",width:400+parseInt(f.getLang("table.rowprops_delta_width",0)),height:295+parseInt(f.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:g})},mceTableCellProps:function(){e.open({url:g+"/cell.htm",width:400+parseInt(f.getLang("table.cellprops_delta_width",0)),height:295+parseInt(f.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:g})}},function(n,m){f.addCommand(m,function(o,p){n(p)})})}});c.PluginManager.add("table",c.plugins.TablePlugin)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/table/editor_plugin_src.js
deleted file mode 100644 (file)
index 5b9b53d..0000000
+++ /dev/null
@@ -1,1209 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function(tinymce) {\r
-       var each = tinymce.each;\r
-\r
-       // Checks if the selection/caret is at the start of the specified block element\r
-       function isAtStart(rng, par) {\r
-               var doc = par.ownerDocument, rng2 = doc.createRange(), elm;\r
-\r
-               rng2.setStartBefore(par);\r
-               rng2.setEnd(rng.endContainer, rng.endOffset);\r
-\r
-               elm = doc.createElement('body');\r
-               elm.appendChild(rng2.cloneContents());\r
-\r
-               // Check for text characters of other elements that should be treated as content\r
-               return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;\r
-       };\r
-\r
-       /**\r
-        * Table Grid class.\r
-        */\r
-       function TableGrid(table, dom, selection) {\r
-               var grid, startPos, endPos, selectedCell;\r
-\r
-               buildGrid();\r
-               selectedCell = dom.getParent(selection.getStart(), 'th,td');\r
-               if (selectedCell) {\r
-                       startPos = getPos(selectedCell);\r
-                       endPos = findEndPos();\r
-                       selectedCell = getCell(startPos.x, startPos.y);\r
-               }\r
-\r
-               function cloneNode(node, children) {\r
-                       node = node.cloneNode(children);\r
-                       node.removeAttribute('id');\r
-\r
-                       return node;\r
-               }\r
-\r
-               function buildGrid() {\r
-                       var startY = 0;\r
-\r
-                       grid = [];\r
-\r
-                       each(['thead', 'tbody', 'tfoot'], function(part) {\r
-                               var rows = dom.select('> ' + part + ' tr', table);\r
-\r
-                               each(rows, function(tr, y) {\r
-                                       y += startY;\r
-\r
-                                       each(dom.select('> td, > th', tr), function(td, x) {\r
-                                               var x2, y2, rowspan, colspan;\r
-\r
-                                               // Skip over existing cells produced by rowspan\r
-                                               if (grid[y]) {\r
-                                                       while (grid[y][x])\r
-                                                               x++;\r
-                                               }\r
-\r
-                                               // Get col/rowspan from cell\r
-                                               rowspan = getSpanVal(td, 'rowspan');\r
-                                               colspan = getSpanVal(td, 'colspan');\r
-\r
-                                               // Fill out rowspan/colspan right and down\r
-                                               for (y2 = y; y2 < y + rowspan; y2++) {\r
-                                                       if (!grid[y2])\r
-                                                               grid[y2] = [];\r
-\r
-                                                       for (x2 = x; x2 < x + colspan; x2++) {\r
-                                                               grid[y2][x2] = {\r
-                                                                       part : part,\r
-                                                                       real : y2 == y && x2 == x,\r
-                                                                       elm : td,\r
-                                                                       rowspan : rowspan,\r
-                                                                       colspan : colspan\r
-                                                               };\r
-                                                       }\r
-                                               }\r
-                                       });\r
-                               });\r
-\r
-                               startY += rows.length;\r
-                       });\r
-               };\r
-\r
-               function getCell(x, y) {\r
-                       var row;\r
-\r
-                       row = grid[y];\r
-                       if (row)\r
-                               return row[x];\r
-               };\r
-\r
-               function getSpanVal(td, name) {\r
-                       return parseInt(td.getAttribute(name) || 1);\r
-               };\r
-\r
-               function setSpanVal(td, name, val) {\r
-                       if (td) {\r
-                               val = parseInt(val);\r
-\r
-                               if (val === 1)\r
-                                       td.removeAttribute(name, 1);\r
-                               else\r
-                                       td.setAttribute(name, val, 1);\r
-                       }\r
-               }\r
-\r
-               function isCellSelected(cell) {\r
-                       return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);\r
-               };\r
-\r
-               function getSelectedRows() {\r
-                       var rows = [];\r
-\r
-                       each(table.rows, function(row) {\r
-                               each(row.cells, function(cell) {\r
-                                       if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {\r
-                                               rows.push(row);\r
-                                               return false;\r
-                                       }\r
-                               });\r
-                       });\r
-\r
-                       return rows;\r
-               };\r
-\r
-               function deleteTable() {\r
-                       var rng = dom.createRng();\r
-\r
-                       rng.setStartAfter(table);\r
-                       rng.setEndAfter(table);\r
-\r
-                       selection.setRng(rng);\r
-\r
-                       dom.remove(table);\r
-               };\r
-\r
-               function cloneCell(cell) {\r
-                       var formatNode;\r
-\r
-                       // Clone formats\r
-                       tinymce.walk(cell, function(node) {\r
-                               var curNode;\r
-\r
-                               if (node.nodeType == 3) {\r
-                                       each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {\r
-                                               node = cloneNode(node, false);\r
-\r
-                                               if (!formatNode)\r
-                                                       formatNode = curNode = node;\r
-                                               else if (curNode)\r
-                                                       curNode.appendChild(node);\r
-\r
-                                               curNode = node;\r
-                                       });\r
-\r
-                                       // Add something to the inner node\r
-                                       if (curNode)\r
-                                               curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';\r
-\r
-                                       return false;\r
-                               }\r
-                       }, 'childNodes');\r
-\r
-                       cell = cloneNode(cell, false);\r
-                       setSpanVal(cell, 'rowSpan', 1);\r
-                       setSpanVal(cell, 'colSpan', 1);\r
-\r
-                       if (formatNode) {\r
-                               cell.appendChild(formatNode);\r
-                       } else {\r
-                               if (!tinymce.isIE)\r
-                                       cell.innerHTML = '<br data-mce-bogus="1" />';\r
-                       }\r
-\r
-                       return cell;\r
-               };\r
-\r
-               function cleanup() {\r
-                       var rng = dom.createRng();\r
-\r
-                       // Empty rows\r
-                       each(dom.select('tr', table), function(tr) {\r
-                               if (tr.cells.length == 0)\r
-                                       dom.remove(tr);\r
-                       });\r
-\r
-                       // Empty table\r
-                       if (dom.select('tr', table).length == 0) {\r
-                               rng.setStartAfter(table);\r
-                               rng.setEndAfter(table);\r
-                               selection.setRng(rng);\r
-                               dom.remove(table);\r
-                               return;\r
-                       }\r
-\r
-                       // Empty header/body/footer\r
-                       each(dom.select('thead,tbody,tfoot', table), function(part) {\r
-                               if (part.rows.length == 0)\r
-                                       dom.remove(part);\r
-                       });\r
-\r
-                       // Restore selection to start position if it still exists\r
-                       buildGrid();\r
-\r
-                       // Restore the selection to the closest table position\r
-                       row = grid[Math.min(grid.length - 1, startPos.y)];\r
-                       if (row) {\r
-                               selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);\r
-                               selection.collapse(true);\r
-                       }\r
-               };\r
-\r
-               function fillLeftDown(x, y, rows, cols) {\r
-                       var tr, x2, r, c, cell;\r
-\r
-                       tr = grid[y][x].elm.parentNode;\r
-                       for (r = 1; r <= rows; r++) {\r
-                               tr = dom.getNext(tr, 'tr');\r
-\r
-                               if (tr) {\r
-                                       // Loop left to find real cell\r
-                                       for (x2 = x; x2 >= 0; x2--) {\r
-                                               cell = grid[y + r][x2].elm;\r
-\r
-                                               if (cell.parentNode == tr) {\r
-                                                       // Append clones after\r
-                                                       for (c = 1; c <= cols; c++)\r
-                                                               dom.insertAfter(cloneCell(cell), cell);\r
-\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-\r
-                                       if (x2 == -1) {\r
-                                               // Insert nodes before first cell\r
-                                               for (c = 1; c <= cols; c++)\r
-                                                       tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function split() {\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       var colSpan, rowSpan, newCell, i;\r
-\r
-                                       if (isCellSelected(cell)) {\r
-                                               cell = cell.elm;\r
-                                               colSpan = getSpanVal(cell, 'colspan');\r
-                                               rowSpan = getSpanVal(cell, 'rowspan');\r
-\r
-                                               if (colSpan > 1 || rowSpan > 1) {\r
-                                                       setSpanVal(cell, 'rowSpan', 1);\r
-                                                       setSpanVal(cell, 'colSpan', 1);\r
-\r
-                                                       // Insert cells right\r
-                                                       for (i = 0; i < colSpan - 1; i++)\r
-                                                               dom.insertAfter(cloneCell(cell), cell);\r
-\r
-                                                       fillLeftDown(x, y, rowSpan - 1, colSpan);\r
-                                               }\r
-                                       }\r
-                               });\r
-                       });\r
-               };\r
-\r
-               function merge(cell, cols, rows) {\r
-                       var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;\r
-\r
-                       // Use specified cell and cols/rows\r
-                       if (cell) {\r
-                               pos = getPos(cell);\r
-                               startX = pos.x;\r
-                               startY = pos.y;\r
-                               endX = startX + (cols - 1);\r
-                               endY = startY + (rows - 1);\r
-                       } else {\r
-                               // Use selection\r
-                               startX = startPos.x;\r
-                               startY = startPos.y;\r
-                               endX = endPos.x;\r
-                               endY = endPos.y;\r
-                       }\r
-\r
-                       // Find start/end cells\r
-                       startCell = getCell(startX, startY);\r
-                       endCell = getCell(endX, endY);\r
-\r
-                       // Check if the cells exists and if they are of the same part for example tbody = tbody\r
-                       if (startCell && endCell && startCell.part == endCell.part) {\r
-                               // Split and rebuild grid\r
-                               split();\r
-                               buildGrid();\r
-\r
-                               // Set row/col span to start cell\r
-                               startCell = getCell(startX, startY).elm;\r
-                               setSpanVal(startCell, 'colSpan', (endX - startX) + 1);\r
-                               setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);\r
-\r
-                               // Remove other cells and add it's contents to the start cell\r
-                               for (y = startY; y <= endY; y++) {\r
-                                       for (x = startX; x <= endX; x++) {\r
-                                               if (!grid[y] || !grid[y][x])\r
-                                                       continue;\r
-\r
-                                               cell = grid[y][x].elm;\r
-\r
-                                               if (cell != startCell) {\r
-                                                       // Move children to startCell\r
-                                                       children = tinymce.grep(cell.childNodes);\r
-                                                       each(children, function(node) {\r
-                                                               startCell.appendChild(node);\r
-                                                       });\r
-\r
-                                                       // Remove bogus nodes if there is children in the target cell\r
-                                                       if (children.length) {\r
-                                                               children = tinymce.grep(startCell.childNodes);\r
-                                                               count = 0;\r
-                                                               each(children, function(node) {\r
-                                                                       if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)\r
-                                                                               startCell.removeChild(node);\r
-                                                               });\r
-                                                       }\r
-                                                       \r
-                                                       // Remove cell\r
-                                                       dom.remove(cell);\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // Remove empty rows etc and restore caret location\r
-                               cleanup();\r
-                       }\r
-               };\r
-\r
-               function insertRow(before) {\r
-                       var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;\r
-\r
-                       // Find first/last row\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       if (isCellSelected(cell)) {\r
-                                               cell = cell.elm;\r
-                                               rowElm = cell.parentNode;\r
-                                               newRow = cloneNode(rowElm, false);\r
-                                               posY = y;\r
-\r
-                                               if (before)\r
-                                                       return false;\r
-                                       }\r
-                               });\r
-\r
-                               if (before)\r
-                                       return !posY;\r
-                       });\r
-\r
-                       for (x = 0; x < grid[0].length; x++) {\r
-                               // Cell not found could be because of an invalid table structure\r
-                               if (!grid[posY][x])\r
-                                       continue;\r
-\r
-                               cell = grid[posY][x].elm;\r
-\r
-                               if (cell != lastCell) {\r
-                                       if (!before) {\r
-                                               rowSpan = getSpanVal(cell, 'rowspan');\r
-                                               if (rowSpan > 1) {\r
-                                                       setSpanVal(cell, 'rowSpan', rowSpan + 1);\r
-                                                       continue;\r
-                                               }\r
-                                       } else {\r
-                                               // Check if cell above can be expanded\r
-                                               if (posY > 0 && grid[posY - 1][x]) {\r
-                                                       otherCell = grid[posY - 1][x].elm;\r
-                                                       rowSpan = getSpanVal(otherCell, 'rowSpan');\r
-                                                       if (rowSpan > 1) {\r
-                                                               setSpanVal(otherCell, 'rowSpan', rowSpan + 1);\r
-                                                               continue;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-\r
-                                       // Insert new cell into new row\r
-                                       newCell = cloneCell(cell);\r
-                                       setSpanVal(newCell, 'colSpan', cell.colSpan);\r
-\r
-                                       newRow.appendChild(newCell);\r
-\r
-                                       lastCell = cell;\r
-                               }\r
-                       }\r
-\r
-                       if (newRow.hasChildNodes()) {\r
-                               if (!before)\r
-                                       dom.insertAfter(newRow, rowElm);\r
-                               else\r
-                                       rowElm.parentNode.insertBefore(newRow, rowElm);\r
-                       }\r
-               };\r
-\r
-               function insertCol(before) {\r
-                       var posX, lastCell;\r
-\r
-                       // Find first/last column\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       if (isCellSelected(cell)) {\r
-                                               posX = x;\r
-\r
-                                               if (before)\r
-                                                       return false;\r
-                                       }\r
-                               });\r
-\r
-                               if (before)\r
-                                       return !posX;\r
-                       });\r
-\r
-                       each(grid, function(row, y) {\r
-                               var cell, rowSpan, colSpan;\r
-\r
-                               if (!row[posX])\r
-                                       return;\r
-\r
-                               cell = row[posX].elm;\r
-                               if (cell != lastCell) {\r
-                                       colSpan = getSpanVal(cell, 'colspan');\r
-                                       rowSpan = getSpanVal(cell, 'rowspan');\r
-\r
-                                       if (colSpan == 1) {\r
-                                               if (!before) {\r
-                                                       dom.insertAfter(cloneCell(cell), cell);\r
-                                                       fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
-                                               } else {\r
-                                                       cell.parentNode.insertBefore(cloneCell(cell), cell);\r
-                                                       fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
-                                               }\r
-                                       } else\r
-                                               setSpanVal(cell, 'colSpan', cell.colSpan + 1);\r
-\r
-                                       lastCell = cell;\r
-                               }\r
-                       });\r
-               };\r
-\r
-               function deleteCols() {\r
-                       var cols = [];\r
-\r
-                       // Get selected column indexes\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {\r
-                                               each(grid, function(row) {\r
-                                                       var cell = row[x].elm, colSpan;\r
-\r
-                                                       colSpan = getSpanVal(cell, 'colSpan');\r
-\r
-                                                       if (colSpan > 1)\r
-                                                               setSpanVal(cell, 'colSpan', colSpan - 1);\r
-                                                       else\r
-                                                               dom.remove(cell);\r
-                                               });\r
-\r
-                                               cols.push(x);\r
-                                       }\r
-                               });\r
-                       });\r
-\r
-                       cleanup();\r
-               };\r
-\r
-               function deleteRows() {\r
-                       var rows;\r
-\r
-                       function deleteRow(tr) {\r
-                               var nextTr, pos, lastCell;\r
-\r
-                               nextTr = dom.getNext(tr, 'tr');\r
-\r
-                               // Move down row spanned cells\r
-                               each(tr.cells, function(cell) {\r
-                                       var rowSpan = getSpanVal(cell, 'rowSpan');\r
-\r
-                                       if (rowSpan > 1) {\r
-                                               setSpanVal(cell, 'rowSpan', rowSpan - 1);\r
-                                               pos = getPos(cell);\r
-                                               fillLeftDown(pos.x, pos.y, 1, 1);\r
-                                       }\r
-                               });\r
-\r
-                               // Delete cells\r
-                               pos = getPos(tr.cells[0]);\r
-                               each(grid[pos.y], function(cell) {\r
-                                       var rowSpan;\r
-\r
-                                       cell = cell.elm;\r
-\r
-                                       if (cell != lastCell) {\r
-                                               rowSpan = getSpanVal(cell, 'rowSpan');\r
-\r
-                                               if (rowSpan <= 1)\r
-                                                       dom.remove(cell);\r
-                                               else\r
-                                                       setSpanVal(cell, 'rowSpan', rowSpan - 1);\r
-\r
-                                               lastCell = cell;\r
-                                       }\r
-                               });\r
-                       };\r
-\r
-                       // Get selected rows and move selection out of scope\r
-                       rows = getSelectedRows();\r
-\r
-                       // Delete all selected rows\r
-                       each(rows.reverse(), function(tr) {\r
-                               deleteRow(tr);\r
-                       });\r
-\r
-                       cleanup();\r
-               };\r
-\r
-               function cutRows() {\r
-                       var rows = getSelectedRows();\r
-\r
-                       dom.remove(rows);\r
-                       cleanup();\r
-\r
-                       return rows;\r
-               };\r
-\r
-               function copyRows() {\r
-                       var rows = getSelectedRows();\r
-\r
-                       each(rows, function(row, i) {\r
-                               rows[i] = cloneNode(row, true);\r
-                       });\r
-\r
-                       return rows;\r
-               };\r
-\r
-               function pasteRows(rows, before) {\r
-                       var selectedRows = getSelectedRows(),\r
-                               targetRow = selectedRows[before ? 0 : selectedRows.length - 1],\r
-                               targetCellCount = targetRow.cells.length;\r
-\r
-                       // Calc target cell count\r
-                       each(grid, function(row) {\r
-                               var match;\r
-\r
-                               targetCellCount = 0;\r
-                               each(row, function(cell, x) {\r
-                                       if (cell.real)\r
-                                               targetCellCount += cell.colspan;\r
-\r
-                                       if (cell.elm.parentNode == targetRow)\r
-                                               match = 1;\r
-                               });\r
-\r
-                               if (match)\r
-                                       return false;\r
-                       });\r
-\r
-                       if (!before)\r
-                               rows.reverse();\r
-\r
-                       each(rows, function(row) {\r
-                               var cellCount = row.cells.length, cell;\r
-\r
-                               // Remove col/rowspans\r
-                               for (i = 0; i < cellCount; i++) {\r
-                                       cell = row.cells[i];\r
-                                       setSpanVal(cell, 'colSpan', 1);\r
-                                       setSpanVal(cell, 'rowSpan', 1);\r
-                               }\r
-\r
-                               // Needs more cells\r
-                               for (i = cellCount; i < targetCellCount; i++)\r
-                                       row.appendChild(cloneCell(row.cells[cellCount - 1]));\r
-\r
-                               // Needs less cells\r
-                               for (i = targetCellCount; i < cellCount; i++)\r
-                                       dom.remove(row.cells[i]);\r
-\r
-                               // Add before/after\r
-                               if (before)\r
-                                       targetRow.parentNode.insertBefore(row, targetRow);\r
-                               else\r
-                                       dom.insertAfter(row, targetRow);\r
-                       });\r
-               };\r
-\r
-               function getPos(target) {\r
-                       var pos;\r
-\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       if (cell.elm == target) {\r
-                                               pos = {x : x, y : y};\r
-                                               return false;\r
-                                       }\r
-                               });\r
-\r
-                               return !pos;\r
-                       });\r
-\r
-                       return pos;\r
-               };\r
-\r
-               function setStartCell(cell) {\r
-                       startPos = getPos(cell);\r
-               };\r
-\r
-               function findEndPos() {\r
-                       var pos, maxX, maxY;\r
-\r
-                       maxX = maxY = 0;\r
-\r
-                       each(grid, function(row, y) {\r
-                               each(row, function(cell, x) {\r
-                                       var colSpan, rowSpan;\r
-\r
-                                       if (isCellSelected(cell)) {\r
-                                               cell = grid[y][x];\r
-\r
-                                               if (x > maxX)\r
-                                                       maxX = x;\r
-\r
-                                               if (y > maxY)\r
-                                                       maxY = y;\r
-\r
-                                               if (cell.real) {\r
-                                                       colSpan = cell.colspan - 1;\r
-                                                       rowSpan = cell.rowspan - 1;\r
-\r
-                                                       if (colSpan) {\r
-                                                               if (x + colSpan > maxX)\r
-                                                                       maxX = x + colSpan;\r
-                                                       }\r
-\r
-                                                       if (rowSpan) {\r
-                                                               if (y + rowSpan > maxY)\r
-                                                                       maxY = y + rowSpan;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               });\r
-                       });\r
-\r
-                       return {x : maxX, y : maxY};\r
-               };\r
-\r
-               function setEndCell(cell) {\r
-                       var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;\r
-\r
-                       endPos = getPos(cell);\r
-\r
-                       if (startPos && endPos) {\r
-                               // Get start/end positions\r
-                               startX = Math.min(startPos.x, endPos.x);\r
-                               startY = Math.min(startPos.y, endPos.y);\r
-                               endX = Math.max(startPos.x, endPos.x);\r
-                               endY = Math.max(startPos.y, endPos.y);\r
-\r
-                               // Expand end positon to include spans\r
-                               maxX = endX;\r
-                               maxY = endY;\r
-\r
-                               // Expand startX\r
-                               for (y = startY; y <= maxY; y++) {\r
-                                       cell = grid[y][startX];\r
-\r
-                                       if (!cell.real) {\r
-                                               if (startX - (cell.colspan - 1) < startX)\r
-                                                       startX -= cell.colspan - 1;\r
-                                       }\r
-                               }\r
-\r
-                               // Expand startY\r
-                               for (x = startX; x <= maxX; x++) {\r
-                                       cell = grid[startY][x];\r
-\r
-                                       if (!cell.real) {\r
-                                               if (startY - (cell.rowspan - 1) < startY)\r
-                                                       startY -= cell.rowspan - 1;\r
-                                       }\r
-                               }\r
-\r
-                               // Find max X, Y\r
-                               for (y = startY; y <= endY; y++) {\r
-                                       for (x = startX; x <= endX; x++) {\r
-                                               cell = grid[y][x];\r
-\r
-                                               if (cell.real) {\r
-                                                       colSpan = cell.colspan - 1;\r
-                                                       rowSpan = cell.rowspan - 1;\r
-\r
-                                                       if (colSpan) {\r
-                                                               if (x + colSpan > maxX)\r
-                                                                       maxX = x + colSpan;\r
-                                                       }\r
-\r
-                                                       if (rowSpan) {\r
-                                                               if (y + rowSpan > maxY)\r
-                                                                       maxY = y + rowSpan;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // Remove current selection\r
-                               dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
-\r
-                               // Add new selection\r
-                               for (y = startY; y <= maxY; y++) {\r
-                                       for (x = startX; x <= maxX; x++) {\r
-                                               if (grid[y][x])\r
-                                                       dom.addClass(grid[y][x].elm, 'mceSelected');\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-\r
-               // Expose to public\r
-               tinymce.extend(this, {\r
-                       deleteTable : deleteTable,\r
-                       split : split,\r
-                       merge : merge,\r
-                       insertRow : insertRow,\r
-                       insertCol : insertCol,\r
-                       deleteCols : deleteCols,\r
-                       deleteRows : deleteRows,\r
-                       cutRows : cutRows,\r
-                       copyRows : copyRows,\r
-                       pasteRows : pasteRows,\r
-                       getPos : getPos,\r
-                       setStartCell : setStartCell,\r
-                       setEndCell : setEndCell\r
-               });\r
-       };\r
-\r
-       tinymce.create('tinymce.plugins.TablePlugin', {\r
-               init : function(ed, url) {\r
-                       var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload\r
-\r
-                       function createTableGrid(node) {\r
-                               var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');\r
-\r
-                               if (tblElm)\r
-                                       return new TableGrid(tblElm, ed.dom, selection);\r
-                       };\r
-\r
-                       function cleanup() {\r
-                               // Restore selection possibilities\r
-                               ed.getBody().style.webkitUserSelect = '';\r
-\r
-                               if (hasCellSelection) {\r
-                                       ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
-                                       hasCellSelection = false;\r
-                               }\r
-                       };\r
-\r
-                       // Register buttons\r
-                       each([\r
-                               ['table', 'table.desc', 'mceInsertTable', true],\r
-                               ['delete_table', 'table.del', 'mceTableDelete'],\r
-                               ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],\r
-                               ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],\r
-                               ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],\r
-                               ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],\r
-                               ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],\r
-                               ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],\r
-                               ['row_props', 'table.row_desc', 'mceTableRowProps', true],\r
-                               ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],\r
-                               ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],\r
-                               ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]\r
-                       ], function(c) {\r
-                               ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});\r
-                       });\r
-\r
-                       // Select whole table is a table border is clicked\r
-                       if (!tinymce.isIE) {\r
-                               ed.onClick.add(function(ed, e) {\r
-                                       e = e.target;\r
-\r
-                                       if (e.nodeName === 'TABLE') {\r
-                                               ed.selection.select(e);\r
-                                               ed.nodeChanged();\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       ed.onPreProcess.add(function(ed, args) {\r
-                               var nodes, i, node, dom = ed.dom, value;\r
-\r
-                               nodes = dom.select('table', args.node);\r
-                               i = nodes.length;\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-                                       dom.setAttrib(node, 'data-mce-style', '');\r
-\r
-                                       if ((value = dom.getAttrib(node, 'width'))) {\r
-                                               dom.setStyle(node, 'width', value);\r
-                                               dom.setAttrib(node, 'width', '');\r
-                                       }\r
-\r
-                                       if ((value = dom.getAttrib(node, 'height'))) {\r
-                                               dom.setStyle(node, 'height', value);\r
-                                               dom.setAttrib(node, 'height', '');\r
-                                       }\r
-                               }\r
-                       });\r
-\r
-                       // Handle node change updates\r
-                       ed.onNodeChange.add(function(ed, cm, n) {\r
-                               var p;\r
-\r
-                               n = ed.selection.getStart();\r
-                               p = ed.dom.getParent(n, 'td,th,caption');\r
-                               cm.setActive('table', n.nodeName === 'TABLE' || !!p);\r
-\r
-                               // Disable table tools if we are in caption\r
-                               if (p && p.nodeName === 'CAPTION')\r
-                                       p = 0;\r
-\r
-                               cm.setDisabled('delete_table', !p);\r
-                               cm.setDisabled('delete_col', !p);\r
-                               cm.setDisabled('delete_table', !p);\r
-                               cm.setDisabled('delete_row', !p);\r
-                               cm.setDisabled('col_after', !p);\r
-                               cm.setDisabled('col_before', !p);\r
-                               cm.setDisabled('row_after', !p);\r
-                               cm.setDisabled('row_before', !p);\r
-                               cm.setDisabled('row_props', !p);\r
-                               cm.setDisabled('cell_props', !p);\r
-                               cm.setDisabled('split_cells', !p);\r
-                               cm.setDisabled('merge_cells', !p);\r
-                       });\r
-\r
-                       ed.onInit.add(function(ed) {\r
-                               var startTable, startCell, dom = ed.dom, tableGrid;\r
-\r
-                               winMan = ed.windowManager;\r
-\r
-                               // Add cell selection logic\r
-                               ed.onMouseDown.add(function(ed, e) {\r
-                                       if (e.button != 2) {\r
-                                               cleanup();\r
-\r
-                                               startCell = dom.getParent(e.target, 'td,th');\r
-                                               startTable = dom.getParent(startCell, 'table');\r
-                                       }\r
-                               });\r
-\r
-                               dom.bind(ed.getDoc(), 'mouseover', function(e) {\r
-                                       var sel, table, target = e.target;\r
-\r
-                                       if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {\r
-                                               table = dom.getParent(target, 'table');\r
-                                               if (table == startTable) {\r
-                                                       if (!tableGrid) {\r
-                                                               tableGrid = createTableGrid(table);\r
-                                                               tableGrid.setStartCell(startCell);\r
-\r
-                                                               ed.getBody().style.webkitUserSelect = 'none';\r
-                                                       }\r
-\r
-                                                       tableGrid.setEndCell(target);\r
-                                                       hasCellSelection = true;\r
-                                               }\r
-\r
-                                               // Remove current selection\r
-                                               sel = ed.selection.getSel();\r
-\r
-                                               try {\r
-                                                       if (sel.removeAllRanges)\r
-                                                               sel.removeAllRanges();\r
-                                                       else\r
-                                                               sel.empty();\r
-                                               } catch (ex) {\r
-                                                       // IE9 might throw errors here\r
-                                               }\r
-\r
-                                               e.preventDefault();\r
-                                       }\r
-                               });\r
-\r
-                               ed.onMouseUp.add(function(ed, e) {\r
-                                       var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;\r
-\r
-                                       // Move selection to startCell\r
-                                       if (startCell) {\r
-                                               if (tableGrid)\r
-                                                       ed.getBody().style.webkitUserSelect = '';\r
-\r
-                                               function setPoint(node, start) {\r
-                                                       var walker = new tinymce.dom.TreeWalker(node, node);\r
-\r
-                                                       do {\r
-                                                               // Text node\r
-                                                               if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
-                                                                       if (start)\r
-                                                                               rng.setStart(node, 0);\r
-                                                                       else\r
-                                                                               rng.setEnd(node, node.nodeValue.length);\r
-\r
-                                                                       return;\r
-                                                               }\r
-\r
-                                                               // BR element\r
-                                                               if (node.nodeName == 'BR') {\r
-                                                                       if (start)\r
-                                                                               rng.setStartBefore(node);\r
-                                                                       else\r
-                                                                               rng.setEndBefore(node);\r
-\r
-                                                                       return;\r
-                                                               }\r
-                                                       } while (node = (start ? walker.next() : walker.prev()));\r
-                                               };\r
-\r
-                                               // Try to expand text selection as much as we can only Gecko supports cell selection\r
-                                               selectedCells = dom.select('td.mceSelected,th.mceSelected');\r
-                                               if (selectedCells.length > 0) {\r
-                                                       rng = dom.createRng();\r
-                                                       node = selectedCells[0];\r
-                                                       endNode = selectedCells[selectedCells.length - 1];\r
-                                                       rng.setStart(node);
-                                                       rng.setEnd(node);
-\r
-                                                       setPoint(node, 1);\r
-                                                       walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));\r
-\r
-                                                       do {\r
-                                                               if (node.nodeName == 'TD' || node.nodeName == 'TH') {\r
-                                                                       if (!dom.hasClass(node, 'mceSelected'))\r
-                                                                               break;\r
-\r
-                                                                       lastNode = node;\r
-                                                               }\r
-                                                       } while (node = walker.next());\r
-\r
-                                                       setPoint(lastNode);\r
-\r
-                                                       sel.setRng(rng);\r
-                                               }\r
-\r
-                                               ed.nodeChanged();\r
-                                               startCell = tableGrid = startTable = null;\r
-                                       }\r
-                               });\r
-\r
-                               ed.onKeyUp.add(function(ed, e) {\r
-                                       cleanup();\r
-                               });\r
-\r
-                               // Add context menu\r
-                               if (ed && ed.plugins.contextmenu) {\r
-                                       ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
-                                               var sm, se = ed.selection, el = se.getNode() || ed.getBody();\r
-\r
-                                               if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
-                                                       m.removeAll();\r
-\r
-                                                       if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {\r
-                                                               m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
-                                                               m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
-                                                               m.addSeparator();\r
-                                                       }\r
-\r
-                                                       if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {\r
-                                                               m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
-                                                               m.addSeparator();\r
-                                                       }\r
-\r
-                                                       m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});\r
-                                                       m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});\r
-                                                       m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});\r
-                                                       m.addSeparator();\r
-\r
-                                                       // Cell menu\r
-                                                       sm = m.addMenu({title : 'table.cell'});\r
-                                                       sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});\r
-                                                       sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});\r
-                                                       sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});\r
-\r
-                                                       // Row menu\r
-                                                       sm = m.addMenu({title : 'table.row'});\r
-                                                       sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});\r
-                                                       sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});\r
-                                                       sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});\r
-                                                       sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});\r
-                                                       sm.addSeparator();\r
-                                                       sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});\r
-                                                       sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});\r
-                                                       sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);\r
-                                                       sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);\r
-\r
-                                                       // Column menu\r
-                                                       sm = m.addMenu({title : 'table.col'});\r
-                                                       sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});\r
-                                                       sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});\r
-                                                       sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});\r
-                                               } else\r
-                                                       m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});\r
-                                       });\r
-                               }\r
-\r
-                               // Fixes an issue on Gecko where it's impossible to place the caret behind a table\r
-                               // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled\r
-                               if (!tinymce.isIE) {\r
-                                       function fixTableCaretPos() {\r
-                                               var last;\r
-\r
-                                               // Skip empty text nodes form the end\r
-                                               for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;\r
-\r
-                                               if (last && last.nodeName == 'TABLE')\r
-                                                       ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');\r
-                                       };\r
-\r
-                                       // Fixes an bug where it's impossible to place the caret before a table in Gecko\r
-                                       // this fix solves it by detecting when the caret is at the beginning of such a table\r
-                                       // and then manually moves the caret infront of the table\r
-                                       if (tinymce.isGecko) {\r
-                                               ed.onKeyDown.add(function(ed, e) {\r
-                                                       var rng, table, dom = ed.dom;\r
-\r
-                                                       // On gecko it's not possible to place the caret before a table\r
-                                                       if (e.keyCode == 37 || e.keyCode == 38) {\r
-                                                               rng = ed.selection.getRng();\r
-                                                               table = dom.getParent(rng.startContainer, 'table');\r
-\r
-                                                               if (table && ed.getBody().firstChild == table) {\r
-                                                                       if (isAtStart(rng, table)) {\r
-                                                                               rng = dom.createRng();\r
-\r
-                                                                               rng.setStartBefore(table);\r
-                                                                               rng.setEndBefore(table);\r
-\r
-                                                                               ed.selection.setRng(rng);\r
-\r
-                                                                               e.preventDefault();\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               });\r
-                                       }\r
-\r
-                                       ed.onKeyUp.add(fixTableCaretPos);\r
-                                       ed.onSetContent.add(fixTableCaretPos);\r
-                                       ed.onVisualAid.add(fixTableCaretPos);\r
-\r
-                                       ed.onPreProcess.add(function(ed, o) {\r
-                                               var last = o.node.lastChild;\r
-\r
-                                               if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')\r
-                                                       ed.dom.remove(last);\r
-                                       });\r
-\r
-                                       fixTableCaretPos();\r
-                               }\r
-                       });\r
-\r
-                       // Register action commands\r
-                       each({\r
-                               mceTableSplitCells : function(grid) {\r
-                                       grid.split();\r
-                               },\r
-\r
-                               mceTableMergeCells : function(grid) {\r
-                                       var rowSpan, colSpan, cell;\r
-\r
-                                       cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');\r
-                                       if (cell) {\r
-                                               rowSpan = cell.rowSpan;\r
-                                               colSpan = cell.colSpan;\r
-                                       }\r
-\r
-                                       if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
-                                               winMan.open({\r
-                                                       url : url + '/merge_cells.htm',\r
-                                                       width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),\r
-                                                       height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),\r
-                                                       inline : 1\r
-                                               }, {\r
-                                                       rows : rowSpan,\r
-                                                       cols : colSpan,\r
-                                                       onaction : function(data) {\r
-                                                               grid.merge(cell, data.cols, data.rows);\r
-                                                       },\r
-                                                       plugin_url : url\r
-                                               });\r
-                                       } else\r
-                                               grid.merge();\r
-                               },\r
-\r
-                               mceTableInsertRowBefore : function(grid) {\r
-                                       grid.insertRow(true);\r
-                               },\r
-\r
-                               mceTableInsertRowAfter : function(grid) {\r
-                                       grid.insertRow();\r
-                               },\r
-\r
-                               mceTableInsertColBefore : function(grid) {\r
-                                       grid.insertCol(true);\r
-                               },\r
-\r
-                               mceTableInsertColAfter : function(grid) {\r
-                                       grid.insertCol();\r
-                               },\r
-\r
-                               mceTableDeleteCol : function(grid) {\r
-                                       grid.deleteCols();\r
-                               },\r
-\r
-                               mceTableDeleteRow : function(grid) {\r
-                                       grid.deleteRows();\r
-                               },\r
-\r
-                               mceTableCutRow : function(grid) {\r
-                                       clipboardRows = grid.cutRows();\r
-                               },\r
-\r
-                               mceTableCopyRow : function(grid) {\r
-                                       clipboardRows = grid.copyRows();\r
-                               },\r
-\r
-                               mceTablePasteRowBefore : function(grid) {\r
-                                       grid.pasteRows(clipboardRows, true);\r
-                               },\r
-\r
-                               mceTablePasteRowAfter : function(grid) {\r
-                                       grid.pasteRows(clipboardRows);\r
-                               },\r
-\r
-                               mceTableDelete : function(grid) {\r
-                                       grid.deleteTable();\r
-                               }\r
-                       }, function(func, name) {\r
-                               ed.addCommand(name, function() {\r
-                                       var grid = createTableGrid();\r
-\r
-                                       if (grid) {\r
-                                               func(grid);\r
-                                               ed.execCommand('mceRepaint');\r
-                                               cleanup();\r
-                                       }\r
-                               });\r
-                       });\r
-\r
-                       // Register dialog commands\r
-                       each({\r
-                               mceInsertTable : function(val) {\r
-                                       winMan.open({\r
-                                               url : url + '/table.htm',\r
-                                               width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),\r
-                                               height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),\r
-                                               inline : 1\r
-                                       }, {\r
-                                               plugin_url : url,\r
-                                               action : val ? val.action : 0\r
-                                       });\r
-                               },\r
-\r
-                               mceTableRowProps : function() {\r
-                                       winMan.open({\r
-                                               url : url + '/row.htm',\r
-                                               width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),\r
-                                               height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),\r
-                                               inline : 1\r
-                                       }, {\r
-                                               plugin_url : url\r
-                                       });\r
-                               },\r
-\r
-                               mceTableCellProps : function() {\r
-                                       winMan.open({\r
-                                               url : url + '/cell.htm',\r
-                                               width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),\r
-                                               height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),\r
-                                               inline : 1\r
-                                       }, {\r
-                                               plugin_url : url\r
-                                       });\r
-                               }\r
-                       }, function(func, name) {\r
-                               ed.addCommand(name, function(ui, val) {\r
-                                       func(val);\r
-                               });\r
-                       });\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);\r
-})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/js/cell.js b/plugins/TinyMCE/js/plugins/table/js/cell.js
deleted file mode 100644 (file)
index d6f3290..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var ed;\r
-\r
-function init() {\r
-       ed = tinyMCEPopup.editor;\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
-       document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
-       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')\r
-\r
-       var inst = ed;\r
-       var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");\r
-       var formObj = document.forms[0];\r
-       var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));\r
-\r
-       // Get table cell data\r
-       var celltype = tdElm.nodeName.toLowerCase();\r
-       var align = ed.dom.getAttrib(tdElm, 'align');\r
-       var valign = ed.dom.getAttrib(tdElm, 'valign');\r
-       var width = trimSize(getStyle(tdElm, 'width', 'width'));\r
-       var height = trimSize(getStyle(tdElm, 'height', 'height'));\r
-       var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));\r
-       var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));\r
-       var className = ed.dom.getAttrib(tdElm, 'class');\r
-       var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
-       var id = ed.dom.getAttrib(tdElm, 'id');\r
-       var lang = ed.dom.getAttrib(tdElm, 'lang');\r
-       var dir = ed.dom.getAttrib(tdElm, 'dir');\r
-       var scope = ed.dom.getAttrib(tdElm, 'scope');\r
-\r
-       // Setup form\r
-       addClassesToList('class', 'table_cell_styles');\r
-       TinyMCE_EditableSelects.init();\r
-\r
-       if (!ed.dom.hasClass(tdElm, 'mceSelected')) {\r
-               formObj.bordercolor.value = bordercolor;\r
-               formObj.bgcolor.value = bgcolor;\r
-               formObj.backgroundimage.value = backgroundimage;\r
-               formObj.width.value = width;\r
-               formObj.height.value = height;\r
-               formObj.id.value = id;\r
-               formObj.lang.value = lang;\r
-               formObj.style.value = ed.dom.serializeStyle(st);\r
-               selectByValue(formObj, 'align', align);\r
-               selectByValue(formObj, 'valign', valign);\r
-               selectByValue(formObj, 'class', className, true, true);\r
-               selectByValue(formObj, 'celltype', celltype);\r
-               selectByValue(formObj, 'dir', dir);\r
-               selectByValue(formObj, 'scope', scope);\r
-\r
-               // Resize some elements\r
-               if (isVisible('backgroundimagebrowser'))\r
-                       document.getElementById('backgroundimage').style.width = '180px';\r
-\r
-               updateColor('bordercolor_pick', 'bordercolor');\r
-               updateColor('bgcolor_pick', 'bgcolor');\r
-       } else\r
-               tinyMCEPopup.dom.hide('action');\r
-}\r
-\r
-function updateAction() {\r
-       var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];\r
-\r
-       if (!AutoValidator.validate(formObj)) {\r
-               tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');\r
-               return false;\r
-       }\r
-\r
-       tinyMCEPopup.restoreSelection();\r
-       el = ed.selection.getStart();\r
-       tdElm = ed.dom.getParent(el, "td,th");\r
-       trElm = ed.dom.getParent(el, "tr");\r
-       tableElm = ed.dom.getParent(el, "table");\r
-\r
-       // Cell is selected\r
-       if (ed.dom.hasClass(tdElm, 'mceSelected')) {\r
-               // Update all selected sells\r
-               tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {\r
-                       updateCell(td);\r
-               });\r
-\r
-               ed.addVisual();\r
-               ed.nodeChanged();\r
-               inst.execCommand('mceEndUndoLevel');\r
-               tinyMCEPopup.close();\r
-               return;\r
-       }\r
-\r
-       switch (getSelectValue(formObj, 'action')) {\r
-               case "cell":\r
-                       var celltype = getSelectValue(formObj, 'celltype');\r
-                       var scope = getSelectValue(formObj, 'scope');\r
-\r
-                       function doUpdate(s) {\r
-                               if (s) {\r
-                                       updateCell(tdElm);\r
-\r
-                                       ed.addVisual();\r
-                                       ed.nodeChanged();\r
-                                       inst.execCommand('mceEndUndoLevel');\r
-                                       tinyMCEPopup.close();\r
-                               }\r
-                       };\r
-\r
-                       if (ed.getParam("accessibility_warnings", 1)) {\r
-                               if (celltype == "th" && scope == "")\r
-                                       tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);\r
-                               else\r
-                                       doUpdate(1);\r
-\r
-                               return;\r
-                       }\r
-\r
-                       updateCell(tdElm);\r
-                       break;\r
-\r
-               case "row":\r
-                       var cell = trElm.firstChild;\r
-\r
-                       if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
-                               cell = nextCell(cell);\r
-\r
-                       do {\r
-                               cell = updateCell(cell, true);\r
-                       } while ((cell = nextCell(cell)) != null);\r
-\r
-                       break;\r
-\r
-               case "col":\r
-                       var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");\r
-\r
-                       if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
-                               cell = nextCell(cell);\r
-\r
-                       do {\r
-                               if (cell == tdElm)\r
-                                       break;\r
-                               col += cell.getAttribute("colspan");\r
-                       } while ((cell = nextCell(cell)) != null);\r
-\r
-                       for (var i=0; i<rows.length; i++) {\r
-                               cell = rows[i].firstChild;\r
-\r
-                               if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
-                                       cell = nextCell(cell);\r
-\r
-                               curr = 0;\r
-                               do {\r
-                                       if (curr == col) {\r
-                                               cell = updateCell(cell, true);\r
-                                               break;\r
-                                       }\r
-                                       curr += cell.getAttribute("colspan");\r
-                               } while ((cell = nextCell(cell)) != null);\r
-                       }\r
-\r
-                       break;\r
-\r
-               case "all":\r
-                       var rows = tableElm.getElementsByTagName("tr");\r
-\r
-                       for (var i=0; i<rows.length; i++) {\r
-                               var cell = rows[i].firstChild;\r
-\r
-                               if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
-                                       cell = nextCell(cell);\r
-\r
-                               do {\r
-                                       cell = updateCell(cell, true);\r
-                               } while ((cell = nextCell(cell)) != null);\r
-                       }\r
-\r
-                       break;\r
-       }\r
-\r
-       ed.addVisual();\r
-       ed.nodeChanged();\r
-       inst.execCommand('mceEndUndoLevel');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function nextCell(elm) {\r
-       while ((elm = elm.nextSibling) != null) {\r
-               if (elm.nodeName == "TD" || elm.nodeName == "TH")\r
-                       return elm;\r
-       }\r
-\r
-       return null;\r
-}\r
-\r
-function updateCell(td, skip_id) {\r
-       var inst = ed;\r
-       var formObj = document.forms[0];\r
-       var curCellType = td.nodeName.toLowerCase();\r
-       var celltype = getSelectValue(formObj, 'celltype');\r
-       var doc = inst.getDoc();\r
-       var dom = ed.dom;\r
-\r
-       if (!skip_id)\r
-               dom.setAttrib(td, 'id', formObj.id.value);\r
-\r
-       dom.setAttrib(td, 'align', formObj.align.value);\r
-       dom.setAttrib(td, 'vAlign', formObj.valign.value);\r
-       dom.setAttrib(td, 'lang', formObj.lang.value);\r
-       dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));\r
-       dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));\r
-       dom.setAttrib(td, 'scope', formObj.scope.value);\r
-       dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));\r
-\r
-       // Clear deprecated attributes\r
-       ed.dom.setAttrib(td, 'width', '');\r
-       ed.dom.setAttrib(td, 'height', '');\r
-       ed.dom.setAttrib(td, 'bgColor', '');\r
-       ed.dom.setAttrib(td, 'borderColor', '');\r
-       ed.dom.setAttrib(td, 'background', '');\r
-\r
-       // Set styles\r
-       td.style.width = getCSSSize(formObj.width.value);\r
-       td.style.height = getCSSSize(formObj.height.value);\r
-       if (formObj.bordercolor.value != "") {\r
-               td.style.borderColor = formObj.bordercolor.value;\r
-               td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;\r
-               td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;\r
-       } else\r
-               td.style.borderColor = '';\r
-\r
-       td.style.backgroundColor = formObj.bgcolor.value;\r
-\r
-       if (formObj.backgroundimage.value != "")\r
-               td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
-       else\r
-               td.style.backgroundImage = '';\r
-\r
-       if (curCellType != celltype) {\r
-               // changing to a different node type\r
-               var newCell = doc.createElement(celltype);\r
-\r
-               for (var c=0; c<td.childNodes.length; c++)\r
-                       newCell.appendChild(td.childNodes[c].cloneNode(1));\r
-\r
-               for (var a=0; a<td.attributes.length; a++)\r
-                       ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));\r
-\r
-               td.parentNode.replaceChild(newCell, td);\r
-               td = newCell;\r
-       }\r
-\r
-       dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));\r
-\r
-       return td;\r
-}\r
-\r
-function changedBackgroundImage() {\r
-       var formObj = document.forms[0];\r
-       var st = ed.dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
-       formObj.style.value = ed.dom.serializeStyle(st);\r
-}\r
-\r
-function changedSize() {\r
-       var formObj = document.forms[0];\r
-       var st = ed.dom.parseStyle(formObj.style.value);\r
-\r
-       var width = formObj.width.value;\r
-       if (width != "")\r
-               st['width'] = getCSSSize(width);\r
-       else\r
-               st['width'] = "";\r
-\r
-       var height = formObj.height.value;\r
-       if (height != "")\r
-               st['height'] = getCSSSize(height);\r
-       else\r
-               st['height'] = "";\r
-\r
-       formObj.style.value = ed.dom.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
-       var formObj = document.forms[0];\r
-       var st = ed.dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-color'] = formObj.bgcolor.value;\r
-       st['border-color'] = formObj.bordercolor.value;\r
-\r
-       formObj.style.value = ed.dom.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
-       var formObj = document.forms[0];\r
-       var st = ed.dom.parseStyle(formObj.style.value);\r
-\r
-       if (st['background-image'])\r
-               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
-       else\r
-               formObj.backgroundimage.value = '';\r
-\r
-       if (st['width'])\r
-               formObj.width.value = trimSize(st['width']);\r
-\r
-       if (st['height'])\r
-               formObj.height.value = trimSize(st['height']);\r
-\r
-       if (st['background-color']) {\r
-               formObj.bgcolor.value = st['background-color'];\r
-               updateColor('bgcolor_pick','bgcolor');\r
-       }\r
-\r
-       if (st['border-color']) {\r
-               formObj.bordercolor.value = st['border-color'];\r
-               updateColor('bordercolor_pick','bordercolor');\r
-       }\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/merge_cells.js b/plugins/TinyMCE/js/plugins/table/js/merge_cells.js
deleted file mode 100644 (file)
index 7ee4bf0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var MergeCellsDialog = {\r
-       init : function() {\r
-               var f = document.forms[0];\r
-\r
-               f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);\r
-               f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);\r
-       },\r
-\r
-       merge : function() {\r
-               var func, f = document.forms[0];\r
-\r
-               tinyMCEPopup.restoreSelection();\r
-\r
-               func = tinyMCEPopup.getWindowArg('onaction');\r
-\r
-               func({\r
-                       cols : f.numcols.value,\r
-                       rows : f.numrows.value\r
-               });\r
-\r
-               tinyMCEPopup.close();\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/row.js b/plugins/TinyMCE/js/plugins/table/js/row.js
deleted file mode 100644 (file)
index a13d695..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-function init() {\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
-       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-\r
-       var inst = tinyMCEPopup.editor;\r
-       var dom = inst.dom;\r
-       var trElm = dom.getParent(inst.selection.getStart(), "tr");\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(dom.getAttrib(trElm, "style"));\r
-\r
-       // Get table row data\r
-       var rowtype = trElm.parentNode.nodeName.toLowerCase();\r
-       var align = dom.getAttrib(trElm, 'align');\r
-       var valign = dom.getAttrib(trElm, 'valign');\r
-       var height = trimSize(getStyle(trElm, 'height', 'height'));\r
-       var className = dom.getAttrib(trElm, 'class');\r
-       var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
-       var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
-       var id = dom.getAttrib(trElm, 'id');\r
-       var lang = dom.getAttrib(trElm, 'lang');\r
-       var dir = dom.getAttrib(trElm, 'dir');\r
-\r
-       selectByValue(formObj, 'rowtype', rowtype);\r
-\r
-       // Any cells selected\r
-       if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {\r
-               // Setup form\r
-               addClassesToList('class', 'table_row_styles');\r
-               TinyMCE_EditableSelects.init();\r
-\r
-               formObj.bgcolor.value = bgcolor;\r
-               formObj.backgroundimage.value = backgroundimage;\r
-               formObj.height.value = height;\r
-               formObj.id.value = id;\r
-               formObj.lang.value = lang;\r
-               formObj.style.value = dom.serializeStyle(st);\r
-               selectByValue(formObj, 'align', align);\r
-               selectByValue(formObj, 'valign', valign);\r
-               selectByValue(formObj, 'class', className, true, true);\r
-               selectByValue(formObj, 'dir', dir);\r
-\r
-               // Resize some elements\r
-               if (isVisible('backgroundimagebrowser'))\r
-                       document.getElementById('backgroundimage').style.width = '180px';\r
-\r
-               updateColor('bgcolor_pick', 'bgcolor');\r
-       } else\r
-               tinyMCEPopup.dom.hide('action');\r
-}\r
-\r
-function updateAction() {\r
-       var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];\r
-       var action = getSelectValue(formObj, 'action');\r
-\r
-       if (!AutoValidator.validate(formObj)) {\r
-               tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');\r
-               return false;\r
-       }\r
-\r
-       tinyMCEPopup.restoreSelection();\r
-       trElm = dom.getParent(inst.selection.getStart(), "tr");\r
-       tableElm = dom.getParent(inst.selection.getStart(), "table");\r
-\r
-       // Update all selected rows\r
-       if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {\r
-               tinymce.each(tableElm.rows, function(tr) {\r
-                       var i;\r
-\r
-                       for (i = 0; i < tr.cells.length; i++) {\r
-                               if (dom.hasClass(tr.cells[i], 'mceSelected')) {\r
-                                       updateRow(tr, true);\r
-                                       return;\r
-                               }\r
-                       }\r
-               });\r
-\r
-               inst.addVisual();\r
-               inst.nodeChanged();\r
-               inst.execCommand('mceEndUndoLevel');\r
-               tinyMCEPopup.close();\r
-               return;\r
-       }\r
-\r
-       switch (action) {\r
-               case "row":\r
-                       updateRow(trElm);\r
-                       break;\r
-\r
-               case "all":\r
-                       var rows = tableElm.getElementsByTagName("tr");\r
-\r
-                       for (var i=0; i<rows.length; i++)\r
-                               updateRow(rows[i], true);\r
-\r
-                       break;\r
-\r
-               case "odd":\r
-               case "even":\r
-                       var rows = tableElm.getElementsByTagName("tr");\r
-\r
-                       for (var i=0; i<rows.length; i++) {\r
-                               if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
-                                       updateRow(rows[i], true, true);\r
-                       }\r
-\r
-                       break;\r
-       }\r
-\r
-       inst.addVisual();\r
-       inst.nodeChanged();\r
-       inst.execCommand('mceEndUndoLevel');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function updateRow(tr_elm, skip_id, skip_parent) {\r
-       var inst = tinyMCEPopup.editor;\r
-       var formObj = document.forms[0];\r
-       var dom = inst.dom;\r
-       var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
-       var rowtype = getSelectValue(formObj, 'rowtype');\r
-       var doc = inst.getDoc();\r
-\r
-       // Update row element\r
-       if (!skip_id)\r
-               dom.setAttrib(tr_elm, 'id', formObj.id.value);\r
-\r
-       dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));\r
-       dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));\r
-       dom.setAttrib(tr_elm, 'lang', formObj.lang.value);\r
-       dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));\r
-       dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
-       dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
-\r
-       // Clear deprecated attributes\r
-       dom.setAttrib(tr_elm, 'background', '');\r
-       dom.setAttrib(tr_elm, 'bgColor', '');\r
-       dom.setAttrib(tr_elm, 'height', '');\r
-\r
-       // Set styles\r
-       tr_elm.style.height = getCSSSize(formObj.height.value);\r
-       tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
-\r
-       if (formObj.backgroundimage.value != "")\r
-               tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
-       else\r
-               tr_elm.style.backgroundImage = '';\r
-\r
-       // Setup new rowtype\r
-       if (curRowType != rowtype && !skip_parent) {\r
-               // first, clone the node we are working on\r
-               var newRow = tr_elm.cloneNode(1);\r
-\r
-               // next, find the parent of its new destination (creating it if necessary)\r
-               var theTable = dom.getParent(tr_elm, "table");\r
-               var dest = rowtype;\r
-               var newParent = null;\r
-               for (var i = 0; i < theTable.childNodes.length; i++) {\r
-                       if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
-                               newParent = theTable.childNodes[i];\r
-               }\r
-\r
-               if (newParent == null) {\r
-                       newParent = doc.createElement(dest);\r
-\r
-                       if (theTable.firstChild.nodeName == 'CAPTION')\r
-                               inst.dom.insertAfter(newParent, theTable.firstChild);\r
-                       else\r
-                               theTable.insertBefore(newParent, theTable.firstChild);\r
-               }\r
-\r
-               // append the row to the new parent\r
-               newParent.appendChild(newRow);\r
-\r
-               // remove the original\r
-               tr_elm.parentNode.removeChild(tr_elm);\r
-\r
-               // set tr_elm to the new node\r
-               tr_elm = newRow;\r
-       }\r
-\r
-       dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));\r
-}\r
-\r
-function changedBackgroundImage() {\r
-       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
-       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       if (st['background-image'])\r
-               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
-       else\r
-               formObj.backgroundimage.value = '';\r
-\r
-       if (st['height'])\r
-               formObj.height.value = trimSize(st['height']);\r
-\r
-       if (st['background-color']) {\r
-               formObj.bgcolor.value = st['background-color'];\r
-               updateColor('bgcolor_pick','bgcolor');\r
-       }\r
-}\r
-\r
-function changedSize() {\r
-       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       var height = formObj.height.value;\r
-       if (height != "")\r
-               st['height'] = getCSSSize(height);\r
-       else\r
-               st['height'] = "";\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
-       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-color'] = formObj.bgcolor.value;\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/table.js b/plugins/TinyMCE/js/plugins/table/js/table.js
deleted file mode 100644 (file)
index 520d857..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;\r
-\r
-function insertTable() {\r
-       var formObj = document.forms[0];\r
-       var inst = tinyMCEPopup.editor, dom = inst.dom;\r
-       var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;\r
-       var html = '', capEl, elm;\r
-       var cellLimit, rowLimit, colLimit;\r
-\r
-       tinyMCEPopup.restoreSelection();\r
-\r
-       if (!AutoValidator.validate(formObj)) {\r
-               tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');\r
-               return false;\r
-       }\r
-\r
-       elm = dom.getParent(inst.selection.getNode(), 'table');\r
-\r
-       // Get form data\r
-       cols = formObj.elements['cols'].value;\r
-       rows = formObj.elements['rows'].value;\r
-       border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;\r
-       cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";\r
-       cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";\r
-       align = getSelectValue(formObj, "align");\r
-       frame = getSelectValue(formObj, "tframe");\r
-       rules = getSelectValue(formObj, "rules");\r
-       width = formObj.elements['width'].value;\r
-       height = formObj.elements['height'].value;\r
-       bordercolor = formObj.elements['bordercolor'].value;\r
-       bgcolor = formObj.elements['bgcolor'].value;\r
-       className = getSelectValue(formObj, "class");\r
-       id = formObj.elements['id'].value;\r
-       summary = formObj.elements['summary'].value;\r
-       style = formObj.elements['style'].value;\r
-       dir = formObj.elements['dir'].value;\r
-       lang = formObj.elements['lang'].value;\r
-       background = formObj.elements['backgroundimage'].value;\r
-       caption = formObj.elements['caption'].checked;\r
-\r
-       cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);\r
-       rowLimit = tinyMCEPopup.getParam('table_row_limit', false);\r
-       colLimit = tinyMCEPopup.getParam('table_col_limit', false);\r
-\r
-       // Validate table size\r
-       if (colLimit && cols > colLimit) {\r
-               tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));\r
-               return false;\r
-       } else if (rowLimit && rows > rowLimit) {\r
-               tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));\r
-               return false;\r
-       } else if (cellLimit && cols * rows > cellLimit) {\r
-               tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));\r
-               return false;\r
-       }\r
-\r
-       // Update table\r
-       if (action == "update") {\r
-               dom.setAttrib(elm, 'cellPadding', cellpadding, true);\r
-               dom.setAttrib(elm, 'cellSpacing', cellspacing, true);\r
-               dom.setAttrib(elm, 'border', border);\r
-               dom.setAttrib(elm, 'align', align);\r
-               dom.setAttrib(elm, 'frame', frame);\r
-               dom.setAttrib(elm, 'rules', rules);\r
-               dom.setAttrib(elm, 'class', className);\r
-               dom.setAttrib(elm, 'style', style);\r
-               dom.setAttrib(elm, 'id', id);\r
-               dom.setAttrib(elm, 'summary', summary);\r
-               dom.setAttrib(elm, 'dir', dir);\r
-               dom.setAttrib(elm, 'lang', lang);\r
-\r
-               capEl = inst.dom.select('caption', elm)[0];\r
-\r
-               if (capEl && !caption)\r
-                       capEl.parentNode.removeChild(capEl);\r
-\r
-               if (!capEl && caption) {\r
-                       capEl = elm.ownerDocument.createElement('caption');\r
-\r
-                       if (!tinymce.isIE)\r
-                               capEl.innerHTML = '<br data-mce-bogus="1"/>';\r
-\r
-                       elm.insertBefore(capEl, elm.firstChild);\r
-               }\r
-\r
-               if (width && inst.settings.inline_styles) {\r
-                       dom.setStyle(elm, 'width', width);\r
-                       dom.setAttrib(elm, 'width', '');\r
-               } else {\r
-                       dom.setAttrib(elm, 'width', width, true);\r
-                       dom.setStyle(elm, 'width', '');\r
-               }\r
-\r
-               // Remove these since they are not valid XHTML\r
-               dom.setAttrib(elm, 'borderColor', '');\r
-               dom.setAttrib(elm, 'bgColor', '');\r
-               dom.setAttrib(elm, 'background', '');\r
-\r
-               if (height && inst.settings.inline_styles) {\r
-                       dom.setStyle(elm, 'height', height);\r
-                       dom.setAttrib(elm, 'height', '');\r
-               } else {\r
-                       dom.setAttrib(elm, 'height', height, true);\r
-                       dom.setStyle(elm, 'height', '');\r
-               }\r
-\r
-               if (background != '')\r
-                       elm.style.backgroundImage = "url('" + background + "')";\r
-               else\r
-                       elm.style.backgroundImage = '';\r
-\r
-/*             if (tinyMCEPopup.getParam("inline_styles")) {\r
-                       if (width != '')\r
-                               elm.style.width = getCSSSize(width);\r
-               }*/\r
-\r
-               if (bordercolor != "") {\r
-                       elm.style.borderColor = bordercolor;\r
-                       elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;\r
-                       elm.style.borderWidth = border == "" ? "1px" : border;\r
-               } else\r
-                       elm.style.borderColor = '';\r
-\r
-               elm.style.backgroundColor = bgcolor;\r
-               elm.style.height = getCSSSize(height);\r
-\r
-               inst.addVisual();\r
-\r
-               // Fix for stange MSIE align bug\r
-               //elm.outerHTML = elm.outerHTML;\r
-\r
-               inst.nodeChanged();\r
-               inst.execCommand('mceEndUndoLevel');\r
-\r
-               // Repaint if dimensions changed\r
-               if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)\r
-                       inst.execCommand('mceRepaint');\r
-\r
-               tinyMCEPopup.close();\r
-               return true;\r
-       }\r
-\r
-       // Create new table\r
-       html += '<table';\r
-\r
-       html += makeAttrib('id', id);\r
-       html += makeAttrib('border', border);\r
-       html += makeAttrib('cellpadding', cellpadding);\r
-       html += makeAttrib('cellspacing', cellspacing);\r
-       html += makeAttrib('data-mce-new', '1');\r
-\r
-       if (width && inst.settings.inline_styles) {\r
-               if (style)\r
-                       style += '; ';\r
-\r
-               // Force px\r
-               if (/^[0-9\.]+$/.test(width))\r
-                       width += 'px';\r
-\r
-               style += 'width: ' + width;\r
-       } else\r
-               html += makeAttrib('width', width);\r
-\r
-/*     if (height) {\r
-               if (style)\r
-                       style += '; ';\r
-\r
-               style += 'height: ' + height;\r
-       }*/\r
-\r
-       //html += makeAttrib('height', height);\r
-       //html += makeAttrib('bordercolor', bordercolor);\r
-       //html += makeAttrib('bgcolor', bgcolor);\r
-       html += makeAttrib('align', align);\r
-       html += makeAttrib('frame', frame);\r
-       html += makeAttrib('rules', rules);\r
-       html += makeAttrib('class', className);\r
-       html += makeAttrib('style', style);\r
-       html += makeAttrib('summary', summary);\r
-       html += makeAttrib('dir', dir);\r
-       html += makeAttrib('lang', lang);\r
-       html += '>';\r
-\r
-       if (caption) {\r
-               if (!tinymce.isIE)\r
-                       html += '<caption><br data-mce-bogus="1"/></caption>';\r
-               else\r
-                       html += '<caption></caption>';\r
-       }\r
-\r
-       for (var y=0; y<rows; y++) {\r
-               html += "<tr>";\r
-\r
-               for (var x=0; x<cols; x++) {\r
-                       if (!tinymce.isIE)\r
-                               html += '<td><br data-mce-bogus="1"/></td>';\r
-                       else\r
-                               html += '<td></td>';\r
-               }\r
-\r
-               html += "</tr>";\r
-       }\r
-\r
-       html += "</table>";\r
-\r
-       // Move table\r
-       if (inst.settings.fix_table_elements) {\r
-               var patt = '';\r
-\r
-               inst.focus();\r
-               inst.selection.setContent('<br class="_mce_marker" />');\r
-\r
-               tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {\r
-                       if (patt)\r
-                               patt += ',';\r
-\r
-                       patt += n + ' ._mce_marker';\r
-               });\r
-\r
-               tinymce.each(inst.dom.select(patt), function(n) {\r
-                       inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);\r
-               });\r
-\r
-               dom.setOuterHTML(dom.select('br._mce_marker')[0], html);\r
-       } else\r
-               inst.execCommand('mceInsertContent', false, html);\r
-\r
-       tinymce.each(dom.select('table[data-mce-new]'), function(node) {\r
-               var td = dom.select('td', node);\r
-\r
-               try {\r
-                       // IE9 might fail to do this selection\r
-                       inst.selection.select(td[0], true);\r
-                       inst.selection.collapse();\r
-               } catch (ex) {\r
-                       // Ignore\r
-               }\r
-\r
-               dom.setAttrib(node, 'data-mce-new', '');\r
-       });\r
-\r
-       inst.addVisual();\r
-       inst.execCommand('mceEndUndoLevel');\r
-\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function makeAttrib(attrib, value) {\r
-       var formObj = document.forms[0];\r
-       var valueElm = formObj.elements[attrib];\r
-\r
-       if (typeof(value) == "undefined" || value == null) {\r
-               value = "";\r
-\r
-               if (valueElm)\r
-                       value = valueElm.value;\r
-       }\r
-\r
-       if (value == "")\r
-               return "";\r
-\r
-       // XML encode it\r
-       value = value.replace(/&/g, '&amp;');\r
-       value = value.replace(/\"/g, '&quot;');\r
-       value = value.replace(/</g, '&lt;');\r
-       value = value.replace(/>/g, '&gt;');\r
-\r
-       return ' ' + attrib + '="' + value + '"';\r
-}\r
-\r
-function init() {\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
-       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
-       document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
-       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-\r
-       var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');\r
-       var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";\r
-       var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";\r
-       var inst = tinyMCEPopup.editor, dom = inst.dom;\r
-       var formObj = document.forms[0];\r
-       var elm = dom.getParent(inst.selection.getNode(), "table");\r
-\r
-       action = tinyMCEPopup.getWindowArg('action');\r
-\r
-       if (!action)\r
-               action = elm ? "update" : "insert";\r
-\r
-       if (elm && action != "insert") {\r
-               var rowsAr = elm.rows;\r
-               var cols = 0;\r
-               for (var i=0; i<rowsAr.length; i++)\r
-                       if (rowsAr[i].cells.length > cols)\r
-                               cols = rowsAr[i].cells.length;\r
-\r
-               cols = cols;\r
-               rows = rowsAr.length;\r
-\r
-               st = dom.parseStyle(dom.getAttrib(elm, "style"));\r
-               border = trimSize(getStyle(elm, 'border', 'borderWidth'));\r
-               cellpadding = dom.getAttrib(elm, 'cellpadding', "");\r
-               cellspacing = dom.getAttrib(elm, 'cellspacing', "");\r
-               width = trimSize(getStyle(elm, 'width', 'width'));\r
-               height = trimSize(getStyle(elm, 'height', 'height'));\r
-               bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));\r
-               bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));\r
-               align = dom.getAttrib(elm, 'align', align);\r
-               frame = dom.getAttrib(elm, 'frame');\r
-               rules = dom.getAttrib(elm, 'rules');\r
-               className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));\r
-               id = dom.getAttrib(elm, 'id');\r
-               summary = dom.getAttrib(elm, 'summary');\r
-               style = dom.serializeStyle(st);\r
-               dir = dom.getAttrib(elm, 'dir');\r
-               lang = dom.getAttrib(elm, 'lang');\r
-               background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
-               formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;\r
-\r
-               orgTableWidth = width;\r
-               orgTableHeight = height;\r
-\r
-               action = "update";\r
-               formObj.insert.value = inst.getLang('update');\r
-       }\r
-\r
-       addClassesToList('class', "table_styles");\r
-       TinyMCE_EditableSelects.init();\r
-\r
-       // Update form\r
-       selectByValue(formObj, 'align', align);\r
-       selectByValue(formObj, 'tframe', frame);\r
-       selectByValue(formObj, 'rules', rules);\r
-       selectByValue(formObj, 'class', className, true, true);\r
-       formObj.cols.value = cols;\r
-       formObj.rows.value = rows;\r
-       formObj.border.value = border;\r
-       formObj.cellpadding.value = cellpadding;\r
-       formObj.cellspacing.value = cellspacing;\r
-       formObj.width.value = width;\r
-       formObj.height.value = height;\r
-       formObj.bordercolor.value = bordercolor;\r
-       formObj.bgcolor.value = bgcolor;\r
-       formObj.id.value = id;\r
-       formObj.summary.value = summary;\r
-       formObj.style.value = style;\r
-       formObj.dir.value = dir;\r
-       formObj.lang.value = lang;\r
-       formObj.backgroundimage.value = background;\r
-\r
-       updateColor('bordercolor_pick', 'bordercolor');\r
-       updateColor('bgcolor_pick', 'bgcolor');\r
-\r
-       // Resize some elements\r
-       if (isVisible('backgroundimagebrowser'))\r
-               document.getElementById('backgroundimage').style.width = '180px';\r
-\r
-       // Disable some fields in update mode\r
-       if (action == "update") {\r
-               formObj.cols.disabled = true;\r
-               formObj.rows.disabled = true;\r
-       }\r
-}\r
-\r
-function changedSize() {\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-/*     var width = formObj.width.value;\r
-       if (width != "")\r
-               st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";\r
-       else\r
-               st['width'] = "";*/\r
-\r
-       var height = formObj.height.value;\r
-       if (height != "")\r
-               st['height'] = getCSSSize(height);\r
-       else\r
-               st['height'] = "";\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedBackgroundImage() {\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedBorder() {\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       // Update border width if the element has a color\r
-       if (formObj.border.value != "" && formObj.bordercolor.value != "")\r
-               st['border-width'] = formObj.border.value + "px";\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       st['background-color'] = formObj.bgcolor.value;\r
-\r
-       if (formObj.bordercolor.value != "") {\r
-               st['border-color'] = formObj.bordercolor.value;\r
-\r
-               // Add border-width if it's missing\r
-               if (!st['border-width'])\r
-                       st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";\r
-       }\r
-\r
-       formObj.style.value = dom.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
-       var formObj = document.forms[0];\r
-       var st = dom.parseStyle(formObj.style.value);\r
-\r
-       if (st['background-image'])\r
-               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
-       else\r
-               formObj.backgroundimage.value = '';\r
-\r
-       if (st['width'])\r
-               formObj.width.value = trimSize(st['width']);\r
-\r
-       if (st['height'])\r
-               formObj.height.value = trimSize(st['height']);\r
-\r
-       if (st['background-color']) {\r
-               formObj.bgcolor.value = st['background-color'];\r
-               updateColor('bgcolor_pick','bgcolor');\r
-       }\r
-\r
-       if (st['border-color']) {\r
-               formObj.bordercolor.value = st['border-color'];\r
-               updateColor('bordercolor_pick','bordercolor');\r
-       }\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/table/langs/en_dlg.js
deleted file mode 100644 (file)
index 0816efb..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-tinyMCE.addI18n('en.table_dlg',{\r
-general_tab:"General",\r
-advanced_tab:"Advanced",\r
-general_props:"General properties",\r
-advanced_props:"Advanced properties",\r
-rowtype:"Row in table part",\r
-title:"Insert/Modify table",\r
-width:"Width",\r
-height:"Height",\r
-cols:"Columns",\r
-rows:"Rows",\r
-cellspacing:"Cellspacing",\r
-cellpadding:"Cellpadding",\r
-border:"Border",\r
-align:"Alignment",\r
-align_default:"Default",\r
-align_left:"Left",\r
-align_right:"Right",\r
-align_middle:"Center",\r
-row_title:"Table row properties",\r
-cell_title:"Table cell properties",\r
-cell_type:"Cell type",\r
-valign:"Vertical alignment",\r
-align_top:"Top",\r
-align_bottom:"Bottom",\r
-bordercolor:"Border color",\r
-bgcolor:"Background color",\r
-merge_cells_title:"Merge table cells",\r
-id:"Id",\r
-style:"Style",\r
-langdir:"Language direction",\r
-langcode:"Language code",\r
-mime:"Target MIME type",\r
-ltr:"Left to right",\r
-rtl:"Right to left",\r
-bgimage:"Background image",\r
-summary:"Summary",\r
-td:"Data",\r
-th:"Header",\r
-cell_cell:"Update current cell",\r
-cell_row:"Update all cells in row",\r
-cell_col:"Update all cells in column",\r
-cell_all:"Update all cells in table",\r
-row_row:"Update current row",\r
-row_odd:"Update odd rows in table",\r
-row_even:"Update even rows in table",\r
-row_all:"Update all rows in table",\r
-thead:"Table Head",\r
-tbody:"Table Body",\r
-tfoot:"Table Foot",\r
-scope:"Scope",\r
-rowgroup:"Row Group",\r
-colgroup:"Col Group",\r
-col_limit:"You've exceeded the maximum number of columns of {$cols}.",\r
-row_limit:"You've exceeded the maximum number of rows of {$rows}.",\r
-cell_limit:"You've exceeded the maximum number of cells of {$cells}.",\r
-missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",\r
-caption:"Table caption",\r
-frame:"Frame",\r
-frame_none:"none",\r
-frame_groups:"groups",\r
-frame_rows:"rows",\r
-frame_cols:"cols",\r
-frame_all:"all",\r
-rules:"Rules",\r
-rules_void:"void",\r
-rules_above:"above",\r
-rules_below:"below",\r
-rules_hsides:"hsides",\r
-rules_lhs:"lhs",\r
-rules_rhs:"rhs",\r
-rules_vsides:"vsides",\r
-rules_box:"box",\r
-rules_border:"border"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/merge_cells.htm b/plugins/TinyMCE/js/plugins/table/merge_cells.htm
deleted file mode 100644 (file)
index d231090..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#table_dlg.merge_cells_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="js/merge_cells.js"></script>\r
-</head>\r
-<body style="margin: 8px" role="application">\r
-<form onsubmit="MergeCellsDialog.merge();return false;" action="#">\r
-       <fieldset>\r
-               <legend>{#table_dlg.merge_cells_title}</legend>\r
-               <table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">\r
-                       <tr>\r
-                               <td><label for="numcols">{#table_dlg.cols}</label>:</td>\r
-                               <td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td><label for="numrows">{#table_dlg.rows}</label>:</td>\r
-                               <td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>\r
-                       </tr>\r
-               </table>\r
-       </fieldset>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/row.htm b/plugins/TinyMCE/js/plugins/table/row.htm
deleted file mode 100644 (file)
index 1885401..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#table_dlg.row_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/row.js"></script>\r
-       <link href="css/row.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="tablerow" style="display: none" role="application">\r
-       <form onsubmit="updateAction();return false;" action="#">\r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.general_props}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0">\r
-                                               <tr>\r
-                                                       <td><label for="rowtype">{#table_dlg.rowtype}</label></td>\r
-                                                       <td class="col2">\r
-                                                               <select id="rowtype" name="rowtype" class="mceFocus">\r
-                                                                       <option value="thead">{#table_dlg.thead}</option>\r
-                                                                       <option value="tbody">{#table_dlg.tbody}</option>\r
-                                                                       <option value="tfoot">{#table_dlg.tfoot}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="align">{#table_dlg.align}</label></td>\r
-                                                       <td class="col2">\r
-                                                               <select id="align" name="align">\r
-                                                                       <option value="">{#not_set}</option>\r
-                                                                       <option value="center">{#table_dlg.align_middle}</option>\r
-                                                                       <option value="left">{#table_dlg.align_left}</option>\r
-                                                                       <option value="right">{#table_dlg.align_right}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="valign">{#table_dlg.valign}</label></td>\r
-                                                       <td class="col2">\r
-                                                               <select id="valign" name="valign">\r
-                                                                       <option value="">{#not_set}</option>\r
-                                                                       <option value="top">{#table_dlg.align_top}</option>\r
-                                                                       <option value="middle">{#table_dlg.align_middle}</option>\r
-                                                                       <option value="bottom">{#table_dlg.align_bottom}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr id="styleSelectRow">\r
-                                                       <td><label for="class">{#class_name}</label></td>\r
-                                                       <td class="col2">\r
-                                                               <select id="class" name="class" class="mceEditableSelect">\r
-                                                                       <option value="" selected="selected">{#not_set}</option>\r
-                                                               </select>\r
-                                                       </td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="height">{#table_dlg.height}</label></td>\r
-                                                       <td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>\r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.advanced_props}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
-                                                       <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
-                                                       <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="dir" name="dir" style="width: 200px"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
-                                                       <td>\r
-                                                               <input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>\r
-                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td> \r
-                                                       <td>\r
-                                                               <span role="group" aria-labelledby="bgcolor_label">\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
-                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                               </span>\r
-                                                       </td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <div>\r
-                               <select id="action" name="action">\r
-                                       <option value="row">{#table_dlg.row_row}</option>\r
-                                       <option value="odd">{#table_dlg.row_odd}</option>\r
-                                       <option value="even">{#table_dlg.row_even}</option>\r
-                                       <option value="all">{#table_dlg.row_all}</option>\r
-                               </select>\r
-                       </div>\r
-\r
-                       <input type="submit" id="insert" name="insert" value="{#update}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/table.htm b/plugins/TinyMCE/js/plugins/table/table.htm
deleted file mode 100644 (file)
index 09d3700..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#table_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/table.js"></script>\r
-       <link href="css/table.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body id="table" style="display: none" role="application" aria-labelledby="app_title">\r
-       <span style="display:none;" id="app_title">{#table_dlg.title}</span>\r
-       <form onsubmit="insertTable();return false;" action="#">\r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="general_tab" aria-controls="general_panel" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
-                               <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.general_props}</legend>\r
-                                       <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">\r
-                                               <tr>\r
-                                                       <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>\r
-                                                       <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>\r
-                                                       <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>\r
-                                                       <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>\r
-                                                       <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
-                                                       <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>\r
-                                                       <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>\r
-                                                       <td><select id="align" name="align">\r
-                                                               <option value="">{#not_set}</option>\r
-                                                               <option value="center">{#table_dlg.align_middle}</option>\r
-                                                               <option value="left">{#table_dlg.align_left}</option>\r
-                                                               <option value="right">{#table_dlg.align_right}</option>\r
-                                                       </select></td>\r
-                                                       <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>\r
-                                                       <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>\r
-                                               </tr>\r
-                                               <tr id="width_row">\r
-                                                       <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>\r
-                                                       <td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>\r
-                                                       <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>\r
-                                                       <td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>\r
-                                               </tr>\r
-                                               <tr id="styleSelectRow" >\r
-                                                       <td><label id="classlabel" for="class">{#class_name}</label></td>\r
-                                                       <td colspan="3" >\r
-                                                        <select id="class" name="class" class="mceEditableSelect">\r
-                                                               <option value="" selected="selected">{#not_set}</option>\r
-                                                        </select></td>\r
-                                               </tr>\r
-                                               <tr>\r
-                                                       <td class="column1" ><label for="caption">{#table_dlg.caption}</label></td> \r
-                                                       <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-\r
-                       <div id="advanced_panel" class="panel">\r
-                               <fieldset>\r
-                                       <legend>{#table_dlg.advanced_props}</legend>\r
-\r
-                                       <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
-                                                       <td><input id="id" name="id" type="text" value="" class="advfield" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="summary">{#table_dlg.summary}</label></td> \r
-                                                       <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
-                                                       <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> \r
-                                                       <td>\r
-                                                               <input id="lang" name="lang" type="text" value="" class="advfield" />\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>\r
-                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td> \r
-                                                       <td>\r
-                                                               <select id="tframe" name="tframe" class="advfield"> \r
-                                                                               <option value="">{#not_set}</option>\r
-                                                                               <option value="void">{#table_dlg.rules_void}</option>\r
-                                                                               <option value="above">{#table_dlg.rules_above}</option> \r
-                                                                               <option value="below">{#table_dlg.rules_below}</option> \r
-                                                                               <option value="hsides">{#table_dlg.rules_hsides}</option> \r
-                                                                               <option value="lhs">{#table_dlg.rules_lhs}</option> \r
-                                                                               <option value="rhs">{#table_dlg.rules_rhs}</option> \r
-                                                                               <option value="vsides">{#table_dlg.rules_vsides}</option> \r
-                                                                               <option value="box">{#table_dlg.rules_box}</option> \r
-                                                                               <option value="border">{#table_dlg.rules_border}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="rules">{#table_dlg.rules}</label></td> \r
-                                                       <td>\r
-                                                               <select id="rules" name="rules" class="advfield"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="none">{#table_dlg.frame_none}</option>\r
-                                                                               <option value="groups">{#table_dlg.frame_groups}</option>\r
-                                                                               <option value="rows">{#table_dlg.frame_rows}</option>\r
-                                                                               <option value="cols">{#table_dlg.frame_cols}</option>\r
-                                                                               <option value="all">{#table_dlg.frame_all}</option>\r
-                                                                       </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
-                                                       <td>\r
-                                                               <select id="dir" name="dir" class="advfield"> \r
-                                                                               <option value="">{#not_set}</option> \r
-                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
-                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
-                                                               </select>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr role="group" aria-labelledby="bordercolor_label">\r
-                                                       <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>\r
-                                                                               <td id="bordercolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-\r
-                                               <tr role="group" aria-labelledby="bgcolor_label">\r
-                                                       <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
-                                                       <td>\r
-                                                               <table role="presentation" border="0" cellpadding="0" cellspacing="0">\r
-                                                                       <tr>\r
-                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
-                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
-                                                                       </tr>\r
-                                                               </table>\r
-                                                       </td> \r
-                                               </tr>\r
-                                       </table>\r
-                               </fieldset>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/template/blank.htm b/plugins/TinyMCE/js/plugins/template/blank.htm
deleted file mode 100644 (file)
index ecde53f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>blank_page</title>\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <script type="text/javascript">\r
-               parent.TemplateDialog.loadCSSFiles(document);\r
-       </script>\r
-</head>\r
-<body id="mceTemplatePreview" class="mceContentBody">\r
-\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/template/css/template.css b/plugins/TinyMCE/js/plugins/template/css/template.css
deleted file mode 100644 (file)
index 2d23a49..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#frmbody {\r
-       padding: 10px;\r
-       background-color: #FFF;\r
-       border: 1px solid #CCC;\r
-}\r
-\r
-.frmRow {\r
-       margin-bottom: 10px;\r
-}\r
-\r
-#templatesrc {\r
-       border: none;\r
-       width: 320px;\r
-       height: 240px;\r
-}\r
-\r
-.title {\r
-       padding-bottom: 5px;\r
-}\r
-\r
-.mceActionPanel {\r
-       padding-top: 5px;\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/template/editor_plugin.js b/plugins/TinyMCE/js/plugins/template/editor_plugin.js
deleted file mode 100644 (file)
index ebe3c27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+this.editor.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+this.editor.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+this.editor.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+this.editor.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/template/editor_plugin_src.js
deleted file mode 100644 (file)
index 9cac269..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.plugins.TemplatePlugin', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceTemplate', function(ui) {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/template.htm',\r
-                                       width : ed.getParam('template_popup_width', 750),\r
-                                       height : ed.getParam('template_popup_height', 600),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceInsertTemplate', t._insertTemplate, t);\r
-\r
-                       // Register buttons\r
-                       ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'});\r
-\r
-                       ed.onPreProcess.add(function(ed, o) {\r
-                               var dom = ed.dom;\r
-\r
-                               each(dom.select('div', o.node), function(e) {\r
-                                       if (dom.hasClass(e, 'mceTmpl')) {\r
-                                               each(dom.select('*', e), function(e) {\r
-                                                       if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))\r
-                                                               e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));\r
-                                               });\r
-\r
-                                               t._replaceVals(e);\r
-                                       }\r
-                               });\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Template plugin',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://www.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               _insertTemplate : function(ui, v) {\r
-                       var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent();\r
-\r
-                       h = v.content;\r
-\r
-                       each(t.editor.getParam('template_replace_values'), function(v, k) {\r
-                               if (typeof(v) != 'function')\r
-                                       h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);\r
-                       });\r
-\r
-                       el = dom.create('div', null, h);\r
-\r
-                       // Find template element within div\r
-                       n = dom.select('.mceTmpl', el);\r
-                       if (n && n.length > 0) {\r
-                               el = dom.create('div', null);\r
-                               el.appendChild(n[0].cloneNode(true));\r
-                       }\r
-\r
-                       function hasClass(n, c) {\r
-                               return new RegExp('\\b' + c + '\\b', 'g').test(n.className);\r
-                       };\r
-\r
-                       each(dom.select('*', el), function(n) {\r
-                               // Replace cdate\r
-                               if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|')))\r
-                                       n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format")));\r
-\r
-                               // Replace mdate\r
-                               if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))\r
-                                       n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));\r
-\r
-                               // Replace selection\r
-                               if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|')))\r
-                                       n.innerHTML = sel;\r
-                       });\r
-\r
-                       t._replaceVals(el);\r
-\r
-                       ed.execCommand('mceInsertContent', false, el.innerHTML);\r
-                       ed.addVisual();\r
-               },\r
-\r
-               _replaceVals : function(e) {\r
-                       var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values');\r
-\r
-                       each(dom.select('*', e), function(e) {\r
-                               each(vl, function(v, k) {\r
-                                       if (dom.hasClass(e, k)) {\r
-                                               if (typeof(vl[k]) == 'function')\r
-                                                       vl[k](e);\r
-                                       }\r
-                               });\r
-                       });\r
-               },\r
-\r
-               _getDateTime : function(d, fmt) {\r
-                               if (!fmt)\r
-                                       return "";\r
-\r
-                               function addZeros(value, len) {\r
-                                       var i;\r
-\r
-                                       value = "" + value;\r
-\r
-                                       if (value.length < len) {\r
-                                               for (i=0; i<(len-value.length); i++)\r
-                                                       value = "0" + value;\r
-                                       }\r
-\r
-                                       return value;\r
-                               }\r
-\r
-                               fmt = fmt.replace("%D", "%m/%d/%y");\r
-                               fmt = fmt.replace("%r", "%I:%M:%S %p");\r
-                               fmt = fmt.replace("%Y", "" + d.getFullYear());\r
-                               fmt = fmt.replace("%y", "" + d.getYear());\r
-                               fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
-                               fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
-                               fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
-                               fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
-                               fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
-                               fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
-                               fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
-                               fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);\r
-                               fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);\r
-                               fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);\r
-                               fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);\r
-                               fmt = fmt.replace("%%", "%");\r
-\r
-                               return fmt;\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/js/template.js b/plugins/TinyMCE/js/plugins/template/js/template.js
deleted file mode 100644 (file)
index bc3045d..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var TemplateDialog = {\r
-       preInit : function() {\r
-               var url = tinyMCEPopup.getParam("template_external_list_url");\r
-\r
-               if (url != null)\r
-                       document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');\r
-       },\r
-\r
-       init : function() {\r
-               var ed = tinyMCEPopup.editor, tsrc, sel, x, u;\r
-\r
-               tsrc = ed.getParam("template_templates", false);\r
-               sel = document.getElementById('tpath');\r
-\r
-               // Setup external template list\r
-               if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') {\r
-                       for (x=0, tsrc = []; x<tinyMCETemplateList.length; x++)\r
-                               tsrc.push({title : tinyMCETemplateList[x][0], src : tinyMCETemplateList[x][1], description : tinyMCETemplateList[x][2]});\r
-               }\r
-\r
-               for (x=0; x<tsrc.length; x++)\r
-                       sel.options[sel.options.length] = new Option(tsrc[x].title, tinyMCEPopup.editor.documentBaseURI.toAbsolute(tsrc[x].src));\r
-\r
-               this.resize();\r
-               this.tsrc = tsrc;\r
-       },\r
-\r
-       resize : function() {\r
-               var w, h, e;\r
-\r
-               if (!self.innerWidth) {\r
-                       w = document.body.clientWidth - 50;\r
-                       h = document.body.clientHeight - 160;\r
-               } else {\r
-                       w = self.innerWidth - 50;\r
-                       h = self.innerHeight - 170;\r
-               }\r
-\r
-               e = document.getElementById('templatesrc');\r
-\r
-               if (e) {\r
-                       e.style.height = Math.abs(h) + 'px';\r
-                       e.style.width = Math.abs(w - 5) + 'px';\r
-               }\r
-       },\r
-\r
-       loadCSSFiles : function(d) {\r
-               var ed = tinyMCEPopup.editor;\r
-\r
-               tinymce.each(ed.getParam("content_css", '').split(','), function(u) {\r
-                       d.write('<link href="' + ed.documentBaseURI.toAbsolute(u) + '" rel="stylesheet" type="text/css" />');\r
-               });\r
-       },\r
-\r
-       selectTemplate : function(u, ti) {\r
-               var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc;\r
-\r
-               if (!u)\r
-                       return;\r
-\r
-               d.body.innerHTML = this.templateHTML = this.getFileContents(u);\r
-\r
-               for (x=0; x<tsrc.length; x++) {\r
-                       if (tsrc[x].title == ti)\r
-                               document.getElementById('tmpldesc').innerHTML = tsrc[x].description || '';\r
-               }\r
-       },\r
-\r
-       insert : function() {\r
-               tinyMCEPopup.execCommand('mceInsertTemplate', false, {\r
-                       content : this.templateHTML,\r
-                       selection : tinyMCEPopup.editor.selection.getContent()\r
-               });\r
-\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       getFileContents : function(u) {\r
-               var x, d, t = 'text/plain';\r
-\r
-               function g(s) {\r
-                       x = 0;\r
-\r
-                       try {\r
-                               x = new ActiveXObject(s);\r
-                       } catch (s) {\r
-                       }\r
-\r
-                       return x;\r
-               };\r
-\r
-               x = window.ActiveXObject ? g('Msxml2.XMLHTTP') || g('Microsoft.XMLHTTP') : new XMLHttpRequest();\r
-\r
-               // Synchronous AJAX load file\r
-               x.overrideMimeType && x.overrideMimeType(t);\r
-               x.open("GET", u, false);\r
-               x.send(null);\r
-\r
-               return x.responseText;\r
-       }\r
-};\r
-\r
-TemplateDialog.preInit();\r
-tinyMCEPopup.onInit.add(TemplateDialog.init, TemplateDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/template/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/template/langs/en_dlg.js
deleted file mode 100644 (file)
index 2471c3f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-tinyMCE.addI18n('en.template_dlg',{\r
-title:"Templates",\r
-label:"Template",\r
-desc_label:"Description",\r
-desc:"Insert predefined template content",\r
-select:"Select a template",\r
-preview:"Preview",\r
-warning:"Warning: Updating a template with a different one may cause data loss.",\r
-mdate_format:"%Y-%m-%d %H:%M:%S",\r
-cdate_format:"%Y-%m-%d %H:%M:%S",\r
-months_long:"January,February,March,April,May,June,July,August,September,October,November,December",\r
-months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",\r
-day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",\r
-day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/template.htm b/plugins/TinyMCE/js/plugins/template/template.htm
deleted file mode 100644 (file)
index b2182e6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#template_dlg.title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/template.js"></script>\r
-       <link href="css/template.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-<body onresize="TemplateDialog.resize();"> \r
-       <form onsubmit="TemplateDialog.insert();return false;">\r
-               <div id="frmbody">\r
-                       <div class="title">{#template_dlg.desc}</div>\r
-                       <div class="frmRow"><label for="tpath" title="{#template_dlg.select}">{#template_dlg.label}:</label>\r
-                       <select id="tpath" name="tpath" onchange="TemplateDialog.selectTemplate(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);" class="mceFocus">\r
-                               <option value="">{#template_dlg.select}...</option>\r
-                       </select>\r
-                       <span id="warning"></span></div>\r
-                       <div class="frmRow"><label for="tdesc">{#template_dlg.desc_label}:</label>\r
-                       <span id="tmpldesc"></span></div>\r
-                       <fieldset>\r
-                               <legend>{#template_dlg.preview}</legend>\r
-                               <iframe id="templatesrc" name="templatesrc" src="blank.htm" width="690" height="400" frameborder="0"></iframe>\r
-                       </fieldset>\r
-               </div>\r
-               \r
-               <div class="mceActionPanel">\r
-                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-       </form>\r
-</body> \r
-</html> \r
diff --git a/plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js b/plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js
deleted file mode 100644 (file)
index 1a148e8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g<a.length;g++){l=a[g].nodeValue;l=l.replace(/(\u00a0)/g,'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js
deleted file mode 100644 (file)
index df98590..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.VisualChars', {\r
-               init : function(ed, url) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-\r
-                       // Register commands\r
-                       ed.addCommand('mceVisualChars', t._toggleVisualChars, t);\r
-\r
-                       // Register buttons\r
-                       ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});\r
-\r
-                       ed.onBeforeGetContent.add(function(ed, o) {\r
-                               if (t.state && o.format != 'raw' && !o.draft) {\r
-                                       t.state = true;\r
-                                       t._toggleVisualChars(false);\r
-                               }\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Visual characters',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _toggleVisualChars : function(bookmark) {\r
-                       var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;\r
-\r
-                       t.state = !t.state;\r
-                       ed.controlManager.setActive('visualchars', t.state);\r
-\r
-                       if (bookmark)\r
-                               bm = s.getBookmark();\r
-\r
-                       if (t.state) {\r
-                               nl = [];\r
-                               tinymce.walk(b, function(n) {\r
-                                       if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)\r
-                                               nl.push(n);\r
-                               }, 'childNodes');\r
-\r
-                               for (i = 0; i < nl.length; i++) {\r
-                                       nv = nl[i].nodeValue;\r
-                                       nv = nv.replace(/(\u00a0)/g, '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');\r
-\r
-                                       div = ed.dom.create('div', null, nv);\r
-                                       while (node = div.lastChild)\r
-                                               ed.dom.insertAfter(node, nl[i]);\r
-\r
-                                       ed.dom.remove(nl[i]);\r
-                               }\r
-                       } else {\r
-                               nl = ed.dom.select('span.mceItemNbsp', b);\r
-\r
-                               for (i = nl.length - 1; i >= 0; i--)\r
-                                       ed.dom.remove(nl[i], 1);\r
-                       }\r
-\r
-                       s.moveToBookmark(bm);\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js b/plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js
deleted file mode 100644 (file)
index e769d09..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js
deleted file mode 100644 (file)
index 6c9a3ea..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.WordCount', {\r
-               block : 0,\r
-               id : null,\r
-               countre : null,\r
-               cleanre : null,\r
-\r
-               init : function(ed, url) {\r
-                       var t = this, last = 0;\r
-\r
-                       t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;\r
-                       t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);\r
-                       t.id = ed.id + '-word-count';\r
-\r
-                       ed.onPostRender.add(function(ed, cm) {\r
-                               var row, id;\r
-\r
-                               // Add it to the specified id or the theme advanced path\r
-                               id = ed.getParam('wordcount_target_id');\r
-                               if (!id) {\r
-                                       row = tinymce.DOM.get(ed.id + '_path_row');\r
-\r
-                                       if (row)\r
-                                               tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');\r
-                               } else {\r
-                                       tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');\r
-                               }\r
-                       });\r
-\r
-                       ed.onInit.add(function(ed) {\r
-                               ed.selection.onSetContent.add(function() {\r
-                                       t._count(ed);\r
-                               });\r
-\r
-                               t._count(ed);\r
-                       });\r
-\r
-                       ed.onSetContent.add(function(ed) {\r
-                               t._count(ed);\r
-                       });\r
-\r
-                       ed.onKeyUp.add(function(ed, e) {\r
-                               if (e.keyCode == last)\r
-                                       return;\r
-\r
-                               if (13 == e.keyCode || 8 == last || 46 == last)\r
-                                       t._count(ed);\r
-\r
-                               last = e.keyCode;\r
-                       });\r
-               },\r
-\r
-               _getCount : function(ed) {\r
-                       var tc = 0;\r
-                       var tx = ed.getContent({ format: 'raw' });\r
-\r
-                       if (tx) {\r
-                                       tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces\r
-                                       tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars\r
-\r
-                                       // deal with html entities\r
-                                       tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' ');\r
-                                       tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation\r
-\r
-                                       var wordArray = tx.match(this.countre);\r
-                                       if (wordArray) {\r
-                                                       tc = wordArray.length;\r
-                                       }\r
-                       }\r
-\r
-                       return tc;\r
-               },\r
-\r
-               _count : function(ed) {\r
-                       var t = this;\r
-\r
-                       // Keep multiple calls from happening at the same time\r
-                       if (t.block)\r
-                               return;\r
-\r
-                       t.block = 1;\r
-\r
-                       setTimeout(function() {\r
-                                       var tc = t._getCount(ed);\r
-\r
-                                       tinymce.DOM.setHTML(t.id, tc.toString());\r
-\r
-                                       setTimeout(function() {t.block = 0;}, 2000);\r
-                       }, 1);\r
-               },\r
-\r
-               getInfo: function() {\r
-                       return {\r
-                               longname : 'Word Count plugin',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);\r
-})();\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm
deleted file mode 100644 (file)
index 30a894f..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.title_abbr_element}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/element_common.js"></script>\r
-       <script type="text/javascript" src="js/abbr.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_abbr_element}</span>\r
-<form onsubmit="insertAbbr();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
-                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="class" name="class" class="field mceEditableSelect">\r
-                                                               <option value="">{#not_set}</option> \r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir" class="field"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
-                                               </td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm
deleted file mode 100644 (file)
index c109345..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.title_acronym_element}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/element_common.js"></script>\r
-       <script type="text/javascript" src="js/acronym.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_acronym_element}</span>\r
-<form onsubmit="insertAcronym();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
-                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="class" name="class" class="field mceEditableSelect">\r
-                                                               <option value="">{#not_set}</option> \r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir" class="field"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
-                                               </td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm
deleted file mode 100644 (file)
index e8d606a..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.attribs_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="js/attributes.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/attributes.css" />\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.attribs_title}</span>\r
-<form onsubmit="insertAction();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>\r
-                       <li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
-                                               <td>\r
-                                                       <select id="classlist" name="classlist" class="mceEditableSelect">\r
-                                                               <option value="" selected="selected">{#not_set}</option>\r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" />\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                                       <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>\r
-                                                       <td><input type="text" id="tabindex" name="tabindex" value="" /></td>\r
-                                               </tr>\r
-\r
-                                               <tr>\r
-                                                       <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>\r
-                                                       <td><input type="text" id="accesskey" name="accesskey" value="" /></td>\r
-                                               </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm
deleted file mode 100644 (file)
index 0ac6bdb..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.title_cite_element}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/element_common.js"></script>\r
-       <script type="text/javascript" src="js/cite.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_cite_element}</span>\r
-<form onsubmit="insertCite();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
-                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="class" name="class" class="field mceEditableSelect">\r
-                                                               <option value="">{#not_set}</option> \r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir" class="field"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
-                                               </td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css b/plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css
deleted file mode 100644 (file)
index 9a6a235..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.panel_wrapper div.current {\r
-       height: 290px;\r
-}\r
-\r
-#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {\r
-       width: 200px;\r
-}\r
-\r
-#events_panel input {\r
-       width: 200px;\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css b/plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css
deleted file mode 100644 (file)
index e67114d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-input.field, select.field {width:200px;}\r
-input.picker {width:179px; margin-left: 5px;}\r
-input.disabled {border-color:#F2F2F2;}\r
-img.picker {vertical-align:text-bottom; cursor:pointer;}\r
-h1 {padding: 0 0 5px 0;}\r
-.panel_wrapper div.current {height:160px;}\r
-#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}\r
-a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}\r
-#datetime {width:180px;}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm
deleted file mode 100644 (file)
index 5f66751..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.title_del_element}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/element_common.js"></script>\r
-       <script type="text/javascript" src="js/del.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
-</head>\r
-<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_del_element}</span>\r
-<form onsubmit="insertDel();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
-                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>\r
-                                               <td>\r
-                                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                               <tr> \r
-                                                                       <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
-                                                                       <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
-                                                               </tr>\r
-                                                       </table>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>\r
-                                               <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="class" name="class" class="field mceEditableSelect">\r
-                                                               <option value="">{#not_set}</option> \r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir" class="field"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
-                                               </td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js
deleted file mode 100644 (file)
index 9b98a51..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js
deleted file mode 100644 (file)
index f240572..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {\r
-               init : function(ed, url) {\r
-                       // Register commands\r
-                       ed.addCommand('mceCite', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/cite.htm',\r
-                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),\r
-                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceAcronym', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/acronym.htm',\r
-                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),\r
-                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceAbbr', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/abbr.htm',\r
-                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),\r
-                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceDel', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/del.htm',\r
-                                       width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),\r
-                                       height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceIns', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/ins.htm',\r
-                                       width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),\r
-                                       height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       ed.addCommand('mceAttributes', function() {\r
-                               ed.windowManager.open({\r
-                                       file : url + '/attributes.htm',\r
-                                       width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)),\r
-                                       height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)),\r
-                                       inline : 1\r
-                               }, {\r
-                                       plugin_url : url\r
-                               });\r
-                       });\r
-\r
-                       // Register buttons\r
-                       ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});\r
-                       ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});\r
-                       ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});\r
-                       ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});\r
-                       ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});\r
-                       ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});\r
-\r
-                       ed.onNodeChange.add(function(ed, cm, n, co) {\r
-                               n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');\r
-\r
-                               cm.setDisabled('cite', co);\r
-                               cm.setDisabled('acronym', co);\r
-                               cm.setDisabled('abbr', co);\r
-                               cm.setDisabled('del', co);\r
-                               cm.setDisabled('ins', co);\r
-                               cm.setDisabled('attribs', n && n.nodeName == 'BODY');\r
-                               cm.setActive('cite', 0);\r
-                               cm.setActive('acronym', 0);\r
-                               cm.setActive('abbr', 0);\r
-                               cm.setActive('del', 0);\r
-                               cm.setActive('ins', 0);\r
-\r
-                               // Activate all\r
-                               if (n) {\r
-                                       do {\r
-                                               cm.setDisabled(n.nodeName.toLowerCase(), 0);\r
-                                               cm.setActive(n.nodeName.toLowerCase(), 1);\r
-                                       } while (n = n.parentNode);\r
-                               }\r
-                       });\r
-\r
-                       ed.onPreInit.add(function() {\r
-                               // Fixed IE issue where it can't handle these elements correctly\r
-                               ed.dom.create('abbr');\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'XHTML Xtras Plugin',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm
deleted file mode 100644 (file)
index d001ac7..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#xhtmlxtras_dlg.title_ins_element}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
-       <script type="text/javascript" src="js/element_common.js"></script>\r
-       <script type="text/javascript" src="js/ins.js"></script>\r
-       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
-</head>\r
-<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">\r
-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_ins_element}</span>\r
-<form onsubmit="insertIns();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
-                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> \r
-                                               <td>\r
-                                                       <table role="presentation" border="0" cellspacing="0" cellpadding="0">\r
-                                                               <tr> \r
-                                                                       <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
-                                                                       <td ><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
-                                                               </tr>\r
-                                                       </table>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr >\r
-                                               <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> \r
-                                               <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td  class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
-                                               <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
-                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="class" name="class" class="field mceEditableSelect">\r
-                                                               <option value="">{#not_set}</option> \r
-                                                       </select>\r
-                                               </td>\r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
-                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
-                                               <td>\r
-                                                       <select id="dir" name="dir" class="field"> \r
-                                                               <option value="">{#not_set}</option> \r
-                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
-                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
-                                                       </select>\r
-                                               </td> \r
-                                       </tr>\r
-                                       <tr>\r
-                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
-                                               <td>\r
-                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
-                                               </td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-               <div id="events_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
-\r
-                               <table role="presentation" border="0" cellpadding="0" cellspacing="4">\r
-                                       <tr>\r
-                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
-                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
-                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
-                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
-                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
-                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
-                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
-                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
-                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
-                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
-                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
-                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-\r
-                                       <tr>\r
-                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
-                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
-                                       </tr>\r
-                               </table>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js
deleted file mode 100644 (file)
index 4b51a25..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**\r
- * abbr.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       SXE.initElementDialog('abbr');\r
-       if (SXE.currentAction == "update") {\r
-               SXE.showRemoveButton();\r
-       }\r
-}\r
-\r
-function insertAbbr() {\r
-       SXE.insertElement('abbr');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function removeAbbr() {\r
-       SXE.removeElement('abbr');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js
deleted file mode 100644 (file)
index 6ec2f88..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**\r
- * acronym.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       SXE.initElementDialog('acronym');\r
-       if (SXE.currentAction == "update") {\r
-               SXE.showRemoveButton();\r
-       }\r
-}\r
-\r
-function insertAcronym() {\r
-       SXE.insertElement('acronym');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function removeAcronym() {\r
-       SXE.removeElement('acronym');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js
deleted file mode 100644 (file)
index 9c99995..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/**\r
- * attributes.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       tinyMCEPopup.resizeToInnerSize();\r
-       var inst = tinyMCEPopup.editor;\r
-       var dom = inst.dom;\r
-       var elm = inst.selection.getNode();\r
-       var f = document.forms[0];\r
-       var onclick = dom.getAttrib(elm, 'onclick');\r
-\r
-       setFormValue('title', dom.getAttrib(elm, 'title'));\r
-       setFormValue('id', dom.getAttrib(elm, 'id'));\r
-       setFormValue('style', dom.getAttrib(elm, "style"));\r
-       setFormValue('dir', dom.getAttrib(elm, 'dir'));\r
-       setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
-       setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
-       setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
-       setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
-       setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
-       setFormValue('onclick', onclick);\r
-       setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
-       setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
-       setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
-       setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
-       setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
-       setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
-       setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
-       setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
-       setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
-       className = dom.getAttrib(elm, 'class');\r
-\r
-       addClassesToList('classlist', 'advlink_styles');\r
-       selectByValue(f, 'classlist', className, true);\r
-\r
-       TinyMCE_EditableSelects.init();\r
-}\r
-\r
-function setFormValue(name, value) {\r
-       if(value && document.forms[0].elements[name]){\r
-               document.forms[0].elements[name].value = value;\r
-       }\r
-}\r
-\r
-function insertAction() {\r
-       var inst = tinyMCEPopup.editor;\r
-       var elm = inst.selection.getNode();\r
-\r
-       setAllAttribs(elm);\r
-       tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function setAttrib(elm, attrib, value) {\r
-       var formObj = document.forms[0];\r
-       var valueElm = formObj.elements[attrib.toLowerCase()];\r
-       var inst = tinyMCEPopup.editor;\r
-       var dom = inst.dom;\r
-\r
-       if (typeof(value) == "undefined" || value == null) {\r
-               value = "";\r
-\r
-               if (valueElm)\r
-                       value = valueElm.value;\r
-       }\r
-\r
-       dom.setAttrib(elm, attrib.toLowerCase(), value);\r
-}\r
-\r
-function setAllAttribs(elm) {\r
-       var f = document.forms[0];\r
-\r
-       setAttrib(elm, 'title');\r
-       setAttrib(elm, 'id');\r
-       setAttrib(elm, 'style');\r
-       setAttrib(elm, 'class', getSelectValue(f, 'classlist'));\r
-       setAttrib(elm, 'dir');\r
-       setAttrib(elm, 'lang');\r
-       setAttrib(elm, 'tabindex');\r
-       setAttrib(elm, 'accesskey');\r
-       setAttrib(elm, 'onfocus');\r
-       setAttrib(elm, 'onblur');\r
-       setAttrib(elm, 'onclick');\r
-       setAttrib(elm, 'ondblclick');\r
-       setAttrib(elm, 'onmousedown');\r
-       setAttrib(elm, 'onmouseup');\r
-       setAttrib(elm, 'onmouseover');\r
-       setAttrib(elm, 'onmousemove');\r
-       setAttrib(elm, 'onmouseout');\r
-       setAttrib(elm, 'onkeypress');\r
-       setAttrib(elm, 'onkeydown');\r
-       setAttrib(elm, 'onkeyup');\r
-\r
-       // Refresh in old MSIE\r
-//     if (tinyMCE.isMSIE5)\r
-//             elm.outerHTML = elm.outerHTML;\r
-}\r
-\r
-function insertAttribute() {\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
-tinyMCEPopup.requireLangPack();\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js
deleted file mode 100644 (file)
index 009b715..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**\r
- * cite.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       SXE.initElementDialog('cite');\r
-       if (SXE.currentAction == "update") {\r
-               SXE.showRemoveButton();\r
-       }\r
-}\r
-\r
-function insertCite() {\r
-       SXE.insertElement('cite');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function removeCite() {\r
-       SXE.removeElement('cite');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js
deleted file mode 100644 (file)
index 1f957dc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**\r
- * del.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       SXE.initElementDialog('del');\r
-       if (SXE.currentAction == "update") {\r
-               setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
-               setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
-               SXE.showRemoveButton();\r
-       }\r
-}\r
-\r
-function setElementAttribs(elm) {\r
-       setAllCommonAttribs(elm);\r
-       setAttrib(elm, 'datetime');\r
-       setAttrib(elm, 'cite');\r
-       elm.removeAttribute('data-mce-new');\r
-}\r
-\r
-function insertDel() {\r
-       var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');\r
-\r
-       if (elm == null) {\r
-               var s = SXE.inst.selection.getContent();\r
-               if(s.length > 0) {\r
-                       insertInlineElement('del');\r
-                       var elementArray = SXE.inst.dom.select('del[data-mce-new]');\r
-                       for (var i=0; i<elementArray.length; i++) {\r
-                               var elm = elementArray[i];\r
-                               setElementAttribs(elm);\r
-                       }\r
-               }\r
-       } else {\r
-               setElementAttribs(elm);\r
-       }\r
-       tinyMCEPopup.editor.nodeChanged();\r
-       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function removeDel() {\r
-       SXE.removeElement('del');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js
deleted file mode 100644 (file)
index 4e5d9c3..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/**\r
- * element_common.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-tinyMCEPopup.requireLangPack();\r
-\r
-function initCommonAttributes(elm) {\r
-       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
-\r
-       // Setup form data for common element attributes\r
-       setFormValue('title', dom.getAttrib(elm, 'title'));\r
-       setFormValue('id', dom.getAttrib(elm, 'id'));\r
-       selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);\r
-       setFormValue('style', dom.getAttrib(elm, 'style'));\r
-       selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));\r
-       setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
-       setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
-       setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
-       setFormValue('onclick', dom.getAttrib(elm, 'onclick'));\r
-       setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
-       setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
-       setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
-       setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
-       setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
-       setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
-       setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
-       setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
-       setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
-}\r
-\r
-function setFormValue(name, value) {\r
-       if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;\r
-}\r
-\r
-function insertDateTime(id) {\r
-       document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");\r
-}\r
-\r
-function getDateTime(d, fmt) {\r
-       fmt = fmt.replace("%D", "%m/%d/%y");\r
-       fmt = fmt.replace("%r", "%I:%M:%S %p");\r
-       fmt = fmt.replace("%Y", "" + d.getFullYear());\r
-       fmt = fmt.replace("%y", "" + d.getYear());\r
-       fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
-       fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
-       fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
-       fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
-       fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
-       fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
-       fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
-       fmt = fmt.replace("%%", "%");\r
-\r
-       return fmt;\r
-}\r
-\r
-function addZeros(value, len) {\r
-       var i;\r
-\r
-       value = "" + value;\r
-\r
-       if (value.length < len) {\r
-               for (i=0; i<(len-value.length); i++)\r
-                       value = "0" + value;\r
-       }\r
-\r
-       return value;\r
-}\r
-\r
-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
-       if (!form_obj || !form_obj.elements[field_name])\r
-               return;\r
-\r
-       var sel = form_obj.elements[field_name];\r
-\r
-       var found = false;\r
-       for (var i=0; i<sel.options.length; i++) {\r
-               var option = sel.options[i];\r
-\r
-               if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
-                       option.selected = true;\r
-                       found = true;\r
-               } else\r
-                       option.selected = false;\r
-       }\r
-\r
-       if (!found && add_custom && value != '') {\r
-               var option = new Option('Value: ' + value, value);\r
-               option.selected = true;\r
-               sel.options[sel.options.length] = option;\r
-       }\r
-\r
-       return found;\r
-}\r
-\r
-function setAttrib(elm, attrib, value) {\r
-       var formObj = document.forms[0];\r
-       var valueElm = formObj.elements[attrib.toLowerCase()];\r
-       tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);\r
-}\r
-\r
-function setAllCommonAttribs(elm) {\r
-       setAttrib(elm, 'title');\r
-       setAttrib(elm, 'id');\r
-       setAttrib(elm, 'class');\r
-       setAttrib(elm, 'style');\r
-       setAttrib(elm, 'dir');\r
-       setAttrib(elm, 'lang');\r
-       /*setAttrib(elm, 'onfocus');\r
-       setAttrib(elm, 'onblur');\r
-       setAttrib(elm, 'onclick');\r
-       setAttrib(elm, 'ondblclick');\r
-       setAttrib(elm, 'onmousedown');\r
-       setAttrib(elm, 'onmouseup');\r
-       setAttrib(elm, 'onmouseover');\r
-       setAttrib(elm, 'onmousemove');\r
-       setAttrib(elm, 'onmouseout');\r
-       setAttrib(elm, 'onkeypress');\r
-       setAttrib(elm, 'onkeydown');\r
-       setAttrib(elm, 'onkeyup');*/\r
-}\r
-\r
-SXE = {\r
-       currentAction : "insert",\r
-       inst : tinyMCEPopup.editor,\r
-       updateElement : null\r
-}\r
-\r
-SXE.focusElement = SXE.inst.selection.getNode();\r
-\r
-SXE.initElementDialog = function(element_name) {\r
-       addClassesToList('class', 'xhtmlxtras_styles');\r
-       TinyMCE_EditableSelects.init();\r
-\r
-       element_name = element_name.toLowerCase();\r
-       var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
-       if (elm != null && elm.nodeName.toUpperCase() == element_name.toUpperCase()) {\r
-               SXE.currentAction = "update";\r
-       }\r
-\r
-       if (SXE.currentAction == "update") {\r
-               initCommonAttributes(elm);\r
-               SXE.updateElement = elm;\r
-       }\r
-\r
-       document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); \r
-}\r
-\r
-SXE.insertElement = function(element_name) {\r
-       var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;\r
-\r
-       if (elm == null) {\r
-               var s = SXE.inst.selection.getContent();\r
-               if(s.length > 0) {\r
-                       tagName = element_name;\r
-\r
-                       insertInlineElement(element_name);\r
-                       var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));\r
-                       for (var i=0; i<elementArray.length; i++) {\r
-                               var elm = elementArray[i];\r
-\r
-                               if (SXE.inst.dom.getAttrib(elm, 'data-mce-new')) {\r
-                                       elm.id = '';\r
-                                       elm.setAttribute('id', '');\r
-                                       elm.removeAttribute('id');\r
-                                       elm.removeAttribute('data-mce-new');\r
-\r
-                                       setAllCommonAttribs(elm);\r
-                               }\r
-                       }\r
-               }\r
-       } else {\r
-               setAllCommonAttribs(elm);\r
-       }\r
-       SXE.inst.nodeChanged();\r
-       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
-}\r
-\r
-SXE.removeElement = function(element_name){\r
-       element_name = element_name.toLowerCase();\r
-       elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
-       if(elm && elm.nodeName.toUpperCase() == element_name.toUpperCase()){\r
-               tinyMCE.execCommand('mceRemoveNode', false, elm);\r
-               SXE.inst.nodeChanged();\r
-               tinyMCEPopup.execCommand('mceEndUndoLevel');\r
-       }\r
-}\r
-\r
-SXE.showRemoveButton = function() {\r
-               document.getElementById("remove").style.display = '';\r
-}\r
-\r
-SXE.containsClass = function(elm,cl) {\r
-       return (elm.className.indexOf(cl) > -1) ? true : false;\r
-}\r
-\r
-SXE.removeClass = function(elm,cl) {\r
-       if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {\r
-               return true;\r
-       }\r
-       var classNames = elm.className.split(" ");\r
-       var newClassNames = "";\r
-       for (var x = 0, cnl = classNames.length; x < cnl; x++) {\r
-               if (classNames[x] != cl) {\r
-                       newClassNames += (classNames[x] + " ");\r
-               }\r
-       }\r
-       elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end\r
-}\r
-\r
-SXE.addClass = function(elm,cl) {\r
-       if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;\r
-       return true;\r
-}\r
-\r
-function insertInlineElement(en) {\r
-       var ed = tinyMCEPopup.editor, dom = ed.dom;\r
-\r
-       ed.getDoc().execCommand('FontName', false, 'mceinline');\r
-       tinymce.each(dom.select('span,font'), function(n) {\r
-               if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')\r
-                       dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1);\r
-       });\r
-}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js
deleted file mode 100644 (file)
index c4addfb..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**\r
- * ins.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function init() {\r
-       SXE.initElementDialog('ins');\r
-       if (SXE.currentAction == "update") {\r
-               setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
-               setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
-               SXE.showRemoveButton();\r
-       }\r
-}\r
-\r
-function setElementAttribs(elm) {\r
-       setAllCommonAttribs(elm);\r
-       setAttrib(elm, 'datetime');\r
-       setAttrib(elm, 'cite');\r
-       elm.removeAttribute('data-mce-new');\r
-}\r
-\r
-function insertIns() {\r
-       var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');\r
-\r
-       if (elm == null) {\r
-               var s = SXE.inst.selection.getContent();\r
-               if(s.length > 0) {\r
-                       insertInlineElement('ins');\r
-                       var elementArray = SXE.inst.dom.select('ins[data-mce-new]');\r
-                       for (var i=0; i<elementArray.length; i++) {\r
-                               var elm = elementArray[i];\r
-                               setElementAttribs(elm);\r
-                       }\r
-               }\r
-       } else {\r
-               setElementAttribs(elm);\r
-       }\r
-       tinyMCEPopup.editor.nodeChanged();\r
-       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function removeIns() {\r
-       SXE.removeElement('ins');\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js
deleted file mode 100644 (file)
index 45b6b26..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-tinyMCE.addI18n('en.xhtmlxtras_dlg',{\r
-attribute_label_title:"Title",\r
-attribute_label_id:"ID",\r
-attribute_label_class:"Class",\r
-attribute_label_style:"Style",\r
-attribute_label_cite:"Cite",\r
-attribute_label_datetime:"Date/Time",\r
-attribute_label_langdir:"Text Direction",\r
-attribute_option_ltr:"Left to right",\r
-attribute_option_rtl:"Right to left",\r
-attribute_label_langcode:"Language",\r
-attribute_label_tabindex:"TabIndex",\r
-attribute_label_accesskey:"AccessKey",\r
-attribute_events_tab:"Events",\r
-attribute_attrib_tab:"Attributes",\r
-general_tab:"General",\r
-attrib_tab:"Attributes",\r
-events_tab:"Events",\r
-fieldset_general_tab:"General Settings",\r
-fieldset_attrib_tab:"Element Attributes",\r
-fieldset_events_tab:"Element Events",\r
-title_ins_element:"Insertion Element",\r
-title_del_element:"Deletion Element",\r
-title_acronym_element:"Acronym Element",\r
-title_abbr_element:"Abbreviation Element",\r
-title_cite_element:"Citation Element",\r
-remove:"Remove",\r
-insert_date:"Insert current date/time",\r
-option_ltr:"Left to right",\r
-option_rtl:"Right to left",\r
-attribs_title:"Insert/Edit Attributes"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/about.htm b/plugins/TinyMCE/js/themes/advanced/about.htm
deleted file mode 100644 (file)
index 7a97cb7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.about_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="js/about.js"></script>\r
-</head>\r
-<body id="about" style="display: none">\r
-               <div class="tabs">\r
-                       <ul>\r
-                               <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>\r
-                               <li id="help_tab" style="display:none" aria-hidden="true" aria-controls="help_panel"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>\r
-                               <li id="plugins_tab" aria-controls="plugins_panel"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>\r
-                       </ul>\r
-               </div>\r
-\r
-               <div class="panel_wrapper">\r
-                       <div id="general_panel" class="panel current">\r
-                               <h3>{#advanced_dlg.about_title}</h3>\r
-                               <p>Version: <span id="version"></span> (<span id="date"></span>)</p>\r
-                               <p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>\r
-                               by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>\r
-                               <p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>\r
-                               <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>\r
-\r
-                               <div id="buttoncontainer">\r
-                                       <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>\r
-                               </div>\r
-                       </div>\r
-\r
-                       <div id="plugins_panel" class="panel">\r
-                               <div id="pluginscontainer">\r
-                                       <h3>{#advanced_dlg.about_loaded}</h3>\r
-\r
-                                       <div id="plugintablecontainer">\r
-                                       </div>\r
-\r
-                                       <p>&nbsp;</p>\r
-                               </div>\r
-                       </div>\r
-\r
-                       <div id="help_panel" class="panel noscroll" style="overflow: visible;">\r
-                               <div id="iframecontainer"></div>\r
-                       </div>\r
-               </div>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />\r
-               </div>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/anchor.htm b/plugins/TinyMCE/js/themes/advanced/anchor.htm
deleted file mode 100644 (file)
index 75c93b7..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.anchor_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/anchor.js"></script>\r
-</head>\r
-<body style="display: none" role="application" aria-labelledby="app_title">\r
-<form onsubmit="AnchorDialog.update();return false;" action="#">\r
-       <table border="0" cellpadding="4" cellspacing="0" role="presentation">\r
-               <tr>\r
-                       <td colspan="2" class="title" id="app_title">{#advanced_dlg.anchor_title}</td>\r
-               </tr>\r
-               <tr>\r
-                       <td class="nowrap"><label for="anchorName">{#advanced_dlg.anchor_name}:</label></td>\r
-                       <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" aria-required="true" /></td>\r
-               </tr>\r
-       </table>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#update}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/charmap.htm b/plugins/TinyMCE/js/themes/advanced/charmap.htm
deleted file mode 100644 (file)
index 2c3b3f2..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.charmap_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/charmap.js"></script>\r
-</head>\r
-<body id="charmap" style="display:none">\r
-<table align="center" border="0" cellspacing="0" cellpadding="2" role="presentation">\r
-       <tr>\r
-               <td colspan="2" class="title" ><label for="charmapView" id="charmap_label">{#advanced_dlg.charmap_title}</label></td>\r
-       </tr>\r
-       <tr>\r
-               <td id="charmapView" rowspan="2" align="left" valign="top">\r
-                       <!-- Chars will be rendered here -->\r
-               </td>\r
-               <td width="100" align="center" valign="top">\r
-                       <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px" role="presentation">\r
-                               <tr>\r
-                                       <td id="codeV">&nbsp;</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td id="codeN">&nbsp;</td>\r
-                               </tr>\r
-                       </table>\r
-               </td>\r
-       </tr>\r
-       <tr>\r
-               <td valign="bottom" style="padding-bottom: 3px;">\r
-                       <table width="100" align="center" border="0" cellpadding="2" cellspacing="0" role="presentation">\r
-                               <tr>\r
-                                       <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeA">HTML-Code</label></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center">&nbsp;</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td style="font-size: 1px;">&nbsp;</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeB">NUM-Code</label></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center">&nbsp;</td>\r
-                               </tr>\r
-                       </table>\r
-               </td>\r
-       </tr>\r
-</table>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/color_picker.htm b/plugins/TinyMCE/js/themes/advanced/color_picker.htm
deleted file mode 100644 (file)
index ad1bb0f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.colorpicker_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="js/color_picker.js"></script>\r
-</head>\r
-<body id="colorpicker" style="display: none" role="application" aria-labelledby="app_label">\r
-       <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advanced_dlg.colorpicker_title}</span>\r
-<form onsubmit="insertAction();return false" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="picker_tab" aria-controls="picker_panel" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>\r
-                       <li id="rgb_tab" aria-controls="rgb_panel"><span><a href="javascript:;" onclick="mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>\r
-                       <li id="named_tab" aria-controls="named_panel"><span><a  href="javascript:;" onclick="javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="picker_panel" class="panel current">\r
-                       <fieldset>\r
-                               <legend>{#advanced_dlg.colorpicker_picker_title}</legend>\r
-                               <div id="picker">\r
-                                       <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />\r
-\r
-                                       <div id="light">\r
-                                               <!-- Will be filled with divs -->\r
-                                       </div>\r
-\r
-                                       <br style="clear: both" />\r
-                               </div>\r
-                       </fieldset>\r
-               </div>\r
-\r
-               <div id="rgb_panel" class="panel">\r
-                       <fieldset>\r
-                               <legend id="webcolors_title">{#advanced_dlg.colorpicker_palette_title}</legend>\r
-                               <div id="webcolors">\r
-                                       <!-- Gets filled with web safe colors-->\r
-                               </div>\r
-\r
-                               <br style="clear: both" />\r
-                       </fieldset>\r
-               </div>\r
-\r
-               <div id="named_panel" class="panel">\r
-                       <fieldset id="named_picker_label">\r
-                               <legend id="named_title">{#advanced_dlg.colorpicker_named_title}</legend>\r
-                               <div id="namedcolors" role="listbox" tabindex="0" aria-labelledby="named_picker_label">\r
-                                       <!-- Gets filled with named colors-->\r
-                               </div>\r
-\r
-                               <br style="clear: both" />\r
-\r
-                               <div id="colornamecontainer">\r
-                                       {#advanced_dlg.colorpicker_name} <span id="colorname"></span>\r
-                               </div>\r
-                       </fieldset>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#apply}" />\r
-\r
-               <div id="preview"></div>\r
-\r
-               <div id="previewblock">\r
-                       <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" />\r
-               </div>\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/editor_template.js b/plugins/TinyMCE/js/themes/advanced/editor_template.js
deleted file mode 100644 (file)
index 57e7184..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);j.forcedHighContrastMode=j.settings.detect_highcontrast&&l._isHighContrast();j.settings.skin=j.forcedHighContrastMode?"highcontrast":j.settings.skin;l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}if(j.settings.content_css!==false){j.contentCSS.push(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l);j.onKeyUp.add(l._updateUndoStatus,l);j.onMouseUp.add(l._updateUndoStatus,l);j.dom.bind(j.dom.getRoot(),"dragend",function(){l._updateUndoStatus(j)})}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},_isHighContrast:function(){var i,j=d.add(d.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});i=(d.getStyle(j,"background-color",true)+"").toLowerCase().replace(/ /g,"");d.remove(j);return i!="rgb(171,239,86)"&&i!="#abef56"},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){if(p[0]){i.formatter.remove(p[0])}}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});if(m&&m.value==l){k.select(null)}return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});if(o&&(o.value.fontSize==i.fontSize||o.value["class"]==i["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(l){j.editor.execCommand("FormatBlock",false,l);return false}});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;if(r.settings){r.settings.aria_label=w.aria_label+r.getLang("advanced.help_shortcut")}m=j=d.create("span",{role:"application","aria-labelledby":r.id+"_voice",id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});d.add(m,"span",{"class":"mceVoiceLabel",style:"display:none;",id:r.id+"_voice"},w.aria_label);if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{role:"presentation",id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;r.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){window.focus();v.toolbarGroup.focus();return b.cancel(n)}else{if(n.keyCode===o){d.get(p.id+"_path_row").focus();return b.cancel(n)}}}});r.addShortcut("alt+0","","mceShortcuts",v);return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_ifr");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=d.add(d.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row",role:"group","aria-labelledby":p.id+"_path_voice"});if(w.theme_advanced_path){d.add(k,"span",{id:p.id+"_path_voice"},p.translate("advanced.path"));d.add(k,"span",{},": ")}else{d.add(k,"span",{},"&#160;")}if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_updateUndoStatus:function(j){var i=j.controlManager,k=j.undoManager;i.setDisabled("undo",!k.hasUndo()&&!k.typing);i.setDisabled("redo",!k.hasRedo())},_nodeChanged:function(m,r,D,q,E){var y=this,C,F=0,x,G,z=y.settings,w,k,u,B,l,j,i;e.each(y.stateControls,function(n){r.setActive(n,m.queryCommandState(y.controls[n][1]))});function o(p){var s,n=E.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}r.setActive("visualaid",m.hasVisual);y._updateUndoStatus(m);r.setDisabled("outdent",!m.queryCommandState("Outdent"));C=o("A");if(G=r.get("link")){if(!C||!C.name){G.setDisabled(!C&&q);G.setActive(!!C)}}if(G=r.get("unlink")){G.setDisabled(!C&&q);G.setActive(!!C&&!C.name)}if(G=r.get("anchor")){G.setActive(!q&&!!C&&C.name)}C=o("IMG");if(G=r.get("image")){G.setActive(!q&&!!C&&D.className.indexOf("mceItem")==-1)}if(G=r.get("styleselect")){y._importClasses();j=[];f(G.items,function(n){j.push(n.value)});i=m.formatter.matchAll(j);G.select(i[0])}if(G=r.get("formatselect")){C=o(d.isBlock);if(C){G.select(C.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}}if(m.dom.is(p,z.theme_advanced_font_selector)){if(!k&&p.style.fontSize){k=p.style.fontSize}if(!u&&p.style.fontFamily){u=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!B&&p.style.color){B=p.style.color}if(!l&&p.style.backgroundColor){l=p.style.backgroundColor}}return false});if(G=r.get("fontselect")){G.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==u})}if(G=r.get("fontsizeselect")){if(z.theme_advanced_runtime_fontsize&&!k&&!w){k=m.dom.getStyle(D,"fontSize",true)}G.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===w){return true}})}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){C=d.get(m.id+"_path")||d.add(m.id+"_path_row","span",{id:m.id+"_path"});if(y.statusKeyboardNavigation){y.statusKeyboardNavigation.destroy();y.statusKeyboardNavigation=null}d.setHTML(C,"");o(function(H){var p=H.nodeName.toLowerCase(),s,v,t="";if(H.nodeType!=1||p==="br"||H.getAttribute("data-mce-bogus")||d.hasClass(H,"mceItemHidden")||d.hasClass(H,"mceItemRemoved")){return}if(e.isIE&&H.scopeName!=="HTML"){p=H.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(H,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(H,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(H,"href")){t+="href: "+x+" "}break;case"font":if(x=d.getAttrib(H,"face")){t+="font: "+x+" "}if(x=d.getAttrib(H,"size")){t+="size: "+x+" "}if(x=d.getAttrib(H,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(H,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(H,"id")){t+="id: "+x+" "}if(x=H.className){x=x.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(x){t+="class: "+x+" ";if(d.isBlock(H)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:H,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(F++)},p);if(C.hasChildNodes()){C.insertBefore(d.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),C.firstChild);C.insertBefore(v,C.firstChild)}else{C.appendChild(v)}},m.getBody());if(d.select("a",C).length>0){y.statusKeyboardNavigation=new e.ui.KeyboardNavigation({root:m.id+"_path_row",items:d.select("a",C),excludeFromTabOrder:true,onCancel:function(){m.focus()}},d)}}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var i=this.editor;i.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/editor_template_src.js b/plugins/TinyMCE/js/themes/advanced/editor_template_src.js
deleted file mode 100644 (file)
index d62f497..0000000
+++ /dev/null
@@ -1,1358 +0,0 @@
-/**\r
- * editor_template_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;\r
-\r
-       // Tell it to load theme specific language pack(s)\r
-       tinymce.ThemeManager.requireLangPack('advanced');\r
-\r
-       tinymce.create('tinymce.themes.AdvancedTheme', {\r
-               sizes : [8, 10, 12, 14, 18, 24, 36],\r
-\r
-               // Control name lookup, format: title, command\r
-               controls : {\r
-                       bold : ['bold_desc', 'Bold'],\r
-                       italic : ['italic_desc', 'Italic'],\r
-                       underline : ['underline_desc', 'Underline'],\r
-                       strikethrough : ['striketrough_desc', 'Strikethrough'],\r
-                       justifyleft : ['justifyleft_desc', 'JustifyLeft'],\r
-                       justifycenter : ['justifycenter_desc', 'JustifyCenter'],\r
-                       justifyright : ['justifyright_desc', 'JustifyRight'],\r
-                       justifyfull : ['justifyfull_desc', 'JustifyFull'],\r
-                       bullist : ['bullist_desc', 'InsertUnorderedList'],\r
-                       numlist : ['numlist_desc', 'InsertOrderedList'],\r
-                       outdent : ['outdent_desc', 'Outdent'],\r
-                       indent : ['indent_desc', 'Indent'],\r
-                       cut : ['cut_desc', 'Cut'],\r
-                       copy : ['copy_desc', 'Copy'],\r
-                       paste : ['paste_desc', 'Paste'],\r
-                       undo : ['undo_desc', 'Undo'],\r
-                       redo : ['redo_desc', 'Redo'],\r
-                       link : ['link_desc', 'mceLink'],\r
-                       unlink : ['unlink_desc', 'unlink'],\r
-                       image : ['image_desc', 'mceImage'],\r
-                       cleanup : ['cleanup_desc', 'mceCleanup'],\r
-                       help : ['help_desc', 'mceHelp'],\r
-                       code : ['code_desc', 'mceCodeEditor'],\r
-                       hr : ['hr_desc', 'InsertHorizontalRule'],\r
-                       removeformat : ['removeformat_desc', 'RemoveFormat'],\r
-                       sub : ['sub_desc', 'subscript'],\r
-                       sup : ['sup_desc', 'superscript'],\r
-                       forecolor : ['forecolor_desc', 'ForeColor'],\r
-                       forecolorpicker : ['forecolor_desc', 'mceForeColor'],\r
-                       backcolor : ['backcolor_desc', 'HiliteColor'],\r
-                       backcolorpicker : ['backcolor_desc', 'mceBackColor'],\r
-                       charmap : ['charmap_desc', 'mceCharMap'],\r
-                       visualaid : ['visualaid_desc', 'mceToggleVisualAid'],\r
-                       anchor : ['anchor_desc', 'mceInsertAnchor'],\r
-                       newdocument : ['newdocument_desc', 'mceNewDocument'],\r
-                       blockquote : ['blockquote_desc', 'mceBlockQuote']\r
-               },\r
-\r
-               stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],\r
-\r
-               init : function(ed, url) {\r
-                       var t = this, s, v, o;\r
-       \r
-                       t.editor = ed;\r
-                       t.url = url;\r
-                       t.onResolveName = new tinymce.util.Dispatcher(this);\r
-\r
-                       ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast();\r
-                       ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin;\r
-\r
-                       // Default settings\r
-                       t.settings = s = extend({\r
-                               theme_advanced_path : true,\r
-                               theme_advanced_toolbar_location : 'bottom',\r
-                               theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",\r
-                               theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",\r
-                               theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",\r
-                               theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",\r
-                               theme_advanced_toolbar_align : "center",\r
-                               theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",\r
-                               theme_advanced_more_colors : 1,\r
-                               theme_advanced_row_height : 23,\r
-                               theme_advanced_resize_horizontal : 1,\r
-                               theme_advanced_resizing_use_cookie : 1,\r
-                               theme_advanced_font_sizes : "1,2,3,4,5,6,7",\r
-                               theme_advanced_font_selector : "span",\r
-                               theme_advanced_show_current_color: 0,\r
-                               readonly : ed.settings.readonly\r
-                       }, ed.settings);\r
-\r
-                       // Setup default font_size_style_values\r
-                       if (!s.font_size_style_values)\r
-                               s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt";\r
-\r
-                       if (tinymce.is(s.theme_advanced_font_sizes, 'string')) {\r
-                               s.font_size_style_values = tinymce.explode(s.font_size_style_values);\r
-                               s.font_size_classes = tinymce.explode(s.font_size_classes || '');\r
-\r
-                               // Parse string value\r
-                               o = {};\r
-                               ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes;\r
-                               each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) {\r
-                                       var cl;\r
-\r
-                                       if (k == v && v >= 1 && v <= 7) {\r
-                                               k = v + ' (' + t.sizes[v - 1] + 'pt)';\r
-                                               cl = s.font_size_classes[v - 1];\r
-                                               v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');\r
-                                       }\r
-\r
-                                       if (/^\s*\./.test(v))\r
-                                               cl = v.replace(/\./g, '');\r
-\r
-                                       o[k] = cl ? {'class' : cl} : {fontSize : v};\r
-                               });\r
-\r
-                               s.theme_advanced_font_sizes = o;\r
-                       }\r
-\r
-                       if ((v = s.theme_advanced_path_location) && v != 'none')\r
-                               s.theme_advanced_statusbar_location = s.theme_advanced_path_location;\r
-\r
-                       if (s.theme_advanced_statusbar_location == 'none')\r
-                               s.theme_advanced_statusbar_location = 0;\r
-\r
-                       if (ed.settings.content_css !== false)\r
-                               ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css"));\r
-\r
-                       // Init editor\r
-                       ed.onInit.add(function() {\r
-                               if (!ed.settings.readonly) {\r
-                                       ed.onNodeChange.add(t._nodeChanged, t);\r
-                                       ed.onKeyUp.add(t._updateUndoStatus, t);\r
-                                       ed.onMouseUp.add(t._updateUndoStatus, t);\r
-                                       ed.dom.bind(ed.dom.getRoot(), 'dragend', function() {\r
-                                               t._updateUndoStatus(ed);\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       ed.onSetProgressState.add(function(ed, b, ti) {\r
-                               var co, id = ed.id, tb;\r
-\r
-                               if (b) {\r
-                                       t.progressTimer = setTimeout(function() {\r
-                                               co = ed.getContainer();\r
-                                               co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);\r
-                                               tb = DOM.get(ed.id + '_tbl');\r
-\r
-                                               DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});\r
-                                               DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});\r
-                                       }, ti || 0);\r
-                               } else {\r
-                                       DOM.remove(id + '_blocker');\r
-                                       DOM.remove(id + '_progress');\r
-                                       clearTimeout(t.progressTimer);\r
-                               }\r
-                       });\r
-\r
-                       DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css");\r
-\r
-                       if (s.skin_variant)\r
-                               DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css");\r
-               },\r
-\r
-               _isHighContrast : function() {\r
-                       var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'});\r
-\r
-                       actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, '');\r
-                       DOM.remove(div);\r
-\r
-                       return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56';\r
-               },\r
-\r
-               createControl : function(n, cf) {\r
-                       var cd, c;\r
-\r
-                       if (c = cf.createControl(n))\r
-                               return c;\r
-\r
-                       switch (n) {\r
-                               case "styleselect":\r
-                                       return this._createStyleSelect();\r
-\r
-                               case "formatselect":\r
-                                       return this._createBlockFormats();\r
-\r
-                               case "fontselect":\r
-                                       return this._createFontSelect();\r
-\r
-                               case "fontsizeselect":\r
-                                       return this._createFontSizeSelect();\r
-\r
-                               case "forecolor":\r
-                                       return this._createForeColorMenu();\r
-\r
-                               case "backcolor":\r
-                                       return this._createBackColorMenu();\r
-                       }\r
-\r
-                       if ((cd = this.controls[n]))\r
-                               return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});\r
-               },\r
-\r
-               execCommand : function(cmd, ui, val) {\r
-                       var f = this['_' + cmd];\r
-\r
-                       if (f) {\r
-                               f.call(this, ui, val);\r
-                               return true;\r
-                       }\r
-\r
-                       return false;\r
-               },\r
-\r
-               _importClasses : function(e) {\r
-                       var ed = this.editor, ctrl = ed.controlManager.get('styleselect');\r
-\r
-                       if (ctrl.getLength() == 0) {\r
-                               each(ed.dom.getClasses(), function(o, idx) {\r
-                                       var name = 'style_' + idx;\r
-\r
-                                       ed.formatter.register(name, {\r
-                                               inline : 'span',\r
-                                               attributes : {'class' : o['class']},\r
-                                               selector : '*'\r
-                                       });\r
-\r
-                                       ctrl.add(o['class'], name);\r
-                               });\r
-                       }\r
-               },\r
-\r
-               _createStyleSelect : function(n) {\r
-                       var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;\r
-\r
-                       // Setup style select box\r
-                       ctrl = ctrlMan.createListBox('styleselect', {\r
-                               title : 'advanced.style_select',\r
-                               onselect : function(name) {\r
-                                       var matches, formatNames = [];\r
-\r
-                                       each(ctrl.items, function(item) {\r
-                                               formatNames.push(item.value);\r
-                                       });\r
-\r
-                                       ed.focus();\r
-                                       ed.undoManager.add();\r
-\r
-                                       // Toggle off the current format\r
-                                       matches = ed.formatter.matchAll(formatNames);\r
-                                       if (!name || matches[0] == name) {\r
-                                               if (matches[0]) \r
-                                                       ed.formatter.remove(matches[0]);\r
-                                       } else\r
-                                               ed.formatter.apply(name);\r
-\r
-                                       ed.undoManager.add();\r
-                                       ed.nodeChanged();\r
-\r
-                                       return false; // No auto select\r
-                               }\r
-                       });\r
-\r
-                       // Handle specified format\r
-                       ed.onInit.add(function() {\r
-                               var counter = 0, formats = ed.getParam('style_formats');\r
-\r
-                               if (formats) {\r
-                                       each(formats, function(fmt) {\r
-                                               var name, keys = 0;\r
-\r
-                                               each(fmt, function() {keys++;});\r
-\r
-                                               if (keys > 1) {\r
-                                                       name = fmt.name = fmt.name || 'style_' + (counter++);\r
-                                                       ed.formatter.register(name, fmt);\r
-                                                       ctrl.add(fmt.title, name);\r
-                                               } else\r
-                                                       ctrl.add(fmt.title);\r
-                                       });\r
-                               } else {\r
-                                       each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {\r
-                                               var name;\r
-\r
-                                               if (val) {\r
-                                                       name = 'style_' + (counter++);\r
-\r
-                                                       ed.formatter.register(name, {\r
-                                                               inline : 'span',\r
-                                                               classes : val,\r
-                                                               selector : '*'\r
-                                                       });\r
-\r
-                                                       ctrl.add(t.editor.translate(key), name);\r
-                                               }\r
-                                       });\r
-                               }\r
-                       });\r
-\r
-                       // Auto import classes if the ctrl box is empty\r
-                       if (ctrl.getLength() == 0) {\r
-                               ctrl.onPostRender.add(function(ed, n) {\r
-                                       if (!ctrl.NativeListBox) {\r
-                                               Event.add(n.id + '_text', 'focus', t._importClasses, t);\r
-                                               Event.add(n.id + '_text', 'mousedown', t._importClasses, t);\r
-                                               Event.add(n.id + '_open', 'focus', t._importClasses, t);\r
-                                               Event.add(n.id + '_open', 'mousedown', t._importClasses, t);\r
-                                       } else\r
-                                               Event.add(n.id, 'focus', t._importClasses, t);\r
-                               });\r
-                       }\r
-\r
-                       return ctrl;\r
-               },\r
-\r
-               _createFontSelect : function() {\r
-                       var c, t = this, ed = t.editor;\r
-\r
-                       c = ed.controlManager.createListBox('fontselect', {\r
-                               title : 'advanced.fontdefault',\r
-                               onselect : function(v) {\r
-                                       var cur = c.items[c.selectedIndex];\r
-\r
-                                       if (!v && cur) {\r
-                                               ed.execCommand('FontName', false, cur.value);\r
-                                               return;\r
-                                       }\r
-\r
-                                       ed.execCommand('FontName', false, v);\r
-\r
-                                       // Fake selection, execCommand will fire a nodeChange and update the selection\r
-                                       c.select(function(sv) {\r
-                                               return v == sv;\r
-                                       });\r
-\r
-                                       if (cur && cur.value == v) {\r
-                                               c.select(null);\r
-                                       }\r
-\r
-                                       return false; // No auto select\r
-                               }\r
-                       });\r
-\r
-                       if (c) {\r
-                               each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {\r
-                                       c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});\r
-                               });\r
-                       }\r
-\r
-                       return c;\r
-               },\r
-\r
-               _createFontSizeSelect : function() {\r
-                       var t = this, ed = t.editor, c, i = 0, cl = [];\r
-\r
-                       c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {\r
-                               var cur = c.items[c.selectedIndex];\r
-\r
-                               if (!v && cur) {\r
-                                       cur = cur.value;\r
-\r
-                                       if (cur['class']) {\r
-                                               ed.formatter.toggle('fontsize_class', {value : cur['class']});\r
-                                               ed.undoManager.add();\r
-                                               ed.nodeChanged();\r
-                                       } else {\r
-                                               ed.execCommand('FontSize', false, cur.fontSize);\r
-                                       }\r
-\r
-                                       return;\r
-                               }\r
-\r
-                               if (v['class']) {\r
-                                       ed.focus();\r
-                                       ed.undoManager.add();\r
-                                       ed.formatter.toggle('fontsize_class', {value : v['class']});\r
-                                       ed.undoManager.add();\r
-                                       ed.nodeChanged();\r
-                               } else\r
-                                       ed.execCommand('FontSize', false, v.fontSize);\r
-\r
-                               // Fake selection, execCommand will fire a nodeChange and update the selection\r
-                               c.select(function(sv) {\r
-                                       return v == sv;\r
-                               });\r
-\r
-                               if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] == v['class'])) {\r
-                                       c.select(null);\r
-                               }\r
-\r
-                               return false; // No auto select\r
-                       }});\r
-\r
-                       if (c) {\r
-                               each(t.settings.theme_advanced_font_sizes, function(v, k) {\r
-                                       var fz = v.fontSize;\r
-\r
-                                       if (fz >= 1 && fz <= 7)\r
-                                               fz = t.sizes[parseInt(fz) - 1] + 'pt';\r
-\r
-                                       c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))});\r
-                               });\r
-                       }\r
-\r
-                       return c;\r
-               },\r
-\r
-               _createBlockFormats : function() {\r
-                       var c, fmts = {\r
-                               p : 'advanced.paragraph',\r
-                               address : 'advanced.address',\r
-                               pre : 'advanced.pre',\r
-                               h1 : 'advanced.h1',\r
-                               h2 : 'advanced.h2',\r
-                               h3 : 'advanced.h3',\r
-                               h4 : 'advanced.h4',\r
-                               h5 : 'advanced.h5',\r
-                               h6 : 'advanced.h6',\r
-                               div : 'advanced.div',\r
-                               blockquote : 'advanced.blockquote',\r
-                               code : 'advanced.code',\r
-                               dt : 'advanced.dt',\r
-                               dd : 'advanced.dd',\r
-                               samp : 'advanced.samp'\r
-                       }, t = this;\r
-\r
-                       c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) {\r
-                               t.editor.execCommand('FormatBlock', false, v);\r
-                               return false;\r
-                       }});\r
-\r
-                       if (c) {\r
-                               each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {\r
-                                       c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});\r
-                               });\r
-                       }\r
-\r
-                       return c;\r
-               },\r
-\r
-               _createForeColorMenu : function() {\r
-                       var c, t = this, s = t.settings, o = {}, v;\r
-\r
-                       if (s.theme_advanced_more_colors) {\r
-                               o.more_colors_func = function() {\r
-                                       t._mceColorPicker(0, {\r
-                                               color : c.value,\r
-                                               func : function(co) {\r
-                                                       c.setColor(co);\r
-                                               }\r
-                                       });\r
-                               };\r
-                       }\r
-\r
-                       if (v = s.theme_advanced_text_colors)\r
-                               o.colors = v;\r
-\r
-                       if (s.theme_advanced_default_foreground_color)\r
-                               o.default_color = s.theme_advanced_default_foreground_color;\r
-\r
-                       o.title = 'advanced.forecolor_desc';\r
-                       o.cmd = 'ForeColor';\r
-                       o.scope = this;\r
-\r
-                       c = t.editor.controlManager.createColorSplitButton('forecolor', o);\r
-\r
-                       return c;\r
-               },\r
-\r
-               _createBackColorMenu : function() {\r
-                       var c, t = this, s = t.settings, o = {}, v;\r
-\r
-                       if (s.theme_advanced_more_colors) {\r
-                               o.more_colors_func = function() {\r
-                                       t._mceColorPicker(0, {\r
-                                               color : c.value,\r
-                                               func : function(co) {\r
-                                                       c.setColor(co);\r
-                                               }\r
-                                       });\r
-                               };\r
-                       }\r
-\r
-                       if (v = s.theme_advanced_background_colors)\r
-                               o.colors = v;\r
-\r
-                       if (s.theme_advanced_default_background_color)\r
-                               o.default_color = s.theme_advanced_default_background_color;\r
-\r
-                       o.title = 'advanced.backcolor_desc';\r
-                       o.cmd = 'HiliteColor';\r
-                       o.scope = this;\r
-\r
-                       c = t.editor.controlManager.createColorSplitButton('backcolor', o);\r
-\r
-                       return c;\r
-               },\r
-\r
-               renderUI : function(o) {\r
-                       var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;\r
-\r
-                       if (ed.settings) {\r
-                               ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut');\r
-                       }\r
-\r
-                       // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for.\r
-                       // Maybe actually inherit it from the original textara?\r
-                       n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});\r
-                       DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label);\r
-\r
-                       if (!DOM.boxModel)\r
-                               n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});\r
-\r
-                       n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});\r
-                       n = tb = DOM.add(n, 'tbody');\r
-\r
-                       switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {\r
-                               case "rowlayout":\r
-                                       ic = t._rowLayout(s, tb, o);\r
-                                       break;\r
-\r
-                               case "customlayout":\r
-                                       ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);\r
-                                       break;\r
-\r
-                               default:\r
-                                       ic = t._simpleLayout(s, tb, o, p);\r
-                       }\r
-\r
-                       n = o.targetNode;\r
-\r
-                       // Add classes to first and last TRs\r
-                       nl = sc.rows;\r
-                       DOM.addClass(nl[0], 'mceFirst');\r
-                       DOM.addClass(nl[nl.length - 1], 'mceLast');\r
-\r
-                       // Add classes to first and last TDs\r
-                       each(DOM.select('tr', tb), function(n) {\r
-                               DOM.addClass(n.firstChild, 'mceFirst');\r
-                               DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');\r
-                       });\r
-\r
-                       if (DOM.get(s.theme_advanced_toolbar_container))\r
-                               DOM.get(s.theme_advanced_toolbar_container).appendChild(p);\r
-                       else\r
-                               DOM.insertAfter(p, n);\r
-\r
-                       Event.add(ed.id + '_path_row', 'click', function(e) {\r
-                               e = e.target;\r
-\r
-                               if (e.nodeName == 'A') {\r
-                                       t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));\r
-\r
-                                       return Event.cancel(e);\r
-                               }\r
-                       });\r
-/*\r
-                       if (DOM.get(ed.id + '_path_row')) {\r
-                               Event.add(ed.id + '_tbl', 'mouseover', function(e) {\r
-                                       var re;\r
-       \r
-                                       e = e.target;\r
-\r
-                                       if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {\r
-                                               re = DOM.get(ed.id + '_path_row');\r
-                                               t.lastPath = re.innerHTML;\r
-                                               DOM.setHTML(re, e.parentNode.title);\r
-                                       }\r
-                               });\r
-\r
-                               Event.add(ed.id + '_tbl', 'mouseout', function(e) {\r
-                                       if (t.lastPath) {\r
-                                               DOM.setHTML(ed.id + '_path_row', t.lastPath);\r
-                                               t.lastPath = 0;\r
-                                       }\r
-                               });\r
-                       }\r
-*/\r
-\r
-                       if (!ed.getParam('accessibility_focus'))\r
-                               Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});\r
-\r
-                       if (s.theme_advanced_toolbar_location == 'external')\r
-                               o.deltaHeight = 0;\r
-\r
-                       t.deltaHeight = o.deltaHeight;\r
-                       o.targetNode = null;\r
-\r
-                       ed.onKeyDown.add(function(ed, evt) {\r
-                               var DOM_VK_F10 = 121, DOM_VK_F11 = 122;\r
-\r
-                               if (evt.altKey) {\r
-                                       if (evt.keyCode === DOM_VK_F10) {\r
-                                               window.focus();\r
-                                               t.toolbarGroup.focus();\r
-                                               return Event.cancel(evt);\r
-                                       } else if (evt.keyCode === DOM_VK_F11) {\r
-                                               DOM.get(ed.id + '_path_row').focus();\r
-                                               return Event.cancel(evt);\r
-                                       }\r
-                               }\r
-                       });\r
-\r
-                       // alt+0 is the UK recommended shortcut for accessing the list of access controls.\r
-                       ed.addShortcut('alt+0', '', 'mceShortcuts', t);\r
-\r
-                       return {\r
-                               iframeContainer : ic,\r
-                               editorContainer : ed.id + '_parent',\r
-                               sizeContainer : sc,\r
-                               deltaHeight : o.deltaHeight\r
-                       };\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Advanced theme',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       }\r
-               },\r
-\r
-               resizeBy : function(dw, dh) {\r
-                       var e = DOM.get(this.editor.id + '_ifr');\r
-\r
-                       this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);\r
-               },\r
-\r
-               resizeTo : function(w, h, store) {\r
-                       var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');\r
-\r
-                       // Boundery fix box\r
-                       w = Math.max(s.theme_advanced_resizing_min_width || 100, w);\r
-                       h = Math.max(s.theme_advanced_resizing_min_height || 100, h);\r
-                       w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);\r
-                       h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);\r
-\r
-                       // Resize iframe and container\r
-                       DOM.setStyle(e, 'height', '');\r
-                       DOM.setStyle(ifr, 'height', h);\r
-\r
-                       if (s.theme_advanced_resize_horizontal) {\r
-                               DOM.setStyle(e, 'width', '');\r
-                               DOM.setStyle(ifr, 'width', w);\r
-\r
-                               // Make sure that the size is never smaller than the over all ui\r
-                               if (w < e.clientWidth) {\r
-                                       w = e.clientWidth;\r
-                                       DOM.setStyle(ifr, 'width', e.clientWidth);\r
-                               }\r
-                       }\r
-\r
-                       // Store away the size\r
-                       if (store && s.theme_advanced_resizing_use_cookie) {\r
-                               Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
-                                       cw : w,\r
-                                       ch : h\r
-                               });\r
-                       }\r
-               },\r
-\r
-               destroy : function() {\r
-                       var id = this.editor.id;\r
-\r
-                       Event.clear(id + '_resize');\r
-                       Event.clear(id + '_path_row');\r
-                       Event.clear(id + '_external_close');\r
-               },\r
-\r
-               // Internal functions\r
-\r
-               _simpleLayout : function(s, tb, o, p) {\r
-                       var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;\r
-\r
-                       if (s.readonly) {\r
-                               n = DOM.add(tb, 'tr');\r
-                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
-                               return ic;\r
-                       }\r
-\r
-                       // Create toolbar container at top\r
-                       if (lo == 'top')\r
-                               t._addToolbars(tb, o);\r
-\r
-                       // Create external toolbar\r
-                       if (lo == 'external') {\r
-                               n = c = DOM.create('div', {style : 'position:relative'});\r
-                               n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});\r
-                               DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});\r
-                               n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});\r
-                               etb = DOM.add(n, 'tbody');\r
-\r
-                               if (p.firstChild.className == 'mceOldBoxModel')\r
-                                       p.firstChild.appendChild(c);\r
-                               else\r
-                                       p.insertBefore(c, p.firstChild);\r
-\r
-                               t._addToolbars(etb, o);\r
-\r
-                               ed.onMouseUp.add(function() {\r
-                                       var e = DOM.get(ed.id + '_external');\r
-                                       DOM.show(e);\r
-\r
-                                       DOM.hide(lastExtID);\r
-\r
-                                       var f = Event.add(ed.id + '_external_close', 'click', function() {\r
-                                               DOM.hide(ed.id + '_external');\r
-                                               Event.remove(ed.id + '_external_close', 'click', f);\r
-                                       });\r
-\r
-                                       DOM.show(e);\r
-                                       DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);\r
-\r
-                                       // Fixes IE rendering bug\r
-                                       DOM.hide(e);\r
-                                       DOM.show(e);\r
-                                       e.style.filter = '';\r
-\r
-                                       lastExtID = ed.id + '_external';\r
-\r
-                                       e = null;\r
-                               });\r
-                       }\r
-\r
-                       if (sl == 'top')\r
-                               t._addStatusBar(tb, o);\r
-\r
-                       // Create iframe container\r
-                       if (!s.theme_advanced_toolbar_container) {\r
-                               n = DOM.add(tb, 'tr');\r
-                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
-                       }\r
-\r
-                       // Create toolbar container at bottom\r
-                       if (lo == 'bottom')\r
-                               t._addToolbars(tb, o);\r
-\r
-                       if (sl == 'bottom')\r
-                               t._addStatusBar(tb, o);\r
-\r
-                       return ic;\r
-               },\r
-\r
-               _rowLayout : function(s, tb, o) {\r
-                       var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;\r
-\r
-                       dc = s.theme_advanced_containers_default_class || '';\r
-                       da = s.theme_advanced_containers_default_align || 'center';\r
-\r
-                       each(explode(s.theme_advanced_containers || ''), function(c, i) {\r
-                               var v = s['theme_advanced_container_' + c] || '';\r
-\r
-                               switch (c.toLowerCase()) {\r
-                                       case 'mceeditor':\r
-                                               n = DOM.add(tb, 'tr');\r
-                                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
-                                               break;\r
-\r
-                                       case 'mceelementpath':\r
-                                               t._addStatusBar(tb, o);\r
-                                               break;\r
-\r
-                                       default:\r
-                                               a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase();\r
-                                               a = 'mce' + t._ufirst(a);\r
-\r
-                                               n = DOM.add(DOM.add(tb, 'tr'), 'td', {\r
-                                                       'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da\r
-                                               });\r
-\r
-                                               to = cf.createToolbar("toolbar" + i);\r
-                                               t._addControls(v, to);\r
-                                               DOM.setHTML(n, to.renderHTML());\r
-                                               o.deltaHeight -= s.theme_advanced_row_height;\r
-                               }\r
-                       });\r
-\r
-                       return ic;\r
-               },\r
-\r
-               _addControls : function(v, tb) {\r
-                       var t = this, s = t.settings, di, cf = t.editor.controlManager;\r
-\r
-                       if (s.theme_advanced_disable && !t._disabled) {\r
-                               di = {};\r
-\r
-                               each(explode(s.theme_advanced_disable), function(v) {\r
-                                       di[v] = 1;\r
-                               });\r
-\r
-                               t._disabled = di;\r
-                       } else\r
-                               di = t._disabled;\r
-\r
-                       each(explode(v), function(n) {\r
-                               var c;\r
-\r
-                               if (di && di[n])\r
-                                       return;\r
-\r
-                               // Compatiblity with 2.x\r
-                               if (n == 'tablecontrols') {\r
-                                       each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {\r
-                                               n = t.createControl(n, cf);\r
-\r
-                                               if (n)\r
-                                                       tb.add(n);\r
-                                       });\r
-\r
-                                       return;\r
-                               }\r
-\r
-                               c = t.createControl(n, cf);\r
-\r
-                               if (c)\r
-                                       tb.add(c);\r
-                       });\r
-               },\r
-\r
-               _addToolbars : function(c, o) {\r
-                       var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup;\r
-\r
-                       toolbarGroup = cf.createToolbarGroup('toolbargroup', {\r
-                               'name': ed.getLang('advanced.toolbar'),\r
-                               'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar')\r
-                       });\r
-\r
-                       t.toolbarGroup = toolbarGroup;\r
-\r
-                       a = s.theme_advanced_toolbar_align.toLowerCase();\r
-                       a = 'mce' + t._ufirst(a);\r
-\r
-                       n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"presentation"});\r
-\r
-                       // Create toolbar and add the controls\r
-                       for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {\r
-                               tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});\r
-\r
-                               if (s['theme_advanced_buttons' + i + '_add'])\r
-                                       v += ',' + s['theme_advanced_buttons' + i + '_add'];\r
-\r
-                               if (s['theme_advanced_buttons' + i + '_add_before'])\r
-                                       v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;\r
-\r
-                               t._addControls(v, tb);\r
-                               toolbarGroup.add(tb);\r
-\r
-                               o.deltaHeight -= s.theme_advanced_row_height;\r
-                       }\r
-                       h.push(toolbarGroup.renderHTML());\r
-                       h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
-                       DOM.setHTML(n, h.join(''));\r
-               },\r
-\r
-               _addStatusBar : function(tb, o) {\r
-                       var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;\r
-\r
-                       n = DOM.add(tb, 'tr');\r
-                       n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); \r
-                       n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'});\r
-                       if (s.theme_advanced_path) {\r
-                               DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path'));\r
-                               DOM.add(n, 'span', {}, ': ');\r
-                       } else {\r
-                               DOM.add(n, 'span', {}, '&#160;');\r
-                       }\r
-                       \r
-\r
-                       if (s.theme_advanced_resizing) {\r
-                               DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});\r
-\r
-                               if (s.theme_advanced_resizing_use_cookie) {\r
-                                       ed.onPostRender.add(function() {\r
-                                               var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');\r
-\r
-                                               if (!o)\r
-                                                       return;\r
-\r
-                                               t.resizeTo(o.cw, o.ch);\r
-                                       });\r
-                               }\r
-\r
-                               ed.onPostRender.add(function() {\r
-                                       Event.add(ed.id + '_resize', 'click', function(e) {\r
-                                               e.preventDefault();\r
-                                       });\r
-\r
-                                       Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
-                                               var mouseMoveHandler1, mouseMoveHandler2,\r
-                                                       mouseUpHandler1, mouseUpHandler2,\r
-                                                       startX, startY, startWidth, startHeight, width, height, ifrElm;\r
-\r
-                                               function resizeOnMove(e) {\r
-                                                       e.preventDefault();\r
-\r
-                                                       width = startWidth + (e.screenX - startX);\r
-                                                       height = startHeight + (e.screenY - startY);\r
-\r
-                                                       t.resizeTo(width, height);\r
-                                               };\r
-\r
-                                               function endResize(e) {\r
-                                                       // Stop listening\r
-                                                       Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);\r
-                                                       Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);\r
-                                                       Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);\r
-                                                       Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);\r
-\r
-                                                       width = startWidth + (e.screenX - startX);\r
-                                                       height = startHeight + (e.screenY - startY);\r
-                                                       t.resizeTo(width, height, true);\r
-                                               };\r
-\r
-                                               e.preventDefault();\r
-\r
-                                               // Get the current rect size\r
-                                               startX = e.screenX;\r
-                                               startY = e.screenY;\r
-                                               ifrElm = DOM.get(t.editor.id + '_ifr');\r
-                                               startWidth = width = ifrElm.clientWidth;\r
-                                               startHeight = height = ifrElm.clientHeight;\r
-\r
-                                               // Register envent handlers\r
-                                               mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);\r
-                                               mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);\r
-                                               mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);\r
-                                               mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);\r
-                                       });\r
-                               });\r
-                       }\r
-\r
-                       o.deltaHeight -= 21;\r
-                       n = tb = null;\r
-               },\r
-\r
-               _updateUndoStatus : function(ed) {\r
-                       var cm = ed.controlManager, um = ed.undoManager;\r
-\r
-                       cm.setDisabled('undo', !um.hasUndo() && !um.typing);\r
-                       cm.setDisabled('redo', !um.hasRedo());\r
-               },\r
-\r
-               _nodeChanged : function(ed, cm, n, co, ob) {\r
-                       var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches;\r
-\r
-                       tinymce.each(t.stateControls, function(c) {\r
-                               cm.setActive(c, ed.queryCommandState(t.controls[c][1]));\r
-                       });\r
-\r
-                       function getParent(name) {\r
-                               var i, parents = ob.parents, func = name;\r
-\r
-                               if (typeof(name) == 'string') {\r
-                                       func = function(node) {\r
-                                               return node.nodeName == name;\r
-                                       };\r
-                               }\r
-\r
-                               for (i = 0; i < parents.length; i++) {\r
-                                       if (func(parents[i]))\r
-                                               return parents[i];\r
-                               }\r
-                       };\r
-\r
-                       cm.setActive('visualaid', ed.hasVisual);\r
-                       t._updateUndoStatus(ed);\r
-                       cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));\r
-\r
-                       p = getParent('A');\r
-                       if (c = cm.get('link')) {\r
-                               if (!p || !p.name) {\r
-                                       c.setDisabled(!p && co);\r
-                                       c.setActive(!!p);\r
-                               }\r
-                       }\r
-\r
-                       if (c = cm.get('unlink')) {\r
-                               c.setDisabled(!p && co);\r
-                               c.setActive(!!p && !p.name);\r
-                       }\r
-\r
-                       if (c = cm.get('anchor')) {\r
-                               c.setActive(!co && !!p && p.name);\r
-                       }\r
-\r
-                       p = getParent('IMG');\r
-                       if (c = cm.get('image'))\r
-                               c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1);\r
-\r
-                       if (c = cm.get('styleselect')) {\r
-                               t._importClasses();\r
-\r
-                               formatNames = [];\r
-                               each(c.items, function(item) {\r
-                                       formatNames.push(item.value);\r
-                               });\r
-\r
-                               matches = ed.formatter.matchAll(formatNames);\r
-                               c.select(matches[0]);\r
-                       }\r
-\r
-                       if (c = cm.get('formatselect')) {\r
-                               p = getParent(DOM.isBlock);\r
-\r
-                               if (p)\r
-                                       c.select(p.nodeName.toLowerCase());\r
-                       }\r
-\r
-                       // Find out current fontSize, fontFamily and fontClass\r
-                       getParent(function(n) {\r
-                               if (n.nodeName === 'SPAN') {\r
-                                       if (!cl && n.className)\r
-                                               cl = n.className;\r
-                               }\r
-\r
-                               if (ed.dom.is(n, s.theme_advanced_font_selector)) {\r
-                                       if (!fz && n.style.fontSize)\r
-                                               fz = n.style.fontSize;\r
-\r
-                                       if (!fn && n.style.fontFamily)\r
-                                               fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();\r
-                                       \r
-                                       if (!fc && n.style.color)\r
-                                               fc = n.style.color;\r
-\r
-                                       if (!bc && n.style.backgroundColor)\r
-                                               bc = n.style.backgroundColor;\r
-                               }\r
-\r
-                               return false;\r
-                       });\r
-\r
-                       if (c = cm.get('fontselect')) {\r
-                               c.select(function(v) {\r
-                                       return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;\r
-                               });\r
-                       }\r
-\r
-                       // Select font size\r
-                       if (c = cm.get('fontsizeselect')) {\r
-                               // Use computed style\r
-                               if (s.theme_advanced_runtime_fontsize && !fz && !cl)\r
-                                       fz = ed.dom.getStyle(n, 'fontSize', true);\r
-\r
-                               c.select(function(v) {\r
-                                       if (v.fontSize && v.fontSize === fz)\r
-                                               return true;\r
-\r
-                                       if (v['class'] && v['class'] === cl)\r
-                                               return true;\r
-                               });\r
-                       }\r
-                       \r
-                       if (s.theme_advanced_show_current_color) {\r
-                               function updateColor(controlId, color) {\r
-                                       if (c = cm.get(controlId)) {\r
-                                               if (!color)\r
-                                                       color = c.settings.default_color;\r
-                                               if (color !== c.value) {\r
-                                                       c.displayColor(color);\r
-                                               }\r
-                                       }\r
-                               }\r
-                               updateColor('forecolor', fc);\r
-                               updateColor('backcolor', bc);\r
-                       }\r
-\r
-                       if (s.theme_advanced_show_current_color) {\r
-                               function updateColor(controlId, color) {\r
-                                       if (c = cm.get(controlId)) {\r
-                                               if (!color)\r
-                                                       color = c.settings.default_color;\r
-                                               if (color !== c.value) {\r
-                                                       c.displayColor(color);\r
-                                               }\r
-                                       }\r
-                               };\r
-\r
-                               updateColor('forecolor', fc);\r
-                               updateColor('backcolor', bc);\r
-                       }\r
-\r
-                       if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {\r
-                               p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});\r
-\r
-                               if (t.statusKeyboardNavigation) {\r
-                                       t.statusKeyboardNavigation.destroy();\r
-                                       t.statusKeyboardNavigation = null;\r
-                               }\r
-\r
-                               DOM.setHTML(p, '');\r
-\r
-                               getParent(function(n) {\r
-                                       var na = n.nodeName.toLowerCase(), u, pi, ti = '';\r
-\r
-                                       // Ignore non element and bogus/hidden elements\r
-                                       if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))\r
-                                               return;\r
-\r
-                                       // Handle prefix\r
-                                       if (tinymce.isIE && n.scopeName !== 'HTML')\r
-                                               na = n.scopeName + ':' + na;\r
-\r
-                                       // Remove internal prefix\r
-                                       na = na.replace(/mce\:/g, '');\r
-\r
-                                       // Handle node name\r
-                                       switch (na) {\r
-                                               case 'b':\r
-                                                       na = 'strong';\r
-                                                       break;\r
-\r
-                                               case 'i':\r
-                                                       na = 'em';\r
-                                                       break;\r
-\r
-                                               case 'img':\r
-                                                       if (v = DOM.getAttrib(n, 'src'))\r
-                                                               ti += 'src: ' + v + ' ';\r
-\r
-                                                       break;\r
-\r
-                                               case 'a':\r
-                                                       if (v = DOM.getAttrib(n, 'name')) {\r
-                                                               ti += 'name: ' + v + ' ';\r
-                                                               na += '#' + v;\r
-                                                       }\r
-\r
-                                                       if (v = DOM.getAttrib(n, 'href'))\r
-                                                               ti += 'href: ' + v + ' ';\r
-\r
-                                                       break;\r
-\r
-                                               case 'font':\r
-                                                       if (v = DOM.getAttrib(n, 'face'))\r
-                                                               ti += 'font: ' + v + ' ';\r
-\r
-                                                       if (v = DOM.getAttrib(n, 'size'))\r
-                                                               ti += 'size: ' + v + ' ';\r
-\r
-                                                       if (v = DOM.getAttrib(n, 'color'))\r
-                                                               ti += 'color: ' + v + ' ';\r
-\r
-                                                       break;\r
-\r
-                                               case 'span':\r
-                                                       if (v = DOM.getAttrib(n, 'style'))\r
-                                                               ti += 'style: ' + v + ' ';\r
-\r
-                                                       break;\r
-                                       }\r
-\r
-                                       if (v = DOM.getAttrib(n, 'id'))\r
-                                               ti += 'id: ' + v + ' ';\r
-\r
-                                       if (v = n.className) {\r
-                                               v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')\r
-\r
-                                               if (v) {\r
-                                                       ti += 'class: ' + v + ' ';\r
-\r
-                                                       if (DOM.isBlock(n) || na == 'img' || na == 'span')\r
-                                                               na += '.' + v;\r
-                                               }\r
-                                       }\r
-\r
-                                       na = na.replace(/(html:)/g, '');\r
-                                       na = {name : na, node : n, title : ti};\r
-                                       t.onResolveName.dispatch(t, na);\r
-                                       ti = na.title;\r
-                                       na = na.name;\r
-\r
-                                       //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";\r
-                                       pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);\r
-\r
-                                       if (p.hasChildNodes()) {\r
-                                               p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild);\r
-                                               p.insertBefore(pi, p.firstChild);\r
-                                       } else\r
-                                               p.appendChild(pi);\r
-                               }, ed.getBody());\r
-\r
-                               if (DOM.select('a', p).length > 0) {\r
-                                       t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({\r
-                                               root: ed.id + "_path_row",\r
-                                               items: DOM.select('a', p),\r
-                                               excludeFromTabOrder: true,\r
-                                               onCancel: function() {\r
-                                                       ed.focus();\r
-                                               }\r
-                                       }, DOM);\r
-                               }\r
-                       }\r
-               },\r
-\r
-               // Commands gets called by execCommand\r
-\r
-               _sel : function(v) {\r
-                       this.editor.execCommand('mceSelectNodeDepth', false, v);\r
-               },\r
-\r
-               _mceInsertAnchor : function(ui, v) {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/anchor.htm',\r
-                               width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),\r
-                               height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),\r
-                               inline : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceCharMap : function() {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/charmap.htm',\r
-                               width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),\r
-                               height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),\r
-                               inline : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceHelp : function() {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/about.htm',\r
-                               width : 480,\r
-                               height : 380,\r
-                               inline : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceShortcuts : function() {\r
-                       var ed = this.editor;\r
-                       ed.windowManager.open({\r
-                               url: this.url + '/shortcuts.htm',\r
-                               width: 480,\r
-                               height: 380,\r
-                               inline: true\r
-                       }, {\r
-                               theme_url: this.url\r
-                       });\r
-               },\r
-\r
-               _mceColorPicker : function(u, v) {\r
-                       var ed = this.editor;\r
-\r
-                       v = v || {};\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/color_picker.htm',\r
-                               width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),\r
-                               height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),\r
-                               close_previous : false,\r
-                               inline : true\r
-                       }, {\r
-                               input_color : v.color,\r
-                               func : v.func,\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceCodeEditor : function(ui, val) {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/source_editor.htm',\r
-                               width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),\r
-                               height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),\r
-                               inline : true,\r
-                               resizable : true,\r
-                               maximizable : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceImage : function(ui, val) {\r
-                       var ed = this.editor;\r
-\r
-                       // Internal image object like a flash placeholder\r
-                       if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)\r
-                               return;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/image.htm',\r
-                               width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),\r
-                               height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),\r
-                               inline : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceLink : function(ui, val) {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.open({\r
-                               url : this.url + '/link.htm',\r
-                               width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),\r
-                               height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),\r
-                               inline : true\r
-                       }, {\r
-                               theme_url : this.url\r
-                       });\r
-               },\r
-\r
-               _mceNewDocument : function() {\r
-                       var ed = this.editor;\r
-\r
-                       ed.windowManager.confirm('advanced.newdocument', function(s) {\r
-                               if (s)\r
-                                       ed.execCommand('mceSetContent', false, '');\r
-                       });\r
-               },\r
-\r
-               _mceForeColor : function() {\r
-                       var t = this;\r
-\r
-                       this._mceColorPicker(0, {\r
-                               color: t.fgColor,\r
-                               func : function(co) {\r
-                                       t.fgColor = co;\r
-                                       t.editor.execCommand('ForeColor', false, co);\r
-                               }\r
-                       });\r
-               },\r
-\r
-               _mceBackColor : function() {\r
-                       var t = this;\r
-\r
-                       this._mceColorPicker(0, {\r
-                               color: t.bgColor,\r
-                               func : function(co) {\r
-                                       t.bgColor = co;\r
-                                       t.editor.execCommand('HiliteColor', false, co);\r
-                               }\r
-                       });\r
-               },\r
-\r
-               _ufirst : function(s) {\r
-                       return s.substring(0, 1).toUpperCase() + s.substring(1);\r
-               }\r
-       });\r
-\r
-       tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);\r
-}(tinymce));\r
diff --git a/plugins/TinyMCE/js/themes/advanced/image.htm b/plugins/TinyMCE/js/themes/advanced/image.htm
deleted file mode 100644 (file)
index b8ba729..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.image_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="js/image.js"></script>\r
-</head>\r
-<body id="image" style="display: none">\r
-<form onsubmit="ImageDialog.update();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <table border="0" cellpadding="4" cellspacing="0">\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>\r
-                                       <td><table border="0" cellspacing="0" cellpadding="0">\r
-                                               <tr>\r
-                                                       <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>\r
-                                                       <td id="srcbrowsercontainer">&nbsp;</td>\r
-                                               </tr>\r
-                                       </table></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td><label for="image_list">{#advanced_dlg.image_list}</label></td>\r
-                                       <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>\r
-                                       <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>\r
-                                       <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">\r
-                                               <option value="">{#not_set}</option>\r
-                                               <option value="baseline">{#advanced_dlg.image_align_baseline}</option>\r
-                                               <option value="top">{#advanced_dlg.image_align_top}</option>\r
-                                               <option value="middle">{#advanced_dlg.image_align_middle}</option>\r
-                                               <option value="bottom">{#advanced_dlg.image_align_bottom}</option>\r
-                                               <option value="text-top">{#advanced_dlg.image_align_texttop}</option>\r
-                                               <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>\r
-                                               <option value="left">{#advanced_dlg.image_align_left}</option>\r
-                                               <option value="right">{#advanced_dlg.image_align_right}</option>\r
-                                       </select></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>\r
-                                       <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />\r
-                                        x \r
-                                       <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                               <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>\r
-                               <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>\r
-                                       <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>\r
-                                       <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
-                               </tr>\r
-                       </table>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg b/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg
deleted file mode 100644 (file)
index b1a377a..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/flash.gif b/plugins/TinyMCE/js/themes/advanced/img/flash.gif
deleted file mode 100644 (file)
index dec3f7c..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/flash.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/icons.gif b/plugins/TinyMCE/js/themes/advanced/img/icons.gif
deleted file mode 100644 (file)
index 641a9e3..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/icons.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/iframe.gif b/plugins/TinyMCE/js/themes/advanced/img/iframe.gif
deleted file mode 100644 (file)
index 410c7ad..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/iframe.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/pagebreak.gif b/plugins/TinyMCE/js/themes/advanced/img/pagebreak.gif
deleted file mode 100644 (file)
index acdf408..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/pagebreak.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/quicktime.gif b/plugins/TinyMCE/js/themes/advanced/img/quicktime.gif
deleted file mode 100644 (file)
index 8f10e7a..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/quicktime.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/realmedia.gif b/plugins/TinyMCE/js/themes/advanced/img/realmedia.gif
deleted file mode 100644 (file)
index fdfe0b9..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/realmedia.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/shockwave.gif b/plugins/TinyMCE/js/themes/advanced/img/shockwave.gif
deleted file mode 100644 (file)
index 9314d04..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/shockwave.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/trans.gif b/plugins/TinyMCE/js/themes/advanced/img/trans.gif
deleted file mode 100644 (file)
index 3884865..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/trans.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/video.gif b/plugins/TinyMCE/js/themes/advanced/img/video.gif
deleted file mode 100644 (file)
index 3570104..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/video.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/windowsmedia.gif b/plugins/TinyMCE/js/themes/advanced/img/windowsmedia.gif
deleted file mode 100644 (file)
index ab50f2d..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/img/windowsmedia.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/js/about.js b/plugins/TinyMCE/js/themes/advanced/js/about.js
deleted file mode 100644 (file)
index 5b35845..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-function init() {\r
-       var ed, tcont;\r
-\r
-       tinyMCEPopup.resizeToInnerSize();\r
-       ed = tinyMCEPopup.editor;\r
-\r
-       // Give FF some time\r
-       window.setTimeout(insertHelpIFrame, 10);\r
-\r
-       tcont = document.getElementById('plugintablecontainer');\r
-       document.getElementById('plugins_tab').style.display = 'none';\r
-\r
-       var html = "";\r
-       html += '<table id="plugintable">';\r
-       html += '<thead>';\r
-       html += '<tr>';\r
-       html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';\r
-       html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';\r
-       html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';\r
-       html += '</tr>';\r
-       html += '</thead>';\r
-       html += '<tbody>';\r
-\r
-       tinymce.each(ed.plugins, function(p, n) {\r
-               var info;\r
-\r
-               if (!p.getInfo)\r
-                       return;\r
-\r
-               html += '<tr>';\r
-\r
-               info = p.getInfo();\r
-\r
-               if (info.infourl != null && info.infourl != '')\r
-                       html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';\r
-               else\r
-                       html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';\r
-\r
-               if (info.authorurl != null && info.authorurl != '')\r
-                       html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';\r
-               else\r
-                       html += '<td width="35%">' + info.author + '</td>';\r
-\r
-               html += '<td width="15%">' + info.version + '</td>';\r
-               html += '</tr>';\r
-\r
-               document.getElementById('plugins_tab').style.display = '';\r
-\r
-       });\r
-\r
-       html += '</tbody>';\r
-       html += '</table>';\r
-\r
-       tcont.innerHTML = html;\r
-\r
-       tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;\r
-       tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;\r
-}\r
-\r
-function insertHelpIFrame() {\r
-       var html;\r
-\r
-       if (tinyMCEPopup.getParam('docs_url')) {\r
-               html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';\r
-               document.getElementById('iframecontainer').innerHTML = html;\r
-               document.getElementById('help_tab').style.display = 'block';\r
-               document.getElementById('help_tab').setAttribute("aria-hidden", "false");\r
-       }\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/anchor.js b/plugins/TinyMCE/js/themes/advanced/js/anchor.js
deleted file mode 100644 (file)
index e528e4f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var AnchorDialog = {\r
-       init : function(ed) {\r
-               var action, elm, f = document.forms[0];\r
-\r
-               this.editor = ed;\r
-               elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
-               v = ed.dom.getAttrib(elm, 'name');\r
-\r
-               if (v) {\r
-                       this.action = 'update';\r
-                       f.anchorName.value = v;\r
-               }\r
-\r
-               f.insert.value = ed.getLang(elm ? 'update' : 'insert');\r
-       },\r
-\r
-       update : function() {\r
-               var ed = this.editor, elm, name = document.forms[0].anchorName.value;\r
-\r
-               if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {\r
-                       tinyMCEPopup.alert('advanced_dlg.anchor_invalid');\r
-                       return;\r
-               }\r
-\r
-               tinyMCEPopup.restoreSelection();\r
-\r
-               if (this.action != 'update')\r
-                       ed.selection.collapse(1);\r
-\r
-               elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
-               if (elm)\r
-                       elm.name = name;\r
-               else\r
-                       ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));\r
-\r
-               tinyMCEPopup.close();\r
-       }\r
-};\r
-\r
-tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/charmap.js b/plugins/TinyMCE/js/themes/advanced/js/charmap.js
deleted file mode 100644 (file)
index 1cead6d..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/**\r
- * charmap.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-tinyMCEPopup.requireLangPack();\r
-\r
-var charmap = [\r
-       ['&nbsp;',    '&#160;',  true, 'no-break space'],\r
-       ['&amp;',     '&#38;',   true, 'ampersand'],\r
-       ['&quot;',    '&#34;',   true, 'quotation mark'],\r
-// finance\r
-       ['&cent;',    '&#162;',  true, 'cent sign'],\r
-       ['&euro;',    '&#8364;', true, 'euro sign'],\r
-       ['&pound;',   '&#163;',  true, 'pound sign'],\r
-       ['&yen;',     '&#165;',  true, 'yen sign'],\r
-// signs\r
-       ['&copy;',    '&#169;',  true, 'copyright sign'],\r
-       ['&reg;',     '&#174;',  true, 'registered sign'],\r
-       ['&trade;',   '&#8482;', true, 'trade mark sign'],\r
-       ['&permil;',  '&#8240;', true, 'per mille sign'],\r
-       ['&micro;',   '&#181;',  true, 'micro sign'],\r
-       ['&middot;',  '&#183;',  true, 'middle dot'],\r
-       ['&bull;',    '&#8226;', true, 'bullet'],\r
-       ['&hellip;',  '&#8230;', true, 'three dot leader'],\r
-       ['&prime;',   '&#8242;', true, 'minutes / feet'],\r
-       ['&Prime;',   '&#8243;', true, 'seconds / inches'],\r
-       ['&sect;',    '&#167;',  true, 'section sign'],\r
-       ['&para;',    '&#182;',  true, 'paragraph sign'],\r
-       ['&szlig;',   '&#223;',  true, 'sharp s / ess-zed'],\r
-// quotations\r
-       ['&lsaquo;',  '&#8249;', true, 'single left-pointing angle quotation mark'],\r
-       ['&rsaquo;',  '&#8250;', true, 'single right-pointing angle quotation mark'],\r
-       ['&laquo;',   '&#171;',  true, 'left pointing guillemet'],\r
-       ['&raquo;',   '&#187;',  true, 'right pointing guillemet'],\r
-       ['&lsquo;',   '&#8216;', true, 'left single quotation mark'],\r
-       ['&rsquo;',   '&#8217;', true, 'right single quotation mark'],\r
-       ['&ldquo;',   '&#8220;', true, 'left double quotation mark'],\r
-       ['&rdquo;',   '&#8221;', true, 'right double quotation mark'],\r
-       ['&sbquo;',   '&#8218;', true, 'single low-9 quotation mark'],\r
-       ['&bdquo;',   '&#8222;', true, 'double low-9 quotation mark'],\r
-       ['&lt;',      '&#60;',   true, 'less-than sign'],\r
-       ['&gt;',      '&#62;',   true, 'greater-than sign'],\r
-       ['&le;',      '&#8804;', true, 'less-than or equal to'],\r
-       ['&ge;',      '&#8805;', true, 'greater-than or equal to'],\r
-       ['&ndash;',   '&#8211;', true, 'en dash'],\r
-       ['&mdash;',   '&#8212;', true, 'em dash'],\r
-       ['&macr;',    '&#175;',  true, 'macron'],\r
-       ['&oline;',   '&#8254;', true, 'overline'],\r
-       ['&curren;',  '&#164;',  true, 'currency sign'],\r
-       ['&brvbar;',  '&#166;',  true, 'broken bar'],\r
-       ['&uml;',     '&#168;',  true, 'diaeresis'],\r
-       ['&iexcl;',   '&#161;',  true, 'inverted exclamation mark'],\r
-       ['&iquest;',  '&#191;',  true, 'turned question mark'],\r
-       ['&circ;',    '&#710;',  true, 'circumflex accent'],\r
-       ['&tilde;',   '&#732;',  true, 'small tilde'],\r
-       ['&deg;',     '&#176;',  true, 'degree sign'],\r
-       ['&minus;',   '&#8722;', true, 'minus sign'],\r
-       ['&plusmn;',  '&#177;',  true, 'plus-minus sign'],\r
-       ['&divide;',  '&#247;',  true, 'division sign'],\r
-       ['&frasl;',   '&#8260;', true, 'fraction slash'],\r
-       ['&times;',   '&#215;',  true, 'multiplication sign'],\r
-       ['&sup1;',    '&#185;',  true, 'superscript one'],\r
-       ['&sup2;',    '&#178;',  true, 'superscript two'],\r
-       ['&sup3;',    '&#179;',  true, 'superscript three'],\r
-       ['&frac14;',  '&#188;',  true, 'fraction one quarter'],\r
-       ['&frac12;',  '&#189;',  true, 'fraction one half'],\r
-       ['&frac34;',  '&#190;',  true, 'fraction three quarters'],\r
-// math / logical\r
-       ['&fnof;',    '&#402;',  true, 'function / florin'],\r
-       ['&int;',     '&#8747;', true, 'integral'],\r
-       ['&sum;',     '&#8721;', true, 'n-ary sumation'],\r
-       ['&infin;',   '&#8734;', true, 'infinity'],\r
-       ['&radic;',   '&#8730;', true, 'square root'],\r
-       ['&sim;',     '&#8764;', false,'similar to'],\r
-       ['&cong;',    '&#8773;', false,'approximately equal to'],\r
-       ['&asymp;',   '&#8776;', true, 'almost equal to'],\r
-       ['&ne;',      '&#8800;', true, 'not equal to'],\r
-       ['&equiv;',   '&#8801;', true, 'identical to'],\r
-       ['&isin;',    '&#8712;', false,'element of'],\r
-       ['&notin;',   '&#8713;', false,'not an element of'],\r
-       ['&ni;',      '&#8715;', false,'contains as member'],\r
-       ['&prod;',    '&#8719;', true, 'n-ary product'],\r
-       ['&and;',     '&#8743;', false,'logical and'],\r
-       ['&or;',      '&#8744;', false,'logical or'],\r
-       ['&not;',     '&#172;',  true, 'not sign'],\r
-       ['&cap;',     '&#8745;', true, 'intersection'],\r
-       ['&cup;',     '&#8746;', false,'union'],\r
-       ['&part;',    '&#8706;', true, 'partial differential'],\r
-       ['&forall;',  '&#8704;', false,'for all'],\r
-       ['&exist;',   '&#8707;', false,'there exists'],\r
-       ['&empty;',   '&#8709;', false,'diameter'],\r
-       ['&nabla;',   '&#8711;', false,'backward difference'],\r
-       ['&lowast;',  '&#8727;', false,'asterisk operator'],\r
-       ['&prop;',    '&#8733;', false,'proportional to'],\r
-       ['&ang;',     '&#8736;', false,'angle'],\r
-// undefined\r
-       ['&acute;',   '&#180;',  true, 'acute accent'],\r
-       ['&cedil;',   '&#184;',  true, 'cedilla'],\r
-       ['&ordf;',    '&#170;',  true, 'feminine ordinal indicator'],\r
-       ['&ordm;',    '&#186;',  true, 'masculine ordinal indicator'],\r
-       ['&dagger;',  '&#8224;', true, 'dagger'],\r
-       ['&Dagger;',  '&#8225;', true, 'double dagger'],\r
-// alphabetical special chars\r
-       ['&Agrave;',  '&#192;',  true, 'A - grave'],\r
-       ['&Aacute;',  '&#193;',  true, 'A - acute'],\r
-       ['&Acirc;',   '&#194;',  true, 'A - circumflex'],\r
-       ['&Atilde;',  '&#195;',  true, 'A - tilde'],\r
-       ['&Auml;',    '&#196;',  true, 'A - diaeresis'],\r
-       ['&Aring;',   '&#197;',  true, 'A - ring above'],\r
-       ['&AElig;',   '&#198;',  true, 'ligature AE'],\r
-       ['&Ccedil;',  '&#199;',  true, 'C - cedilla'],\r
-       ['&Egrave;',  '&#200;',  true, 'E - grave'],\r
-       ['&Eacute;',  '&#201;',  true, 'E - acute'],\r
-       ['&Ecirc;',   '&#202;',  true, 'E - circumflex'],\r
-       ['&Euml;',    '&#203;',  true, 'E - diaeresis'],\r
-       ['&Igrave;',  '&#204;',  true, 'I - grave'],\r
-       ['&Iacute;',  '&#205;',  true, 'I - acute'],\r
-       ['&Icirc;',   '&#206;',  true, 'I - circumflex'],\r
-       ['&Iuml;',    '&#207;',  true, 'I - diaeresis'],\r
-       ['&ETH;',     '&#208;',  true, 'ETH'],\r
-       ['&Ntilde;',  '&#209;',  true, 'N - tilde'],\r
-       ['&Ograve;',  '&#210;',  true, 'O - grave'],\r
-       ['&Oacute;',  '&#211;',  true, 'O - acute'],\r
-       ['&Ocirc;',   '&#212;',  true, 'O - circumflex'],\r
-       ['&Otilde;',  '&#213;',  true, 'O - tilde'],\r
-       ['&Ouml;',    '&#214;',  true, 'O - diaeresis'],\r
-       ['&Oslash;',  '&#216;',  true, 'O - slash'],\r
-       ['&OElig;',   '&#338;',  true, 'ligature OE'],\r
-       ['&Scaron;',  '&#352;',  true, 'S - caron'],\r
-       ['&Ugrave;',  '&#217;',  true, 'U - grave'],\r
-       ['&Uacute;',  '&#218;',  true, 'U - acute'],\r
-       ['&Ucirc;',   '&#219;',  true, 'U - circumflex'],\r
-       ['&Uuml;',    '&#220;',  true, 'U - diaeresis'],\r
-       ['&Yacute;',  '&#221;',  true, 'Y - acute'],\r
-       ['&Yuml;',    '&#376;',  true, 'Y - diaeresis'],\r
-       ['&THORN;',   '&#222;',  true, 'THORN'],\r
-       ['&agrave;',  '&#224;',  true, 'a - grave'],\r
-       ['&aacute;',  '&#225;',  true, 'a - acute'],\r
-       ['&acirc;',   '&#226;',  true, 'a - circumflex'],\r
-       ['&atilde;',  '&#227;',  true, 'a - tilde'],\r
-       ['&auml;',    '&#228;',  true, 'a - diaeresis'],\r
-       ['&aring;',   '&#229;',  true, 'a - ring above'],\r
-       ['&aelig;',   '&#230;',  true, 'ligature ae'],\r
-       ['&ccedil;',  '&#231;',  true, 'c - cedilla'],\r
-       ['&egrave;',  '&#232;',  true, 'e - grave'],\r
-       ['&eacute;',  '&#233;',  true, 'e - acute'],\r
-       ['&ecirc;',   '&#234;',  true, 'e - circumflex'],\r
-       ['&euml;',    '&#235;',  true, 'e - diaeresis'],\r
-       ['&igrave;',  '&#236;',  true, 'i - grave'],\r
-       ['&iacute;',  '&#237;',  true, 'i - acute'],\r
-       ['&icirc;',   '&#238;',  true, 'i - circumflex'],\r
-       ['&iuml;',    '&#239;',  true, 'i - diaeresis'],\r
-       ['&eth;',     '&#240;',  true, 'eth'],\r
-       ['&ntilde;',  '&#241;',  true, 'n - tilde'],\r
-       ['&ograve;',  '&#242;',  true, 'o - grave'],\r
-       ['&oacute;',  '&#243;',  true, 'o - acute'],\r
-       ['&ocirc;',   '&#244;',  true, 'o - circumflex'],\r
-       ['&otilde;',  '&#245;',  true, 'o - tilde'],\r
-       ['&ouml;',    '&#246;',  true, 'o - diaeresis'],\r
-       ['&oslash;',  '&#248;',  true, 'o slash'],\r
-       ['&oelig;',   '&#339;',  true, 'ligature oe'],\r
-       ['&scaron;',  '&#353;',  true, 's - caron'],\r
-       ['&ugrave;',  '&#249;',  true, 'u - grave'],\r
-       ['&uacute;',  '&#250;',  true, 'u - acute'],\r
-       ['&ucirc;',   '&#251;',  true, 'u - circumflex'],\r
-       ['&uuml;',    '&#252;',  true, 'u - diaeresis'],\r
-       ['&yacute;',  '&#253;',  true, 'y - acute'],\r
-       ['&thorn;',   '&#254;',  true, 'thorn'],\r
-       ['&yuml;',    '&#255;',  true, 'y - diaeresis'],\r
-       ['&Alpha;',   '&#913;',  true, 'Alpha'],\r
-       ['&Beta;',    '&#914;',  true, 'Beta'],\r
-       ['&Gamma;',   '&#915;',  true, 'Gamma'],\r
-       ['&Delta;',   '&#916;',  true, 'Delta'],\r
-       ['&Epsilon;', '&#917;',  true, 'Epsilon'],\r
-       ['&Zeta;',    '&#918;',  true, 'Zeta'],\r
-       ['&Eta;',     '&#919;',  true, 'Eta'],\r
-       ['&Theta;',   '&#920;',  true, 'Theta'],\r
-       ['&Iota;',    '&#921;',  true, 'Iota'],\r
-       ['&Kappa;',   '&#922;',  true, 'Kappa'],\r
-       ['&Lambda;',  '&#923;',  true, 'Lambda'],\r
-       ['&Mu;',      '&#924;',  true, 'Mu'],\r
-       ['&Nu;',      '&#925;',  true, 'Nu'],\r
-       ['&Xi;',      '&#926;',  true, 'Xi'],\r
-       ['&Omicron;', '&#927;',  true, 'Omicron'],\r
-       ['&Pi;',      '&#928;',  true, 'Pi'],\r
-       ['&Rho;',     '&#929;',  true, 'Rho'],\r
-       ['&Sigma;',   '&#931;',  true, 'Sigma'],\r
-       ['&Tau;',     '&#932;',  true, 'Tau'],\r
-       ['&Upsilon;', '&#933;',  true, 'Upsilon'],\r
-       ['&Phi;',     '&#934;',  true, 'Phi'],\r
-       ['&Chi;',     '&#935;',  true, 'Chi'],\r
-       ['&Psi;',     '&#936;',  true, 'Psi'],\r
-       ['&Omega;',   '&#937;',  true, 'Omega'],\r
-       ['&alpha;',   '&#945;',  true, 'alpha'],\r
-       ['&beta;',    '&#946;',  true, 'beta'],\r
-       ['&gamma;',   '&#947;',  true, 'gamma'],\r
-       ['&delta;',   '&#948;',  true, 'delta'],\r
-       ['&epsilon;', '&#949;',  true, 'epsilon'],\r
-       ['&zeta;',    '&#950;',  true, 'zeta'],\r
-       ['&eta;',     '&#951;',  true, 'eta'],\r
-       ['&theta;',   '&#952;',  true, 'theta'],\r
-       ['&iota;',    '&#953;',  true, 'iota'],\r
-       ['&kappa;',   '&#954;',  true, 'kappa'],\r
-       ['&lambda;',  '&#955;',  true, 'lambda'],\r
-       ['&mu;',      '&#956;',  true, 'mu'],\r
-       ['&nu;',      '&#957;',  true, 'nu'],\r
-       ['&xi;',      '&#958;',  true, 'xi'],\r
-       ['&omicron;', '&#959;',  true, 'omicron'],\r
-       ['&pi;',      '&#960;',  true, 'pi'],\r
-       ['&rho;',     '&#961;',  true, 'rho'],\r
-       ['&sigmaf;',  '&#962;',  true, 'final sigma'],\r
-       ['&sigma;',   '&#963;',  true, 'sigma'],\r
-       ['&tau;',     '&#964;',  true, 'tau'],\r
-       ['&upsilon;', '&#965;',  true, 'upsilon'],\r
-       ['&phi;',     '&#966;',  true, 'phi'],\r
-       ['&chi;',     '&#967;',  true, 'chi'],\r
-       ['&psi;',     '&#968;',  true, 'psi'],\r
-       ['&omega;',   '&#969;',  true, 'omega'],\r
-// symbols\r
-       ['&alefsym;', '&#8501;', false,'alef symbol'],\r
-       ['&piv;',     '&#982;',  false,'pi symbol'],\r
-       ['&real;',    '&#8476;', false,'real part symbol'],\r
-       ['&thetasym;','&#977;',  false,'theta symbol'],\r
-       ['&upsih;',   '&#978;',  false,'upsilon - hook symbol'],\r
-       ['&weierp;',  '&#8472;', false,'Weierstrass p'],\r
-       ['&image;',   '&#8465;', false,'imaginary part'],\r
-// arrows\r
-       ['&larr;',    '&#8592;', true, 'leftwards arrow'],\r
-       ['&uarr;',    '&#8593;', true, 'upwards arrow'],\r
-       ['&rarr;',    '&#8594;', true, 'rightwards arrow'],\r
-       ['&darr;',    '&#8595;', true, 'downwards arrow'],\r
-       ['&harr;',    '&#8596;', true, 'left right arrow'],\r
-       ['&crarr;',   '&#8629;', false,'carriage return'],\r
-       ['&lArr;',    '&#8656;', false,'leftwards double arrow'],\r
-       ['&uArr;',    '&#8657;', false,'upwards double arrow'],\r
-       ['&rArr;',    '&#8658;', false,'rightwards double arrow'],\r
-       ['&dArr;',    '&#8659;', false,'downwards double arrow'],\r
-       ['&hArr;',    '&#8660;', false,'left right double arrow'],\r
-       ['&there4;',  '&#8756;', false,'therefore'],\r
-       ['&sub;',     '&#8834;', false,'subset of'],\r
-       ['&sup;',     '&#8835;', false,'superset of'],\r
-       ['&nsub;',    '&#8836;', false,'not a subset of'],\r
-       ['&sube;',    '&#8838;', false,'subset of or equal to'],\r
-       ['&supe;',    '&#8839;', false,'superset of or equal to'],\r
-       ['&oplus;',   '&#8853;', false,'circled plus'],\r
-       ['&otimes;',  '&#8855;', false,'circled times'],\r
-       ['&perp;',    '&#8869;', false,'perpendicular'],\r
-       ['&sdot;',    '&#8901;', false,'dot operator'],\r
-       ['&lceil;',   '&#8968;', false,'left ceiling'],\r
-       ['&rceil;',   '&#8969;', false,'right ceiling'],\r
-       ['&lfloor;',  '&#8970;', false,'left floor'],\r
-       ['&rfloor;',  '&#8971;', false,'right floor'],\r
-       ['&lang;',    '&#9001;', false,'left-pointing angle bracket'],\r
-       ['&rang;',    '&#9002;', false,'right-pointing angle bracket'],\r
-       ['&loz;',     '&#9674;', true, 'lozenge'],\r
-       ['&spades;',  '&#9824;', true, 'black spade suit'],\r
-       ['&clubs;',   '&#9827;', true, 'black club suit'],\r
-       ['&hearts;',  '&#9829;', true, 'black heart suit'],\r
-       ['&diams;',   '&#9830;', true, 'black diamond suit'],\r
-       ['&ensp;',    '&#8194;', false,'en space'],\r
-       ['&emsp;',    '&#8195;', false,'em space'],\r
-       ['&thinsp;',  '&#8201;', false,'thin space'],\r
-       ['&zwnj;',    '&#8204;', false,'zero width non-joiner'],\r
-       ['&zwj;',     '&#8205;', false,'zero width joiner'],\r
-       ['&lrm;',     '&#8206;', false,'left-to-right mark'],\r
-       ['&rlm;',     '&#8207;', false,'right-to-left mark'],\r
-       ['&shy;',     '&#173;',  false,'soft hyphen']\r
-];\r
-\r
-tinyMCEPopup.onInit.add(function() {\r
-       tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());\r
-       addKeyboardNavigation();\r
-});\r
-\r
-function addKeyboardNavigation(){\r
-       var tableElm, cells, settings;\r
-\r
-       cells = tinyMCEPopup.dom.select(".charmaplink", "charmapgroup");\r
-\r
-       settings ={\r
-               root: "charmapgroup",\r
-               items: cells\r
-       };\r
-\r
-       tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);\r
-}\r
-\r
-function renderCharMapHTML() {\r
-       var charsPerRow = 20, tdWidth=20, tdHeight=20, i;\r
-       var html = '<div id="charmapgroup" aria-labelledby="charmap_label" tabindex="0" role="listbox">'+\r
-       '<table role="presentation" border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + \r
-       '"><tr height="' + tdHeight + '">';\r
-       var cols=-1;\r
-\r
-       for (i=0; i<charmap.length; i++) {\r
-               var previewCharFn;\r
-\r
-               if (charmap[i][2]==true) {\r
-                       cols++;\r
-                       previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');';\r
-                       html += ''\r
-                               + '<td class="charmap">'\r
-                               + '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'\r
-                               + charmap[i][1]\r
-                               + '</a></td>';\r
-                       if ((cols+1) % charsPerRow == 0)\r
-                               html += '</tr><tr height="' + tdHeight + '">';\r
-               }\r
-        }\r
-\r
-       if (cols % charsPerRow > 0) {\r
-               var padd = charsPerRow - (cols % charsPerRow);\r
-               for (var i=0; i<padd-1; i++)\r
-                       html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';\r
-       }\r
-\r
-       html += '</tr></table></div>';\r
-       html = html.replace(/<tr height="20"><\/tr>/g, '');\r
-\r
-       return html;\r
-}\r
-\r
-function insertChar(chr) {\r
-       tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');\r
-\r
-       // Refocus in window\r
-       if (tinyMCEPopup.isWindow)\r
-               window.focus();\r
-\r
-       tinyMCEPopup.editor.focus();\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function previewChar(codeA, codeB, codeN) {\r
-       var elmA = document.getElementById('codeA');\r
-       var elmB = document.getElementById('codeB');\r
-       var elmV = document.getElementById('codeV');\r
-       var elmN = document.getElementById('codeN');\r
-\r
-       if (codeA=='#160;') {\r
-               elmV.innerHTML = '__';\r
-       } else {\r
-               elmV.innerHTML = '&' + codeA;\r
-       }\r
-\r
-       elmB.innerHTML = '&amp;' + codeA;\r
-       elmA.innerHTML = '&amp;' + codeB;\r
-       elmN.innerHTML = codeN;\r
-}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/color_picker.js b/plugins/TinyMCE/js/themes/advanced/js/color_picker.js
deleted file mode 100644 (file)
index 7decac5..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var detail = 50, strhex = "0123456789ABCDEF", i, isMouseDown = false, isMouseOver = false;\r
-\r
-var colors = [\r
-       "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",\r
-       "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",\r
-       "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",\r
-       "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",\r
-       "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",\r
-       "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",\r
-       "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",\r
-       "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",\r
-       "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",\r
-       "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",\r
-       "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",\r
-       "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",\r
-       "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",\r
-       "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",\r
-       "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",\r
-       "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",\r
-       "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",\r
-       "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",\r
-       "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",\r
-       "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",\r
-       "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",\r
-       "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",\r
-       "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",\r
-       "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",\r
-       "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",\r
-       "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",\r
-       "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"\r
-];\r
-\r
-var named = {\r
-       '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',\r
-       '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown',\r
-       '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue',\r
-       '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod',\r
-       '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green',\r
-       '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue',\r
-       '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue',\r
-       '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green',\r
-       '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey',\r
-       '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory',\r
-       '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue',\r
-       '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green',\r
-       '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey',\r
-       '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',\r
-       '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue',\r
-       '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin',\r
-       '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid',\r
-       '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff',\r
-       '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue',\r
-       '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver',\r
-       '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green',\r
-       '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',\r
-       '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green'\r
-};\r
-\r
-var namedLookup = {};\r
-\r
-function init() {\r
-       var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value;\r
-\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       generatePicker();\r
-       generateWebColors();\r
-       generateNamedColors();\r
-\r
-       if (inputColor) {\r
-               changeFinalColor(inputColor);\r
-\r
-               col = convertHexToRGB(inputColor);\r
-\r
-               if (col)\r
-                       updateLight(col.r, col.g, col.b);\r
-       }\r
-       \r
-       for (key in named) {\r
-               value = named[key];\r
-               namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase();\r
-       }\r
-}\r
-\r
-function toHexColor(color) {\r
-       var matches, red, green, blue, toInt = parseInt;\r
-\r
-       function hex(value) {\r
-               value = parseInt(value).toString(16);\r
-\r
-               return value.length > 1 ? value : '0' + value; // Padd with leading zero\r
-       };\r
-\r
-       color = color.replace(/[\s#]+/g, '').toLowerCase();\r
-       color = namedLookup[color] || color;\r
-       matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})|([a-f0-9])([a-f0-9])([a-f0-9])$/.exec(color);\r
-\r
-       if (matches) {\r
-               if (matches[1]) {\r
-                       red = toInt(matches[1]);\r
-                       green = toInt(matches[2]);\r
-                       blue = toInt(matches[3]);\r
-               } else if (matches[4]) {\r
-                       red = toInt(matches[4], 16);\r
-                       green = toInt(matches[5], 16);\r
-                       blue = toInt(matches[6], 16);\r
-               } else if (matches[7]) {\r
-                       red = toInt(matches[7] + matches[7], 16);\r
-                       green = toInt(matches[8] + matches[8], 16);\r
-                       blue = toInt(matches[9] + matches[9], 16);\r
-               }\r
-\r
-               return '#' + hex(red) + hex(green) + hex(blue);\r
-       }\r
-\r
-       return '';\r
-}\r
-\r
-function insertAction() {\r
-       var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');\r
-\r
-       tinyMCEPopup.restoreSelection();\r
-\r
-       if (f)\r
-               f(toHexColor(color));\r
-\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function showColor(color, name) {\r
-       if (name)\r
-               document.getElementById("colorname").innerHTML = name;\r
-\r
-       document.getElementById("preview").style.backgroundColor = color;\r
-       document.getElementById("color").value = color.toUpperCase();\r
-}\r
-\r
-function convertRGBToHex(col) {\r
-       var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
-\r
-       if (!col)\r
-               return col;\r
-\r
-       var rgb = col.replace(re, "$1,$2,$3").split(',');\r
-       if (rgb.length == 3) {\r
-               r = parseInt(rgb[0]).toString(16);\r
-               g = parseInt(rgb[1]).toString(16);\r
-               b = parseInt(rgb[2]).toString(16);\r
-\r
-               r = r.length == 1 ? '0' + r : r;\r
-               g = g.length == 1 ? '0' + g : g;\r
-               b = b.length == 1 ? '0' + b : b;\r
-\r
-               return "#" + r + g + b;\r
-       }\r
-\r
-       return col;\r
-}\r
-\r
-function convertHexToRGB(col) {\r
-       if (col.indexOf('#') != -1) {\r
-               col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
-\r
-               r = parseInt(col.substring(0, 2), 16);\r
-               g = parseInt(col.substring(2, 4), 16);\r
-               b = parseInt(col.substring(4, 6), 16);\r
-\r
-               return {r : r, g : g, b : b};\r
-       }\r
-\r
-       return null;\r
-}\r
-\r
-function generatePicker() {\r
-       var el = document.getElementById('light'), h = '', i;\r
-\r
-       for (i = 0; i < detail; i++){\r
-               h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'\r
-               + ' onclick="changeFinalColor(this.style.backgroundColor)"'\r
-               + ' onmousedown="isMouseDown = true; return false;"'\r
-               + ' onmouseup="isMouseDown = false;"'\r
-               + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'\r
-               + ' onmouseover="isMouseOver = true;"'\r
-               + ' onmouseout="isMouseOver = false;"'\r
-               + '></div>';\r
-       }\r
-\r
-       el.innerHTML = h;\r
-}\r
-\r
-function generateWebColors() {\r
-       var el = document.getElementById('webcolors'), h = '', i;\r
-\r
-       if (el.className == 'generated')\r
-               return;\r
-\r
-       // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby.\r
-       h += '<div role="listbox" aria-labelledby="webcolors_title" tabindex="0"><table role="presentation" border="0" cellspacing="1" cellpadding="0">'\r
-               + '<tr>';\r
-\r
-       for (i=0; i<colors.length; i++) {\r
-               h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'\r
-                       + '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="web_colors_' + i + '" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">';\r
-               if (tinyMCEPopup.editor.forcedHighContrastMode) {\r
-                       h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';\r
-               }\r
-               h += '<span class="mceVoiceLabel" style="display:none;" id="web_colors_' + i + '">' + colors[i].toUpperCase() + '</span>';\r
-               h += '</a></td>';\r
-               if ((i+1) % 18 == 0)\r
-                       h += '</tr><tr>';\r
-       }\r
-\r
-       h += '</table></div>';\r
-\r
-       el.innerHTML = h;\r
-       el.className = 'generated';\r
-\r
-       paintCanvas(el);\r
-       enableKeyboardNavigation(el.firstChild);\r
-}\r
-\r
-function paintCanvas(el) {\r
-       tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) {\r
-               var context;\r
-               if (canvas.getContext && (context = canvas.getContext("2d"))) {\r
-                       context.fillStyle = canvas.getAttribute('data-color');\r
-                       context.fillRect(0, 0, 10, 10);\r
-               }\r
-       });\r
-}\r
-function generateNamedColors() {\r
-       var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;\r
-\r
-       if (el.className == 'generated')\r
-               return;\r
-\r
-       for (n in named) {\r
-               v = named[n];\r
-               h += '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="named_colors_' + i + '" onfocus="showColor(\'' + n + '\',\'' + v + '\');" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '">';\r
-               if (tinyMCEPopup.editor.forcedHighContrastMode) {\r
-                       h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';\r
-               }\r
-               h += '<span class="mceVoiceLabel" style="display:none;" id="named_colors_' + i + '">' + v + '</span>';\r
-               h += '</a>';\r
-               i++;\r
-       }\r
-\r
-       el.innerHTML = h;\r
-       el.className = 'generated';\r
-\r
-       paintCanvas(el);\r
-       enableKeyboardNavigation(el);\r
-}\r
-\r
-function enableKeyboardNavigation(el) {\r
-       tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {\r
-               root: el,\r
-               items: tinyMCEPopup.dom.select('a', el)\r
-       }, tinyMCEPopup.dom);\r
-}\r
-\r
-function dechex(n) {\r
-       return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);\r
-}\r
-\r
-function computeColor(e) {\r
-       var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;\r
-\r
-       x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);\r
-       y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);\r
-\r
-       partWidth = document.getElementById('colors').width / 6;\r
-       partDetail = detail / 2;\r
-       imHeight = document.getElementById('colors').height;\r
-\r
-       r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;\r
-       g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255     + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);\r
-       b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);\r
-\r
-       coef = (imHeight - y) / imHeight;\r
-       r = 128 + (r - 128) * coef;\r
-       g = 128 + (g - 128) * coef;\r
-       b = 128 + (b - 128) * coef;\r
-\r
-       changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));\r
-       updateLight(r, g, b);\r
-}\r
-\r
-function updateLight(r, g, b) {\r
-       var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;\r
-\r
-       for (i=0; i<detail; i++) {\r
-               if ((i>=0) && (i<partDetail)) {\r
-                       finalCoef = i / partDetail;\r
-                       finalR = dechex(255 - (255 - r) * finalCoef);\r
-                       finalG = dechex(255 - (255 - g) * finalCoef);\r
-                       finalB = dechex(255 - (255 - b) * finalCoef);\r
-               } else {\r
-                       finalCoef = 2 - i / partDetail;\r
-                       finalR = dechex(r * finalCoef);\r
-                       finalG = dechex(g * finalCoef);\r
-                       finalB = dechex(b * finalCoef);\r
-               }\r
-\r
-               color = finalR + finalG + finalB;\r
-\r
-               setCol('gs' + i, '#'+color);\r
-       }\r
-}\r
-\r
-function changeFinalColor(color) {\r
-       if (color.indexOf('#') == -1)\r
-               color = convertRGBToHex(color);\r
-\r
-       setCol('preview', color);\r
-       document.getElementById('color').value = color;\r
-}\r
-\r
-function setCol(e, c) {\r
-       try {\r
-               document.getElementById(e).style.backgroundColor = c;\r
-       } catch (ex) {\r
-               // Ignore IE warning\r
-       }\r
-}\r
-\r
-tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/image.js b/plugins/TinyMCE/js/themes/advanced/js/image.js
deleted file mode 100644 (file)
index 2bccc97..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-var ImageDialog = {\r
-       preInit : function() {\r
-               var url;\r
-\r
-               tinyMCEPopup.requireLangPack();\r
-\r
-               if (url = tinyMCEPopup.getParam("external_image_list_url"))\r
-                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
-       },\r
-\r
-       init : function() {\r
-               var f = document.forms[0], ed = tinyMCEPopup.editor;\r
-\r
-               // Setup browse button\r
-               document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
-               if (isVisible('srcbrowser'))\r
-                       document.getElementById('src').style.width = '180px';\r
-\r
-               e = ed.selection.getNode();\r
-\r
-               this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));\r
-\r
-               if (e.nodeName == 'IMG') {\r
-                       f.src.value = ed.dom.getAttrib(e, 'src');\r
-                       f.alt.value = ed.dom.getAttrib(e, 'alt');\r
-                       f.border.value = this.getAttrib(e, 'border');\r
-                       f.vspace.value = this.getAttrib(e, 'vspace');\r
-                       f.hspace.value = this.getAttrib(e, 'hspace');\r
-                       f.width.value = ed.dom.getAttrib(e, 'width');\r
-                       f.height.value = ed.dom.getAttrib(e, 'height');\r
-                       f.insert.value = ed.getLang('update');\r
-                       this.styleVal = ed.dom.getAttrib(e, 'style');\r
-                       selectByValue(f, 'image_list', f.src.value);\r
-                       selectByValue(f, 'align', this.getAttrib(e, 'align'));\r
-                       this.updateStyle();\r
-               }\r
-       },\r
-\r
-       fillFileList : function(id, l) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
-\r
-               l = typeof(l) === 'function' ? l() : window[l];\r
-\r
-               if (l && l.length > 0) {\r
-                       lst.options[lst.options.length] = new Option('', '');\r
-\r
-                       tinymce.each(l, function(o) {\r
-                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
-                       });\r
-               } else\r
-                       dom.remove(dom.getParent(id, 'tr'));\r
-       },\r
-\r
-       update : function() {\r
-               var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;\r
-\r
-               tinyMCEPopup.restoreSelection();\r
-\r
-               if (f.src.value === '') {\r
-                       if (ed.selection.getNode().nodeName == 'IMG') {\r
-                               ed.dom.remove(ed.selection.getNode());\r
-                               ed.execCommand('mceRepaint');\r
-                       }\r
-\r
-                       tinyMCEPopup.close();\r
-                       return;\r
-               }\r
-\r
-               if (!ed.settings.inline_styles) {\r
-                       args = tinymce.extend(args, {\r
-                               vspace : nl.vspace.value,\r
-                               hspace : nl.hspace.value,\r
-                               border : nl.border.value,\r
-                               align : getSelectValue(f, 'align')\r
-                       });\r
-               } else\r
-                       args.style = this.styleVal;\r
-\r
-               tinymce.extend(args, {\r
-                       src : f.src.value.replace(/ /g, '%20'),\r
-                       alt : f.alt.value,\r
-                       width : f.width.value,\r
-                       height : f.height.value\r
-               });\r
-\r
-               el = ed.selection.getNode();\r
-\r
-               if (el && el.nodeName == 'IMG') {\r
-                       ed.dom.setAttribs(el, args);\r
-                       tinyMCEPopup.editor.execCommand('mceRepaint');\r
-                       tinyMCEPopup.editor.focus();\r
-               } else {\r
-                       ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});\r
-                       ed.dom.setAttribs('__mce_tmp', args);\r
-                       ed.dom.setAttrib('__mce_tmp', 'id', '');\r
-                       ed.undoManager.add();\r
-               }\r
-\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       updateStyle : function() {\r
-               var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];\r
-\r
-               if (tinyMCEPopup.editor.settings.inline_styles) {\r
-                       st = tinyMCEPopup.dom.parseStyle(this.styleVal);\r
-\r
-                       // Handle align\r
-                       v = getSelectValue(f, 'align');\r
-                       if (v) {\r
-                               if (v == 'left' || v == 'right') {\r
-                                       st['float'] = v;\r
-                                       delete st['vertical-align'];\r
-                               } else {\r
-                                       st['vertical-align'] = v;\r
-                                       delete st['float'];\r
-                               }\r
-                       } else {\r
-                               delete st['float'];\r
-                               delete st['vertical-align'];\r
-                       }\r
-\r
-                       // Handle border\r
-                       v = f.border.value;\r
-                       if (v || v == '0') {\r
-                               if (v == '0')\r
-                                       st['border'] = '0';\r
-                               else\r
-                                       st['border'] = v + 'px solid black';\r
-                       } else\r
-                               delete st['border'];\r
-\r
-                       // Handle hspace\r
-                       v = f.hspace.value;\r
-                       if (v) {\r
-                               delete st['margin'];\r
-                               st['margin-left'] = v + 'px';\r
-                               st['margin-right'] = v + 'px';\r
-                       } else {\r
-                               delete st['margin-left'];\r
-                               delete st['margin-right'];\r
-                       }\r
-\r
-                       // Handle vspace\r
-                       v = f.vspace.value;\r
-                       if (v) {\r
-                               delete st['margin'];\r
-                               st['margin-top'] = v + 'px';\r
-                               st['margin-bottom'] = v + 'px';\r
-                       } else {\r
-                               delete st['margin-top'];\r
-                               delete st['margin-bottom'];\r
-                       }\r
-\r
-                       // Merge\r
-                       st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');\r
-                       this.styleVal = dom.serializeStyle(st, 'img');\r
-               }\r
-       },\r
-\r
-       getAttrib : function(e, at) {\r
-               var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;\r
-\r
-               if (ed.settings.inline_styles) {\r
-                       switch (at) {\r
-                               case 'align':\r
-                                       if (v = dom.getStyle(e, 'float'))\r
-                                               return v;\r
-\r
-                                       if (v = dom.getStyle(e, 'vertical-align'))\r
-                                               return v;\r
-\r
-                                       break;\r
-\r
-                               case 'hspace':\r
-                                       v = dom.getStyle(e, 'margin-left')\r
-                                       v2 = dom.getStyle(e, 'margin-right');\r
-                                       if (v && v == v2)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-\r
-                               case 'vspace':\r
-                                       v = dom.getStyle(e, 'margin-top')\r
-                                       v2 = dom.getStyle(e, 'margin-bottom');\r
-                                       if (v && v == v2)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-\r
-                               case 'border':\r
-                                       v = 0;\r
-\r
-                                       tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {\r
-                                               sv = dom.getStyle(e, 'border-' + sv + '-width');\r
-\r
-                                               // False or not the same as prev\r
-                                               if (!sv || (sv != v && v !== 0)) {\r
-                                                       v = 0;\r
-                                                       return false;\r
-                                               }\r
-\r
-                                               if (sv)\r
-                                                       v = sv;\r
-                                       });\r
-\r
-                                       if (v)\r
-                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
-\r
-                                       break;\r
-                       }\r
-               }\r
-\r
-               if (v = dom.getAttrib(e, at))\r
-                       return v;\r
-\r
-               return '';\r
-       },\r
-\r
-       resetImageData : function() {\r
-               var f = document.forms[0];\r
-\r
-               f.width.value = f.height.value = "";    \r
-       },\r
-\r
-       updateImageData : function() {\r
-               var f = document.forms[0], t = ImageDialog;\r
-\r
-               if (f.width.value == "")\r
-                       f.width.value = t.preloadImg.width;\r
-\r
-               if (f.height.value == "")\r
-                       f.height.value = t.preloadImg.height;\r
-       },\r
-\r
-       getImageData : function() {\r
-               var f = document.forms[0];\r
-\r
-               this.preloadImg = new Image();\r
-               this.preloadImg.onload = this.updateImageData;\r
-               this.preloadImg.onerror = this.resetImageData;\r
-               this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);\r
-       }\r
-};\r
-\r
-ImageDialog.preInit();\r
-tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/link.js b/plugins/TinyMCE/js/themes/advanced/js/link.js
deleted file mode 100644 (file)
index 53ff409..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-\r
-var LinkDialog = {\r
-       preInit : function() {\r
-               var url;\r
-\r
-               if (url = tinyMCEPopup.getParam("external_link_list_url"))\r
-                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
-       },\r
-\r
-       init : function() {\r
-               var f = document.forms[0], ed = tinyMCEPopup.editor;\r
-\r
-               // Setup browse button\r
-               document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');\r
-               if (isVisible('hrefbrowser'))\r
-                       document.getElementById('href').style.width = '180px';\r
-\r
-               this.fillClassList('class_list');\r
-               this.fillFileList('link_list', 'tinyMCELinkList');\r
-               this.fillTargetList('target_list');\r
-\r
-               if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {\r
-                       f.href.value = ed.dom.getAttrib(e, 'href');\r
-                       f.linktitle.value = ed.dom.getAttrib(e, 'title');\r
-                       f.insert.value = ed.getLang('update');\r
-                       selectByValue(f, 'link_list', f.href.value);\r
-                       selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));\r
-                       selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));\r
-               }\r
-       },\r
-\r
-       update : function() {\r
-               var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20');\r
-\r
-               tinyMCEPopup.restoreSelection();\r
-               e = ed.dom.getParent(ed.selection.getNode(), 'A');\r
-\r
-               // Remove element if there is no href\r
-               if (!f.href.value) {\r
-                       if (e) {\r
-                               b = ed.selection.getBookmark();\r
-                               ed.dom.remove(e, 1);\r
-                               ed.selection.moveToBookmark(b);\r
-                               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-                               tinyMCEPopup.close();\r
-                               return;\r
-                       }\r
-               }\r
-\r
-               // Create new anchor elements\r
-               if (e == null) {\r
-                       ed.getDoc().execCommand("unlink", false, null);\r
-                       tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});\r
-\r
-                       tinymce.each(ed.dom.select("a"), function(n) {\r
-                               if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {\r
-                                       e = n;\r
-\r
-                                       ed.dom.setAttribs(e, {\r
-                                               href : href,\r
-                                               title : f.linktitle.value,\r
-                                               target : f.target_list ? getSelectValue(f, "target_list") : null,\r
-                                               'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
-                                       });\r
-                               }\r
-                       });\r
-               } else {\r
-                       ed.dom.setAttribs(e, {\r
-                               href : href,\r
-                               title : f.linktitle.value,\r
-                               target : f.target_list ? getSelectValue(f, "target_list") : null,\r
-                               'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
-                       });\r
-               }\r
-\r
-               // Don't move caret if selection was image\r
-               if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {\r
-                       ed.focus();\r
-                       ed.selection.select(e);\r
-                       ed.selection.collapse(0);\r
-                       tinyMCEPopup.storeSelection();\r
-               }\r
-\r
-               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-               tinyMCEPopup.close();\r
-       },\r
-\r
-       checkPrefix : function(n) {\r
-               if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))\r
-                       n.value = 'mailto:' + n.value;\r
-\r
-               if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))\r
-                       n.value = 'http://' + n.value;\r
-       },\r
-\r
-       fillFileList : function(id, l) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
-\r
-               l = window[l];\r
-\r
-               if (l && l.length > 0) {\r
-                       lst.options[lst.options.length] = new Option('', '');\r
-\r
-                       tinymce.each(l, function(o) {\r
-                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
-                       });\r
-               } else\r
-                       dom.remove(dom.getParent(id, 'tr'));\r
-       },\r
-\r
-       fillClassList : function(id) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
-\r
-               if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {\r
-                       cl = [];\r
-\r
-                       tinymce.each(v.split(';'), function(v) {\r
-                               var p = v.split('=');\r
-\r
-                               cl.push({'title' : p[0], 'class' : p[1]});\r
-                       });\r
-               } else\r
-                       cl = tinyMCEPopup.editor.dom.getClasses();\r
-\r
-               if (cl.length > 0) {\r
-                       lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
-\r
-                       tinymce.each(cl, function(o) {\r
-                               lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);\r
-                       });\r
-               } else\r
-                       dom.remove(dom.getParent(id, 'tr'));\r
-       },\r
-\r
-       fillTargetList : function(id) {\r
-               var dom = tinyMCEPopup.dom, lst = dom.get(id), v;\r
-\r
-               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
-               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');\r
-               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');\r
-\r
-               if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {\r
-                       tinymce.each(v.split(','), function(v) {\r
-                               v = v.split('=');\r
-                               lst.options[lst.options.length] = new Option(v[0], v[1]);\r
-                       });\r
-               }\r
-       }\r
-};\r
-\r
-LinkDialog.preInit();\r
-tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/source_editor.js b/plugins/TinyMCE/js/themes/advanced/js/source_editor.js
deleted file mode 100644 (file)
index 84546ad..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-tinyMCEPopup.requireLangPack();\r
-tinyMCEPopup.onInit.add(onLoadInit);\r
-\r
-function saveContent() {\r
-       tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});\r
-       tinyMCEPopup.close();\r
-}\r
-\r
-function onLoadInit() {\r
-       tinyMCEPopup.resizeToInnerSize();\r
-\r
-       // Remove Gecko spellchecking\r
-       if (tinymce.isGecko)\r
-               document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");\r
-\r
-       document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});\r
-\r
-       if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {\r
-               setWrap('soft');\r
-               document.getElementById('wraped').checked = true;\r
-       }\r
-\r
-       resizeInputs();\r
-}\r
-\r
-function setWrap(val) {\r
-       var v, n, s = document.getElementById('htmlSource');\r
-\r
-       s.wrap = val;\r
-\r
-       if (!tinymce.isIE) {\r
-               v = s.value;\r
-               n = s.cloneNode(false);\r
-               n.setAttribute("wrap", val);\r
-               s.parentNode.replaceChild(n, s);\r
-               n.value = v;\r
-       }\r
-}\r
-\r
-function toggleWordWrap(elm) {\r
-       if (elm.checked)\r
-               setWrap('soft');\r
-       else\r
-               setWrap('off');\r
-}\r
-\r
-function resizeInputs() {\r
-       var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
-\r
-       el = document.getElementById('htmlSource');\r
-\r
-       if (el) {\r
-               el.style.width = (vp.w - 20) + 'px';\r
-               el.style.height = (vp.h - 65) + 'px';\r
-       }\r
-}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/langs/en.js b/plugins/TinyMCE/js/themes/advanced/langs/en.js
deleted file mode 100644 (file)
index fbf2989..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-tinyMCE.addI18n('en.advanced',{\r
-style_select:"Styles",\r
-font_size:"Font size",\r
-fontdefault:"Font family",\r
-block:"Format",\r
-paragraph:"Paragraph",\r
-div:"Div",\r
-address:"Address",\r
-pre:"Preformatted",\r
-h1:"Heading 1",\r
-h2:"Heading 2",\r
-h3:"Heading 3",\r
-h4:"Heading 4",\r
-h5:"Heading 5",\r
-h6:"Heading 6",\r
-blockquote:"Blockquote",\r
-code:"Code",\r
-samp:"Code sample",\r
-dt:"Definition term ",\r
-dd:"Definition description",\r
-bold_desc:"Bold (Ctrl+B)",\r
-italic_desc:"Italic (Ctrl+I)",\r
-underline_desc:"Underline (Ctrl+U)",\r
-striketrough_desc:"Strikethrough",\r
-justifyleft_desc:"Align left",\r
-justifycenter_desc:"Align center",\r
-justifyright_desc:"Align right",\r
-justifyfull_desc:"Align full",\r
-bullist_desc:"Unordered list",\r
-numlist_desc:"Ordered list",\r
-outdent_desc:"Outdent",\r
-indent_desc:"Indent",\r
-undo_desc:"Undo (Ctrl+Z)",\r
-redo_desc:"Redo (Ctrl+Y)",\r
-link_desc:"Insert/edit link",\r
-unlink_desc:"Unlink",\r
-image_desc:"Insert/edit image",\r
-cleanup_desc:"Cleanup messy code",\r
-code_desc:"Edit HTML Source",\r
-sub_desc:"Subscript",\r
-sup_desc:"Superscript",\r
-hr_desc:"Insert horizontal ruler",\r
-removeformat_desc:"Remove formatting",\r
-custom1_desc:"Your custom description here",\r
-forecolor_desc:"Select text color",\r
-backcolor_desc:"Select background color",\r
-charmap_desc:"Insert custom character",\r
-visualaid_desc:"Toggle guidelines/invisible elements",\r
-anchor_desc:"Insert/edit anchor",\r
-cut_desc:"Cut",\r
-copy_desc:"Copy",\r
-paste_desc:"Paste",\r
-image_props_desc:"Image properties",\r
-newdocument_desc:"New document",\r
-help_desc:"Help",\r
-blockquote_desc:"Blockquote",\r
-clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",\r
-path:"Path",\r
-newdocument:"Are you sure you want clear all contents?",\r
-toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",\r
-more_colors:"More colors",\r
-\r
-// Accessibility Strings\r
-shortcuts_desc:'Accessibility Help',\r
-help_shortcut:'. Press ALT F10 for toolbar. Press ALT 0 for help.',\r
-rich_text_area:"Rich Text Area",\r
-toolbar:"Toolbar"\r
-});\r
diff --git a/plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js b/plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js
deleted file mode 100644 (file)
index 0a459be..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-tinyMCE.addI18n('en.advanced_dlg',{\r
-about_title:"About TinyMCE",\r
-about_general:"About",\r
-about_help:"Help",\r
-about_license:"License",\r
-about_plugins:"Plugins",\r
-about_plugin:"Plugin",\r
-about_author:"Author",\r
-about_version:"Version",\r
-about_loaded:"Loaded plugins",\r
-anchor_title:"Insert/edit anchor",\r
-anchor_name:"Anchor name",\r
-anchor_invalid:"Please specify a valid anchor name.",\r
-code_title:"HTML Source Editor",\r
-code_wordwrap:"Word wrap",\r
-colorpicker_title:"Select a color",\r
-colorpicker_picker_tab:"Picker",\r
-colorpicker_picker_title:"Color picker",\r
-colorpicker_palette_tab:"Palette",\r
-colorpicker_palette_title:"Palette colors",\r
-colorpicker_named_tab:"Named",\r
-colorpicker_named_title:"Named colors",\r
-colorpicker_color:"Color:",\r
-colorpicker_name:"Name:",\r
-charmap_title:"Select custom character",\r
-image_title:"Insert/edit image",\r
-image_src:"Image URL",\r
-image_alt:"Image description",\r
-image_list:"Image list",\r
-image_border:"Border",\r
-image_dimensions:"Dimensions",\r
-image_vspace:"Vertical space",\r
-image_hspace:"Horizontal space",\r
-image_align:"Alignment",\r
-image_align_baseline:"Baseline",\r
-image_align_top:"Top",\r
-image_align_middle:"Middle",\r
-image_align_bottom:"Bottom",\r
-image_align_texttop:"Text top",\r
-image_align_textbottom:"Text bottom",\r
-image_align_left:"Left",\r
-image_align_right:"Right",\r
-link_title:"Insert/edit link",\r
-link_url:"Link URL",\r
-link_target:"Target",\r
-link_target_same:"Open link in the same window",\r
-link_target_blank:"Open link in a new window",\r
-link_titlefield:"Title",\r
-link_is_email:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",\r
-link_is_external:"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",\r
-link_list:"Link list",\r
-accessibility_help:"Accessibility Help",\r
-accessibility_usage_title:"General Usage"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/link.htm b/plugins/TinyMCE/js/themes/advanced/link.htm
deleted file mode 100644 (file)
index 5d9dea9..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.link_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
-       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
-       <script type="text/javascript" src="../../utils/validate.js"></script>\r
-       <script type="text/javascript" src="js/link.js"></script>\r
-</head>\r
-<body id="link" style="display: none">\r
-<form onsubmit="LinkDialog.update();return false;" action="#">\r
-       <div class="tabs">\r
-               <ul>\r
-                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>\r
-               </ul>\r
-       </div>\r
-\r
-       <div class="panel_wrapper">\r
-               <div id="general_panel" class="panel current">\r
-                       <table border="0" cellpadding="4" cellspacing="0">\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>\r
-                                       <td><table border="0" cellspacing="0" cellpadding="0"> \r
-                                               <tr> \r
-                                                       <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> \r
-                                                       <td id="hrefbrowsercontainer">&nbsp;</td>\r
-                                               </tr> \r
-                                       </table></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td><label for="link_list">{#advanced_dlg.link_list}</label></td>\r
-                                       <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>\r
-                                       <td><select id="target_list" name="target_list"></select></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>\r
-                                       <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td><label for="class_list">{#class_name}</label></td>\r
-                                       <td><select id="class_list" name="class_list"></select></td>\r
-                               </tr>\r
-                       </table>\r
-               </div>\r
-       </div>\r
-\r
-       <div class="mceActionPanel">\r
-               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
-               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
-       </div>\r
-</form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/shortcuts.htm b/plugins/TinyMCE/js/themes/advanced/shortcuts.htm
deleted file mode 100644 (file)
index 20ec2f5..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-       <head>\r
-               <title>{#advanced_dlg.accessibility_help}</title>\r
-               <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-               <script type="text/javascript">tinyMCEPopup.requireLangPack();</script>\r
-       </head>\r
-       <body id="content">\r
-               <h1>{#advanced_dlg.accessibility_usage_title}</h1>\r
-               <h2>Toolbars</h2>\r
-               <p>Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys.\r
-               Press enter to activate a button and return focus to the editor.\r
-               Press escape to return focus to the editor without performing any actions.</p>\r
-               \r
-               <h2>Status Bar</h2>\r
-               <p>To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path.\r
-               Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.</p>\r
-               \r
-               <h2>Context Menu</h2>\r
-               <p>Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key.\r
-               To close submenus press the left arrow key.  Press escape to close the context menu.</p>\r
-               \r
-               <h1>Keyboard Shortcuts</h1>\r
-               <table>\r
-                       <thead>\r
-                               <tr>\r
-                                       <th>Keystroke</th>\r
-                                       <th>Function</th>\r
-                               </tr>\r
-                       </thead>\r
-                       <tbody>\r
-                               <tr>\r
-                                       <td>Control-B</td><td>Bold</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td>Control-I</td><td>Italic</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td>Control-Z</td><td>Undo</td>\r
-                               </tr>\r
-                               <tr>\r
-                                       <td>Control-Y</td><td>Redo</td>\r
-                               </tr>\r
-                       </tbody>\r
-               </table>\r
-       </body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/content.css b/plugins/TinyMCE/js/themes/advanced/skins/default/content.css
deleted file mode 100644 (file)
index 569a3ae..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
-body {background:#FFF;}\r
-body.mceForceColors {background:#FFF; color:#000;}\r
-body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;}\r
-h1 {font-size: 2em}\r
-h2 {font-size: 1.5em}\r
-h3 {font-size: 1.17em}\r
-h4 {font-size: 1em}\r
-h5 {font-size: .83em}\r
-h6 {font-size: .75em}\r
-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
-a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center}\r
-span.mceItemNbsp {background: #DDD}\r
-td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
-img {border:0;}\r
-table {cursor:default}\r
-table td, table th {cursor:text}\r
-ins {border-bottom:1px solid green; text-decoration: none; color:green}\r
-del {color:red; text-decoration:line-through}\r
-cite {border-bottom:1px dashed blue}\r
-acronym {border-bottom:1px dotted #CCC; cursor:help}\r
-abbr {border-bottom:1px dashed #CCC; cursor:help}\r
-\r
-/* IE */\r
-* html body {\r
-scrollbar-3dlight-color:#F0F0EE;\r
-scrollbar-arrow-color:#676662;\r
-scrollbar-base-color:#F0F0EE;\r
-scrollbar-darkshadow-color:#DDD;\r
-scrollbar-face-color:#E0E0DD;\r
-scrollbar-highlight-color:#F0F0EE;\r
-scrollbar-shadow-color:#F0F0EE;\r
-scrollbar-track-color:#F5F5F5;\r
-}\r
-\r
-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
-font[face=mceinline] {font-family:inherit !important}\r
-\r
-.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}\r
-.mceItemShockWave {background-image:url(../../img/shockwave.gif)}\r
-.mceItemFlash {background-image:url(../../img/flash.gif)}\r
-.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}\r
-.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}\r
-.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}\r
-.mceItemVideo {background-image:url(../../img/video.gif)}\r
-.mceItemIframe {background-image:url(../../img/iframe.gif)}\r
-.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css b/plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css
deleted file mode 100644 (file)
index f012226..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Generic */\r
-body {\r
-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
-scrollbar-3dlight-color:#F0F0EE;\r
-scrollbar-arrow-color:#676662;\r
-scrollbar-base-color:#F0F0EE;\r
-scrollbar-darkshadow-color:#DDDDDD;\r
-scrollbar-face-color:#E0E0DD;\r
-scrollbar-highlight-color:#F0F0EE;\r
-scrollbar-shadow-color:#F0F0EE;\r
-scrollbar-track-color:#F5F5F5;\r
-background:#F0F0EE;\r
-padding:0;\r
-margin:8px 8px 0 8px;\r
-}\r
-\r
-html {background:#F0F0EE;}\r
-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-textarea {resize:none;outline:none;}\r
-a:link, a:visited {color:black;}\r
-a:hover {color:#2B6FB6;}\r
-.nowrap {white-space: nowrap}\r
-\r
-/* Forms */\r
-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
-legend {color:#2B6FB6; font-weight:bold;}\r
-label.msg {display:none;}\r
-label.invalid {color:#EE0000; display:inline;}\r
-input.invalid {border:1px solid #EE0000;}\r
-input {background:#FFF; border:1px solid #CCC;}\r
-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-input, select, textarea {border:1px solid #808080;}\r
-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-.input_noborder {border:0;}\r
-\r
-/* Buttons */\r
-#insert, #cancel, input.button, .updateButton {\r
-border:0; margin:0; padding:0;\r
-font-weight:bold;\r
-width:94px; height:26px;\r
-background:url(img/buttons.png) 0 -26px;\r
-cursor:pointer;\r
-padding-bottom:2px;\r
-float:left;\r
-}\r
-\r
-#insert {background:url(img/buttons.png) 0 -52px}\r
-#cancel {background:url(img/buttons.png) 0 0; float:right}\r
-\r
-/* Browse */\r
-a.pickcolor, a.browse {text-decoration:none}\r
-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
-.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
-a.pickcolor:hover span {background-color:#B2BBD0;}\r
-a.pickcolor:hover span.disabled {}\r
-\r
-/* Charmap */\r
-table.charmap {border:1px solid #AAA; text-align:center}\r
-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
-#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
-#charmap a:hover {background:#CCC;color:#2B6FB6}\r
-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
-\r
-/* Source */\r
-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
-.mceActionPanel {margin-top:5px;}\r
-\r
-/* Tabs classes */\r
-.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}\r
-.tabs ul {margin:0; padding:0; list-style:none;}\r
-.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
-.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
-.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
-.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}\r
-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
-\r
-/* Panels */\r
-.panel_wrapper div.panel {display:none;}\r
-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
-.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
-\r
-/* Columns */\r
-.column {float:left;}\r
-.properties {width:100%;}\r
-.properties .column1 {}\r
-.properties .column2 {text-align:left;}\r
-\r
-/* Titles */\r
-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
-h3 {font-size:14px;}\r
-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
-\r
-/* Dialog specific */\r
-#link .panel_wrapper, #link div.current {height:125px;}\r
-#image .panel_wrapper, #image div.current {height:200px;}\r
-#plugintable thead {font-weight:bold; background:#DDD;}\r
-#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
-#plugintable {width:96%; margin-top:10px;}\r
-#pluginscontainer {height:290px; overflow:auto;}\r
-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
-#colorpicker #light div {overflow:hidden;}\r
-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
-#colorpicker .panel_wrapper div.current {height:175px;}\r
-#colorpicker #namedcolors {width:150px;}\r
-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
-#colorpicker #colornamecontainer {margin-top:5px;}\r
-#colorpicker #picker_panel fieldset {margin:auto;width:325px;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png b/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png
deleted file mode 100644 (file)
index 1e53560..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif
deleted file mode 100644 (file)
index d2f9367..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif
deleted file mode 100644 (file)
index 85e31df..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif
deleted file mode 100644 (file)
index adfdddc..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif
deleted file mode 100644 (file)
index 5bb90fd..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif
deleted file mode 100644 (file)
index 06812cb..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/ui.css b/plugins/TinyMCE/js/themes/advanced/skins/default/ui.css
deleted file mode 100644 (file)
index 2b7c2a5..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Reset */\r
-.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
-.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
-.defaultSkin table td {vertical-align:middle}\r
-\r
-/* Containers */\r
-.defaultSkin table {direction:ltr;background:transparent}\r
-.defaultSkin iframe {display:block;}\r
-.defaultSkin .mceToolbar {height:26px}\r
-.defaultSkin .mceLeft {text-align:left}\r
-.defaultSkin .mceRight {text-align:right}\r
-\r
-/* External */\r
-.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}\r
-.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
-.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
-\r
-/* Layout */\r
-.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}\r
-.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}\r
-.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}\r
-.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}\r
-.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top}\r
-.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}\r
-.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}\r
-.defaultSkin .mceStatusbar div {float:left; margin:2px}\r
-.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
-.defaultSkin .mceStatusbar a:hover {text-decoration:underline}\r
-.defaultSkin table.mceToolbar {margin-left:3px}\r
-.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}\r
-.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
-.defaultSkin td.mceCenter {text-align:center;}\r
-.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}\r
-.defaultSkin td.mceRight table {margin:0 0 0 auto;}\r
-\r
-/* Button */\r
-.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}\r
-.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
-.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}\r
-.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-.defaultSkin .mceButtonLabeled {width:auto}\r
-.defaultSkin .mceButtonLabeled span.mceIcon {float:left}\r
-.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}\r
-.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}\r
-\r
-/* Separator */\r
-.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}\r
-\r
-/* ListBox */\r
-.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}\r
-.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
-.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}\r
-.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}\r
-.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}\r
-.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}\r
-.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
-.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
-.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}\r
-.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}\r
-\r
-/* SplitButton */\r
-.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}\r
-.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}\r
-.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}\r
-.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}\r
-.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}\r
-.defaultSkin .mceSplitButton span.mceOpen {display:none}\r
-.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}\r
-.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}\r
-.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}\r
-.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}\r
-\r
-/* ColorSplitButton */\r
-.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
-.defaultSkin .mceColorSplitMenu td {padding:2px}\r
-.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
-.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
-.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
-.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
-.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}\r
-.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}\r
-.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}\r
-\r
-/* Menu */\r
-.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}\r
-.defaultSkin .mceNoIcons span.mceIcon {width:0;}\r
-.defaultSkin .mceNoIcons a .mceText {padding-left:10px}\r
-.defaultSkin .mceMenu table {background:#FFF}\r
-.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}\r
-.defaultSkin .mceMenu td {height:20px}\r
-.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
-.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
-.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}\r
-.defaultSkin .mceMenu pre.mceText {font-family:Monospace}\r
-.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
-.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
-.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
-.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}\r
-.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
-.defaultSkin .mceMenuItemDisabled .mceText {color:#888}\r
-.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}\r
-.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}\r
-.defaultSkin .mceMenu span.mceMenuLine {display:none}\r
-.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}\r
-.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal}\r
-\r
-/* Progress,Resize */\r
-.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}\r
-.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
-\r
-/* Formats */\r
-.defaultSkin .mce_formatPreview a {font-size:10px}\r
-.defaultSkin .mce_p span.mceText {}\r
-.defaultSkin .mce_address span.mceText {font-style:italic}\r
-.defaultSkin .mce_pre span.mceText {font-family:monospace}\r
-.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
-.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
-.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
-.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
-.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
-.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
-\r
-/* Theme */\r
-.defaultSkin span.mce_bold {background-position:0 0}\r
-.defaultSkin span.mce_italic {background-position:-60px 0}\r
-.defaultSkin span.mce_underline {background-position:-140px 0}\r
-.defaultSkin span.mce_strikethrough {background-position:-120px 0}\r
-.defaultSkin span.mce_undo {background-position:-160px 0}\r
-.defaultSkin span.mce_redo {background-position:-100px 0}\r
-.defaultSkin span.mce_cleanup {background-position:-40px 0}\r
-.defaultSkin span.mce_bullist {background-position:-20px 0}\r
-.defaultSkin span.mce_numlist {background-position:-80px 0}\r
-.defaultSkin span.mce_justifyleft {background-position:-460px 0}\r
-.defaultSkin span.mce_justifyright {background-position:-480px 0}\r
-.defaultSkin span.mce_justifycenter {background-position:-420px 0}\r
-.defaultSkin span.mce_justifyfull {background-position:-440px 0}\r
-.defaultSkin span.mce_anchor {background-position:-200px 0}\r
-.defaultSkin span.mce_indent {background-position:-400px 0}\r
-.defaultSkin span.mce_outdent {background-position:-540px 0}\r
-.defaultSkin span.mce_link {background-position:-500px 0}\r
-.defaultSkin span.mce_unlink {background-position:-640px 0}\r
-.defaultSkin span.mce_sub {background-position:-600px 0}\r
-.defaultSkin span.mce_sup {background-position:-620px 0}\r
-.defaultSkin span.mce_removeformat {background-position:-580px 0}\r
-.defaultSkin span.mce_newdocument {background-position:-520px 0}\r
-.defaultSkin span.mce_image {background-position:-380px 0}\r
-.defaultSkin span.mce_help {background-position:-340px 0}\r
-.defaultSkin span.mce_code {background-position:-260px 0}\r
-.defaultSkin span.mce_hr {background-position:-360px 0}\r
-.defaultSkin span.mce_visualaid {background-position:-660px 0}\r
-.defaultSkin span.mce_charmap {background-position:-240px 0}\r
-.defaultSkin span.mce_paste {background-position:-560px 0}\r
-.defaultSkin span.mce_copy {background-position:-700px 0}\r
-.defaultSkin span.mce_cut {background-position:-680px 0}\r
-.defaultSkin span.mce_blockquote {background-position:-220px 0}\r
-.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}\r
-.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}\r
-.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}\r
-.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}\r
-\r
-/* Plugins */\r
-.defaultSkin span.mce_advhr {background-position:-0px -20px}\r
-.defaultSkin span.mce_ltr {background-position:-20px -20px}\r
-.defaultSkin span.mce_rtl {background-position:-40px -20px}\r
-.defaultSkin span.mce_emotions {background-position:-60px -20px}\r
-.defaultSkin span.mce_fullpage {background-position:-80px -20px}\r
-.defaultSkin span.mce_fullscreen {background-position:-100px -20px}\r
-.defaultSkin span.mce_iespell {background-position:-120px -20px}\r
-.defaultSkin span.mce_insertdate {background-position:-140px -20px}\r
-.defaultSkin span.mce_inserttime {background-position:-160px -20px}\r
-.defaultSkin span.mce_absolute {background-position:-180px -20px}\r
-.defaultSkin span.mce_backward {background-position:-200px -20px}\r
-.defaultSkin span.mce_forward {background-position:-220px -20px}\r
-.defaultSkin span.mce_insert_layer {background-position:-240px -20px}\r
-.defaultSkin span.mce_insertlayer {background-position:-260px -20px}\r
-.defaultSkin span.mce_movebackward {background-position:-280px -20px}\r
-.defaultSkin span.mce_moveforward {background-position:-300px -20px}\r
-.defaultSkin span.mce_media {background-position:-320px -20px}\r
-.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}\r
-.defaultSkin span.mce_pastetext {background-position:-360px -20px}\r
-.defaultSkin span.mce_pasteword {background-position:-380px -20px}\r
-.defaultSkin span.mce_selectall {background-position:-400px -20px}\r
-.defaultSkin span.mce_preview {background-position:-420px -20px}\r
-.defaultSkin span.mce_print {background-position:-440px -20px}\r
-.defaultSkin span.mce_cancel {background-position:-460px -20px}\r
-.defaultSkin span.mce_save {background-position:-480px -20px}\r
-.defaultSkin span.mce_replace {background-position:-500px -20px}\r
-.defaultSkin span.mce_search {background-position:-520px -20px}\r
-.defaultSkin span.mce_styleprops {background-position:-560px -20px}\r
-.defaultSkin span.mce_table {background-position:-580px -20px}\r
-.defaultSkin span.mce_cell_props {background-position:-600px -20px}\r
-.defaultSkin span.mce_delete_table {background-position:-620px -20px}\r
-.defaultSkin span.mce_delete_col {background-position:-640px -20px}\r
-.defaultSkin span.mce_delete_row {background-position:-660px -20px}\r
-.defaultSkin span.mce_col_after {background-position:-680px -20px}\r
-.defaultSkin span.mce_col_before {background-position:-700px -20px}\r
-.defaultSkin span.mce_row_after {background-position:-720px -20px}\r
-.defaultSkin span.mce_row_before {background-position:-740px -20px}\r
-.defaultSkin span.mce_merge_cells {background-position:-760px -20px}\r
-.defaultSkin span.mce_table_props {background-position:-980px -20px}\r
-.defaultSkin span.mce_row_props {background-position:-780px -20px}\r
-.defaultSkin span.mce_split_cells {background-position:-800px -20px}\r
-.defaultSkin span.mce_template {background-position:-820px -20px}\r
-.defaultSkin span.mce_visualchars {background-position:-840px -20px}\r
-.defaultSkin span.mce_abbr {background-position:-860px -20px}\r
-.defaultSkin span.mce_acronym {background-position:-880px -20px}\r
-.defaultSkin span.mce_attribs {background-position:-900px -20px}\r
-.defaultSkin span.mce_cite {background-position:-920px -20px}\r
-.defaultSkin span.mce_del {background-position:-940px -20px}\r
-.defaultSkin span.mce_ins {background-position:-960px -20px}\r
-.defaultSkin span.mce_pagebreak {background-position:0 -40px}\r
-.defaultSkin span.mce_restoredraft {background-position:-20px -40px}\r
-.defaultSkin span.mce_spellchecker {background-position:-540px -20px}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/content.css b/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/content.css
deleted file mode 100644 (file)
index c2e30c7..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-body, td, pre { margin:8px;}\r
-body.mceForceColors {background:#FFF; color:#000;}\r
-h1 {font-size: 2em}\r
-h2 {font-size: 1.5em}\r
-h3 {font-size: 1.17em}\r
-h4 {font-size: 1em}\r
-h5 {font-size: .83em}\r
-h6 {font-size: .75em}\r
-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
-a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}\r
-span.mceItemNbsp {background: #DDD}\r
-td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
-img {border:0;}\r
-table {cursor:default}\r
-table td, table th {cursor:text}\r
-ins {border-bottom:1px solid green; text-decoration: none; color:green}\r
-del {color:red; text-decoration:line-through}\r
-cite {border-bottom:1px dashed blue}\r
-acronym {border-bottom:1px dotted #CCC; cursor:help}\r
-abbr {border-bottom:1px dashed #CCC; cursor:help}\r
-\r
-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
-font[face=mceinline] {font-family:inherit !important}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/dialog.css b/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/dialog.css
deleted file mode 100644 (file)
index b2ed097..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Generic */\r
-body {\r
-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
-background:#F0F0EE;
-color: black;\r
-padding:0;\r
-margin:8px 8px 0 8px;\r
-}\r
-\r
-html {background:#F0F0EE; color:#000;}\r
-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-textarea {resize:none;outline:none;}\r
-a:link, a:visited {color:black;background-color:transparent;}\r
-a:hover {color:#2B6FB6;background-color:transparent;}\r
-.nowrap {white-space: nowrap}\r
-\r
-/* Forms */\r
-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
-legend {color:#2B6FB6; font-weight:bold;}\r
-label.msg {display:none;}\r
-label.invalid {color:#EE0000; display:inline;background-color:transparent;}\r
-input.invalid {border:1px solid #EE0000;background-color:transparent;}\r
-input {background:#FFF; border:1px solid #CCC;color:black;}\r
-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-input, select, textarea {border:1px solid #808080;}\r
-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-.input_noborder {border:0;}\r
-\r
-/* Buttons */\r
-#insert, #cancel, input.button, .updateButton {\r
-font-weight:bold;\r
-width:94px; height:23px;\r
-cursor:pointer;\r
-padding-bottom:2px;\r
-float:left;\r
-}\r
-\r
-#cancel {float:right}\r
-\r
-/* Browse */\r
-a.pickcolor, a.browse {text-decoration:none}\r
-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
-.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
-a.pickcolor:hover span {background-color:#B2BBD0;}\r
-a.pickcolor:hover span.disabled {}\r
-\r
-/* Charmap */\r
-table.charmap {border:1px solid #AAA; text-align:center}\r
-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
-#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
-#charmap a:hover {background:#CCC;color:#2B6FB6}\r
-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
-\r
-/* Source */\r
-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
-.mceActionPanel {margin-top:5px;}\r
-\r
-/* Tabs classes */\r
-.tabs {width:100%; height:18px; line-height:normal;}\r
-.tabs ul {margin:0; padding:0; list-style:none;}\r
-.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;}\r
-.tabs li.current {font-weight: bold; margin-right:2px;}\r
-.tabs span {float:left; display:block; padding:0px 10px 0 0;}\r
-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
-\r
-/* Panels */\r
-.panel_wrapper div.panel {display:none;}\r
-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
-.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;}\r
-\r
-/* Columns */\r
-.column {float:left;}\r
-.properties {width:100%;}\r
-.properties .column1 {}\r
-.properties .column2 {text-align:left;}\r
-\r
-/* Titles */\r
-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
-h3 {font-size:14px;}\r
-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
-\r
-/* Dialog specific */\r
-#link .panel_wrapper, #link div.current {height:125px;}\r
-#image .panel_wrapper, #image div.current {height:200px;}\r
-#plugintable thead {font-weight:bold; background:#DDD;}\r
-#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
-#plugintable {width:96%; margin-top:10px;}\r
-#pluginscontainer {height:290px; overflow:auto;}\r
-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
-#colorpicker #light div {overflow:hidden;}\r
-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
-#colorpicker .panel_wrapper div.current {height:175px;}\r
-#colorpicker #namedcolors {width:150px;}\r
-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
-#colorpicker #colornamecontainer {margin-top:5px;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/ui.css b/plugins/TinyMCE/js/themes/advanced/skins/highcontrast/ui.css
deleted file mode 100644 (file)
index a2cfcc3..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Reset */\r
-.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;}\r
-.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;}\r
-.highcontrastSkin table td {vertical-align:middle}\r
-\r
-.highcontrastSkin .mceIconOnly {display: block !important;}\r
-\r
-/* External */\r
-.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;}\r
-.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
-.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;}\r
-\r
-/* Layout */\r
-.highcontrastSkin table.mceLayout {border: 1px solid;}\r
-.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid}\r
-.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline}\r
-.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;}\r
-.highcontrastSkin .mceStatusbar div {float:left}\r
-.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0}\r
-\r
-.highcontrastSkin .mceToolbar td { display: inline-block; float: left;}\r
-.highcontrastSkin .mceToolbar tr { display: block;}\r
-.highcontrastSkin .mceToolbar table { display: block; }\r
-\r
-/* Button */\r
-\r
-.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;}\r
-.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em}\r
-.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}\r
-.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;}\r
-\r
-/* Separator */\r
-.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;}\r
-\r
-/* ListBox */\r
-.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;}\r
-.highcontrastSkin .mceListBox .mceText {padding: 5px 6px;  line-height: 2em; width: 15ex; overflow: hidden;}\r
-.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}\r
-.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}\r
-.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}\r
-.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;}\r
-.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;}\r
-\r
-.highcontrastSkin .mceListBoxMenu {overflow-y:auto}\r
-\r
-/* SplitButton */\r
-.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-\r
-.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;}\r
-.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;}\r
-.highcontrastSkin .mceSplitButton tr { display: table-row; }\r
-.highcontrastSkin table.mceSplitButton  { display: table; }\r
-.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}\r
-.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px;  display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}\r
-.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } \r
-.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;}\r
-.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;}\r
-\r
-/* Menu */\r
-.highcontrastSkin .mceNoIcons span.mceIcon {width:0;}\r
-.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; }\r
-.highcontrastSkin .mceMenu table {background:white; color: black}\r
-.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px}\r
-.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black}\r
-.highcontrastSkin .mceMenu td {height:2em}\r
-.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;}\r
-.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;}\r
-.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace}\r
-.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;}\r
-.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px}\r
-.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid}\r
-.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px}\r
-.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";}\r
-.highcontrastSkin .mceMenu span.mceMenuLine {display:none}\r
-.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"}\r
-.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal}\r
-\r
-/* ColorSplitButton */\r
-.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000}\r
-.highcontrastSkin .mceColorSplitMenu td {padding:2px}\r
-.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;}\r
-.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
-.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
-.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2}\r
-.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;}\r
-.highcontrastSkin .mceColorPreview {display:none;}\r
-.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden}\r
-\r
-/* Progress,Resize */\r
-.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}\r
-.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
-\r
-/* Formats */\r
-.highcontrastSkin .mce_p span.mceText {}\r
-.highcontrastSkin .mce_address span.mceText {font-style:italic}\r
-.highcontrastSkin .mce_pre span.mceText {font-family:monospace}\r
-.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
-.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
-.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
-.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
-.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
-.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css
deleted file mode 100644 (file)
index 4ac4e4d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
-body {background:#FFF;}\r
-body.mceForceColors {background:#FFF; color:#000;}\r
-h1 {font-size: 2em}\r
-h2 {font-size: 1.5em}\r
-h3 {font-size: 1.17em}\r
-h4 {font-size: 1em}\r
-h5 {font-size: .83em}\r
-h6 {font-size: .75em}\r
-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
-a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}\r
-span.mceItemNbsp {background: #DDD}\r
-td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
-img {border:0;}\r
-table {cursor:default}\r
-table td, table th {cursor:text}\r
-ins {border-bottom:1px solid green; text-decoration: none; color:green}\r
-del {color:red; text-decoration:line-through}\r
-cite {border-bottom:1px dashed blue}\r
-acronym {border-bottom:1px dotted #CCC; cursor:help}\r
-abbr {border-bottom:1px dashed #CCC; cursor:help}\r
-\r
-/* IE */\r
-* html body {\r
-scrollbar-3dlight-color:#F0F0EE;\r
-scrollbar-arrow-color:#676662;\r
-scrollbar-base-color:#F0F0EE;\r
-scrollbar-darkshadow-color:#DDD;\r
-scrollbar-face-color:#E0E0DD;\r
-scrollbar-highlight-color:#F0F0EE;\r
-scrollbar-shadow-color:#F0F0EE;\r
-scrollbar-track-color:#F5F5F5;\r
-}\r
-\r
-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
-font[face=mceinline] {font-family:inherit !important}\r
-\r
-.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}\r
-.mceItemShockWave {background-image:url(../../img/shockwave.gif)}\r
-.mceItemFlash {background-image:url(../../img/flash.gif)}\r
-.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}\r
-.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}\r
-.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}\r
-.mceItemVideo {background-image:url(../../img/video.gif)}\r
-.mceItemIframe {background-image:url(../../img/iframe.gif)}\r
-.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css
deleted file mode 100644 (file)
index ec08772..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Generic */\r
-body {\r
-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
-scrollbar-3dlight-color:#F0F0EE;\r
-scrollbar-arrow-color:#676662;\r
-scrollbar-base-color:#F0F0EE;\r
-scrollbar-darkshadow-color:#DDDDDD;\r
-scrollbar-face-color:#E0E0DD;\r
-scrollbar-highlight-color:#F0F0EE;\r
-scrollbar-shadow-color:#F0F0EE;\r
-scrollbar-track-color:#F5F5F5;\r
-background:#F0F0EE;\r
-padding:0;\r
-margin:8px 8px 0 8px;\r
-}\r
-\r
-html {background:#F0F0EE;}\r
-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-textarea {resize:none;outline:none;}\r
-a:link, a:visited {color:black;}\r
-a:hover {color:#2B6FB6;}\r
-.nowrap {white-space: nowrap}\r
-\r
-/* Forms */\r
-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
-legend {color:#2B6FB6; font-weight:bold;}\r
-label.msg {display:none;}\r
-label.invalid {color:#EE0000; display:inline;}\r
-input.invalid {border:1px solid #EE0000;}\r
-input {background:#FFF; border:1px solid #CCC;}\r
-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-input, select, textarea {border:1px solid #808080;}\r
-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
-.input_noborder {border:0;}\r
-\r
-/* Buttons */\r
-#insert, #cancel, input.button, .updateButton {\r
-border:0; margin:0; padding:0;\r
-font-weight:bold;\r
-width:94px; height:26px;\r
-background:url(../default/img/buttons.png) 0 -26px;\r
-cursor:pointer;\r
-padding-bottom:2px;\r
-float:left;\r
-}\r
-\r
-#insert {background:url(../default/img/buttons.png) 0 -52px}\r
-#cancel {background:url(../default/img/buttons.png) 0 0; float:right}\r
-\r
-/* Browse */\r
-a.pickcolor, a.browse {text-decoration:none}\r
-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
-.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
-a.pickcolor:hover span {background-color:#B2BBD0;}\r
-a.pickcolor:hover span.disabled {}\r
-\r
-/* Charmap */\r
-table.charmap {border:1px solid #AAA; text-align:center}\r
-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
-#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
-#charmap a:hover {background:#CCC;color:#2B6FB6}\r
-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
-\r
-/* Source */\r
-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
-.mceActionPanel {margin-top:5px;}\r
-\r
-/* Tabs classes */\r
-.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}\r
-.tabs ul {margin:0; padding:0; list-style:none;}\r
-.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
-.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
-.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
-.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}\r
-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
-\r
-/* Panels */\r
-.panel_wrapper div.panel {display:none;}\r
-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
-.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
-\r
-/* Columns */\r
-.column {float:left;}\r
-.properties {width:100%;}\r
-.properties .column1 {}\r
-.properties .column2 {text-align:left;}\r
-\r
-/* Titles */\r
-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
-h3 {font-size:14px;}\r
-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
-\r
-/* Dialog specific */\r
-#link .panel_wrapper, #link div.current {height:125px;}\r
-#image .panel_wrapper, #image div.current {height:200px;}\r
-#plugintable thead {font-weight:bold; background:#DDD;}\r
-#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
-#plugintable {width:96%; margin-top:10px;}\r
-#pluginscontainer {height:290px; overflow:auto;}\r
-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
-#colorpicker #light div {overflow:hidden;}\r
-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
-#colorpicker .panel_wrapper div.current {height:175px;}\r
-#colorpicker #namedcolors {width:150px;}\r
-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
-#colorpicker #colornamecontainer {margin-top:5px;}\r
-#colorpicker #picker_panel fieldset {margin:auto;width:325px;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png
deleted file mode 100644 (file)
index 13a5cb0..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png
deleted file mode 100644 (file)
index 7fc57f2..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png
deleted file mode 100644 (file)
index c0dcc6c..0000000
Binary files a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css
deleted file mode 100644 (file)
index 29e35e5..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Reset */\r
-.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
-.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
-.o2k7Skin table td {vertical-align:middle}\r
-\r
-/* Containers */\r
-.o2k7Skin table {background:transparent}\r
-.o2k7Skin iframe {display:block;}\r
-.o2k7Skin .mceToolbar {height:26px}\r
-\r
-/* External */\r
-.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}\r
-.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
-.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
-\r
-/* Layout */\r
-.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}\r
-.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}\r
-.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}\r
-.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}\r
-.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}\r
-.o2k7Skin td.mceToolbar{background:#E5EFFD}\r
-.o2k7Skin .mceStatusbar {background:#E5EFFD; display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}\r
-.o2k7Skin .mceStatusbar div {float:left; padding:2px}\r
-.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
-.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}\r
-.o2k7Skin table.mceToolbar {margin-left:3px}\r
-.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}\r
-.o2k7Skin .mceToolbar td.mceFirst span {margin:0}\r
-.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
-.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}\r
-.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}\r
-.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
-.o2k7Skin td.mceCenter {text-align:center;}\r
-.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}\r
-.o2k7Skin td.mceRight table {margin:0 0 0 auto;}\r
-\r
-/* Button */\r
-.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
-.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}\r
-.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}\r
-.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
-.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}\r
-.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-.o2k7Skin .mceButtonLabeled {width:auto}\r
-.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}\r
-.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}\r
-.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}\r
-\r
-/* Separator */\r
-.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
-\r
-/* ListBox */\r
-.o2k7Skin .mceListBox  {display: inline-block; margin-left: 3px}\r
-.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}\r
-.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
-.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}\r
-.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}\r
-.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}\r
-.o2k7Skin .mceListBoxDisabled .mceText {color:gray}\r
-.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
-.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
-.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}\r
-\r
-/* SplitButton */\r
-.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr}\r
-.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}\r
-.o2k7Skin .mceSplitButton a.mceAction {width:22px}\r
-.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}\r
-.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}\r
-.o2k7Skin .mceSplitButton span.mceOpen {display:none}\r
-.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}\r
-.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}\r
-.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}\r
-\r
-/* ColorSplitButton */\r
-.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
-.o2k7Skin .mceColorSplitMenu td {padding:2px}\r
-.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
-.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
-.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
-.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
-.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}\r
-.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden}\r
-.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}\r
-\r
-/* Menu */\r
-.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}\r
-.o2k7Skin .mceNoIcons span.mceIcon {width:0;}\r
-.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}\r
-.o2k7Skin .mceMenu table {background:#FFF}\r
-.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}\r
-.o2k7Skin .mceMenu td {height:20px}\r
-.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
-.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
-.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}\r
-.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}\r
-.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
-.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
-.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
-.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}\r
-.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
-.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}\r
-.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}\r
-.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}\r
-.o2k7Skin .mceMenu span.mceMenuLine {display:none}\r
-.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}\r
-.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal}\r
-\r
-/* Progress,Resize */\r
-.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}\r
-.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
-\r
-/* Formats */\r
-.o2k7Skin .mce_formatPreview a {font-size:10px}\r
-.o2k7Skin .mce_p span.mceText {}\r
-.o2k7Skin .mce_address span.mceText {font-style:italic}\r
-.o2k7Skin .mce_pre span.mceText {font-family:monospace}\r
-.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
-.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
-.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
-.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
-.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
-.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
-\r
-/* Theme */\r
-.o2k7Skin span.mce_bold {background-position:0 0}\r
-.o2k7Skin span.mce_italic {background-position:-60px 0}\r
-.o2k7Skin span.mce_underline {background-position:-140px 0}\r
-.o2k7Skin span.mce_strikethrough {background-position:-120px 0}\r
-.o2k7Skin span.mce_undo {background-position:-160px 0}\r
-.o2k7Skin span.mce_redo {background-position:-100px 0}\r
-.o2k7Skin span.mce_cleanup {background-position:-40px 0}\r
-.o2k7Skin span.mce_bullist {background-position:-20px 0}\r
-.o2k7Skin span.mce_numlist {background-position:-80px 0}\r
-.o2k7Skin span.mce_justifyleft {background-position:-460px 0}\r
-.o2k7Skin span.mce_justifyright {background-position:-480px 0}\r
-.o2k7Skin span.mce_justifycenter {background-position:-420px 0}\r
-.o2k7Skin span.mce_justifyfull {background-position:-440px 0}\r
-.o2k7Skin span.mce_anchor {background-position:-200px 0}\r
-.o2k7Skin span.mce_indent {background-position:-400px 0}\r
-.o2k7Skin span.mce_outdent {background-position:-540px 0}\r
-.o2k7Skin span.mce_link {background-position:-500px 0}\r
-.o2k7Skin span.mce_unlink {background-position:-640px 0}\r
-.o2k7Skin span.mce_sub {background-position:-600px 0}\r
-.o2k7Skin span.mce_sup {background-position:-620px 0}\r
-.o2k7Skin span.mce_removeformat {background-position:-580px 0}\r
-.o2k7Skin span.mce_newdocument {background-position:-520px 0}\r
-.o2k7Skin span.mce_image {background-position:-380px 0}\r
-.o2k7Skin span.mce_help {background-position:-340px 0}\r
-.o2k7Skin span.mce_code {background-position:-260px 0}\r
-.o2k7Skin span.mce_hr {background-position:-360px 0}\r
-.o2k7Skin span.mce_visualaid {background-position:-660px 0}\r
-.o2k7Skin span.mce_charmap {background-position:-240px 0}\r
-.o2k7Skin span.mce_paste {background-position:-560px 0}\r
-.o2k7Skin span.mce_copy {background-position:-700px 0}\r
-.o2k7Skin span.mce_cut {background-position:-680px 0}\r
-.o2k7Skin span.mce_blockquote {background-position:-220px 0}\r
-.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}\r
-.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}\r
-.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0}\r
-.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0}\r
-\r
-/* Plugins */\r
-.o2k7Skin span.mce_advhr {background-position:-0px -20px}\r
-.o2k7Skin span.mce_ltr {background-position:-20px -20px}\r
-.o2k7Skin span.mce_rtl {background-position:-40px -20px}\r
-.o2k7Skin span.mce_emotions {background-position:-60px -20px}\r
-.o2k7Skin span.mce_fullpage {background-position:-80px -20px}\r
-.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}\r
-.o2k7Skin span.mce_iespell {background-position:-120px -20px}\r
-.o2k7Skin span.mce_insertdate {background-position:-140px -20px}\r
-.o2k7Skin span.mce_inserttime {background-position:-160px -20px}\r
-.o2k7Skin span.mce_absolute {background-position:-180px -20px}\r
-.o2k7Skin span.mce_backward {background-position:-200px -20px}\r
-.o2k7Skin span.mce_forward {background-position:-220px -20px}\r
-.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}\r
-.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}\r
-.o2k7Skin span.mce_movebackward {background-position:-280px -20px}\r
-.o2k7Skin span.mce_moveforward {background-position:-300px -20px}\r
-.o2k7Skin span.mce_media {background-position:-320px -20px}\r
-.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}\r
-.o2k7Skin span.mce_pastetext {background-position:-360px -20px}\r
-.o2k7Skin span.mce_pasteword {background-position:-380px -20px}\r
-.o2k7Skin span.mce_selectall {background-position:-400px -20px}\r
-.o2k7Skin span.mce_preview {background-position:-420px -20px}\r
-.o2k7Skin span.mce_print {background-position:-440px -20px}\r
-.o2k7Skin span.mce_cancel {background-position:-460px -20px}\r
-.o2k7Skin span.mce_save {background-position:-480px -20px}\r
-.o2k7Skin span.mce_replace {background-position:-500px -20px}\r
-.o2k7Skin span.mce_search {background-position:-520px -20px}\r
-.o2k7Skin span.mce_styleprops {background-position:-560px -20px}\r
-.o2k7Skin span.mce_table {background-position:-580px -20px}\r
-.o2k7Skin span.mce_cell_props {background-position:-600px -20px}\r
-.o2k7Skin span.mce_delete_table {background-position:-620px -20px}\r
-.o2k7Skin span.mce_delete_col {background-position:-640px -20px}\r
-.o2k7Skin span.mce_delete_row {background-position:-660px -20px}\r
-.o2k7Skin span.mce_col_after {background-position:-680px -20px}\r
-.o2k7Skin span.mce_col_before {background-position:-700px -20px}\r
-.o2k7Skin span.mce_row_after {background-position:-720px -20px}\r
-.o2k7Skin span.mce_row_before {background-position:-740px -20px}\r
-.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}\r
-.o2k7Skin span.mce_table_props {background-position:-980px -20px}\r
-.o2k7Skin span.mce_row_props {background-position:-780px -20px}\r
-.o2k7Skin span.mce_split_cells {background-position:-800px -20px}\r
-.o2k7Skin span.mce_template {background-position:-820px -20px}\r
-.o2k7Skin span.mce_visualchars {background-position:-840px -20px}\r
-.o2k7Skin span.mce_abbr {background-position:-860px -20px}\r
-.o2k7Skin span.mce_acronym {background-position:-880px -20px}\r
-.o2k7Skin span.mce_attribs {background-position:-900px -20px}\r
-.o2k7Skin span.mce_cite {background-position:-920px -20px}\r
-.o2k7Skin span.mce_del {background-position:-940px -20px}\r
-.o2k7Skin span.mce_ins {background-position:-960px -20px}\r
-.o2k7Skin span.mce_pagebreak {background-position:0 -40px}\r
-.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}\r
-.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css
deleted file mode 100644 (file)
index 50c9b76..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Black */\r
-.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)}\r
-.o2k7SkinBlack td.mceToolbar, .o2k7SkinBlack td.mceStatusbar, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}\r
-.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}\r
-.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}\r
-.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}\r
-.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}\r
-.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css
deleted file mode 100644 (file)
index 960a8e4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Silver */\r
-.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)}\r
-.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}\r
-.o2k7SkinSilver .mceListBox .mceText {background:#FFF}\r
-.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/source_editor.htm b/plugins/TinyMCE/js/themes/advanced/source_editor.htm
deleted file mode 100644 (file)
index 3c6d658..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>{#advanced_dlg.code_title}</title>\r
-       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
-       <script type="text/javascript" src="js/source_editor.js"></script>\r
-</head>\r
-<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
-       <form name="source" onsubmit="saveContent();return false;" action="#">\r
-               <div style="float: left" class="title"><label for="htmlSource">{#advanced_dlg.code_title}</label></div>\r
-\r
-               <div id="wrapline" style="float: right">\r
-                       <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>\r
-               </div>\r
-\r
-               <br style="clear: both" />\r
-\r
-               <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>\r
-\r
-               <div class="mceActionPanel">\r
-                       <input type="submit" role="button" name="insert" value="{#update}" id="insert" />\r
-                       <input type="button" role="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
-               </div>\r
-       </form>\r
-</body>\r
-</html>\r
diff --git a/plugins/TinyMCE/js/themes/simple/editor_template.js b/plugins/TinyMCE/js/themes/simple/editor_template.js
deleted file mode 100644 (file)
index 4b3209c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.contentCSS.push(d+"/skins/"+f.skin+"/content.css");c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})})});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/editor_template_src.js b/plugins/TinyMCE/js/themes/simple/editor_template_src.js
deleted file mode 100644 (file)
index 01ce87c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/**\r
- * editor_template_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
-       var DOM = tinymce.DOM;\r
-\r
-       // Tell it to load theme specific language pack(s)\r
-       tinymce.ThemeManager.requireLangPack('simple');\r
-\r
-       tinymce.create('tinymce.themes.SimpleTheme', {\r
-               init : function(ed, url) {\r
-                       var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;\r
-\r
-                       t.editor = ed;\r
-                       ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css");\r
-\r
-                       ed.onInit.add(function() {\r
-                               ed.onNodeChange.add(function(ed, cm) {\r
-                                       tinymce.each(states, function(c) {\r
-                                               cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));\r
-                                       });\r
-                               });\r
-                       });\r
-\r
-                       DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");\r
-               },\r
-\r
-               renderUI : function(o) {\r
-                       var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;\r
-\r
-                       n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);\r
-                       n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});\r
-                       n = tb = DOM.add(n, 'tbody');\r
-\r
-                       // Create iframe container\r
-                       n = DOM.add(tb, 'tr');\r
-                       n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});\r
-\r
-                       // Create toolbar container\r
-                       n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});\r
-\r
-                       // Create toolbar\r
-                       tb = t.toolbar = cf.createToolbar("tools1");\r
-                       tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));\r
-                       tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));\r
-                       tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));\r
-                       tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));\r
-                       tb.add(cf.createSeparator());\r
-                       tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));\r
-                       tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));\r
-                       tb.add(cf.createSeparator());\r
-                       tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));\r
-                       tb.add(cf.createSeparator());\r
-                       tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));\r
-                       tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));\r
-                       tb.renderTo(n);\r
-\r
-                       return {\r
-                               iframeContainer : ic,\r
-                               editorContainer : ed.id + '_container',\r
-                               sizeContainer : sc,\r
-                               deltaHeight : -20\r
-                       };\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'Simple theme',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       }\r
-               }\r
-       });\r
-\r
-       tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);\r
-})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/img/icons.gif b/plugins/TinyMCE/js/themes/simple/img/icons.gif
deleted file mode 100644 (file)
index 6fcbcb5..0000000
Binary files a/plugins/TinyMCE/js/themes/simple/img/icons.gif and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/simple/langs/en.js b/plugins/TinyMCE/js/themes/simple/langs/en.js
deleted file mode 100644 (file)
index 9f08f10..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tinyMCE.addI18n('en.simple',{\r
-bold_desc:"Bold (Ctrl+B)",\r
-italic_desc:"Italic (Ctrl+I)",\r
-underline_desc:"Underline (Ctrl+U)",\r
-striketrough_desc:"Strikethrough",\r
-bullist_desc:"Unordered list",\r
-numlist_desc:"Ordered list",\r
-undo_desc:"Undo (Ctrl+Z)",\r
-redo_desc:"Redo (Ctrl+Y)",\r
-cleanup_desc:"Cleanup messy code"\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/skins/default/content.css b/plugins/TinyMCE/js/themes/simple/skins/default/content.css
deleted file mode 100644 (file)
index 2506c80..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-body, td, pre {\r
-       font-family: Verdana, Arial, Helvetica, sans-serif;\r
-       font-size: 10px;\r
-}\r
-\r
-body {\r
-       background-color: #FFFFFF;\r
-}\r
-\r
-.mceVisualAid {\r
-       border: 1px dashed #BBBBBB;\r
-}\r
-\r
-/* MSIE specific */\r
-\r
-* html body {\r
-       scrollbar-3dlight-color: #F0F0EE;\r
-       scrollbar-arrow-color: #676662;\r
-       scrollbar-base-color: #F0F0EE;\r
-       scrollbar-darkshadow-color: #DDDDDD;\r
-       scrollbar-face-color: #E0E0DD;\r
-       scrollbar-highlight-color: #F0F0EE;\r
-       scrollbar-shadow-color: #F0F0EE;\r
-       scrollbar-track-color: #F5F5F5; \r
-}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/default/ui.css b/plugins/TinyMCE/js/themes/simple/skins/default/ui.css
deleted file mode 100644 (file)
index 076fe84..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Reset */\r
-.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
-\r
-/* Containers */\r
-.defaultSimpleSkin {position:relative}\r
-.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}\r
-.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}\r
-.defaultSimpleSkin .mceToolbar {height:24px;}\r
-\r
-/* Layout */\r
-.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
-.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
-\r
-/* Button */\r
-.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}\r
-.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
-.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}\r
-.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-\r
-/* Separator */\r
-.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}\r
-\r
-/* Theme */\r
-.defaultSimpleSkin span.mce_bold {background-position:0 0}\r
-.defaultSimpleSkin span.mce_italic {background-position:-60px 0}\r
-.defaultSimpleSkin span.mce_underline {background-position:-140px 0}\r
-.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
-.defaultSimpleSkin span.mce_undo {background-position:-160px 0}\r
-.defaultSimpleSkin span.mce_redo {background-position:-100px 0}\r
-.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}\r
-.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
-.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css b/plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css
deleted file mode 100644 (file)
index 595809f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
-\r
-body {background: #FFF;}\r
-.mceVisualAid {border: 1px dashed #BBB;}\r
-\r
-/* IE */\r
-\r
-* html body {\r
-scrollbar-3dlight-color: #F0F0EE;\r
-scrollbar-arrow-color: #676662;\r
-scrollbar-base-color: #F0F0EE;\r
-scrollbar-darkshadow-color: #DDDDDD;\r
-scrollbar-face-color: #E0E0DD;\r
-scrollbar-highlight-color: #F0F0EE;\r
-scrollbar-shadow-color: #F0F0EE;\r
-scrollbar-track-color: #F5F5F5;        \r
-}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png b/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png
deleted file mode 100644 (file)
index 527e349..0000000
Binary files a/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png and /dev/null differ
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css b/plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css
deleted file mode 100644 (file)
index cf6c35d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Reset */\r
-.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
-\r
-/* Containers */\r
-.o2k7SimpleSkin {position:relative}\r
-.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}\r
-.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}\r
-.o2k7SimpleSkin .mceToolbar {height:26px;}\r
-\r
-/* Layout */\r
-.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }\r
-.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
-.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
-.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
-\r
-/* Button */\r
-.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
-.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}\r
-.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
-.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}\r
-.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
-\r
-/* Separator */\r
-.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
-\r
-/* Theme */\r
-.o2k7SimpleSkin span.mce_bold {background-position:0 0}\r
-.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}\r
-.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}\r
-.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
-.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}\r
-.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}\r
-.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}\r
-.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
-.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
diff --git a/plugins/TinyMCE/js/tiny_mce.js b/plugins/TinyMCE/js/tiny_mce.js
deleted file mode 100644 (file)
index 6463ba0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.3.1",releaseDate:"2011-06-16",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^(mailto|tel|news|javascript|about|data):/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(m){var h={},j,l,g,f,c={},b,e,d=m.makeMap,k=m.each;function i(o,n){return o.split(n||",")}function a(r,q){var o,p={};function n(s){return s.replace(/[A-Z]+/g,function(t){return n(r[t])})}for(o in r){if(r.hasOwnProperty(o)){r[o]=n(r[o])}}n(q).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(v,t,s,u){s=i(s,"|");p[t]={attributes:d(s),attributesOrder:s,children:d(u,"|",{"#comment":{}})}});return p}l="h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup";l=d(l,",",d(l.toUpperCase()));h=a({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");j=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,preload,autoplay,loop,controls");g=d("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");f=m.extend(d("td,th,iframe,video,object"),g);b=d("pre,script,style");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(q){var y=this,n={},o={},v=[],p;q=q||{};if(q.verify_html===false){q.valid_elements="*[*]"}if(q.valid_styles){p={};k(q.valid_styles,function(A,z){p[z]=m.explode(A)})}function x(z){return new RegExp("^"+z.replace(/([?+*])/g,".$1")+"$")}function s(G){var F,B,U,Q,V,A,D,P,S,L,T,X,J,E,R,z,N,C,W,Y,K,O,I=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,M=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,H=/[*?+]/;if(G){G=i(G);if(n["@"]){N=n["@"].attributes;C=n["@"].attributesOrder}for(F=0,B=G.length;F<B;F++){A=I.exec(G[F]);if(A){R=A[1];L=A[2];z=A[3];S=A[4];J={};E=[];D={attributes:J,attributesOrder:E};if(R==="#"){D.paddEmpty=true}if(R==="-"){D.removeEmpty=true}if(N){for(Y in N){J[Y]=N[Y]}E.push.apply(E,C)}if(S){S=i(S,"|");for(U=0,Q=S.length;U<Q;U++){A=M.exec(S[U]);if(A){P={};X=A[1];T=A[2].replace(/::/g,":");R=A[3];O=A[4];if(X==="!"){D.attributesRequired=D.attributesRequired||[];D.attributesRequired.push(T);P.required=true}if(X==="-"){delete J[T];E.splice(m.inArray(E,T),1);continue}if(R){if(R==="="){D.attributesDefault=D.attributesDefault||[];D.attributesDefault.push({name:T,value:O});P.defaultValue=O}if(R===":"){D.attributesForced=D.attributesForced||[];D.attributesForced.push({name:T,value:O});P.forcedValue=O}if(R==="<"){P.validValues=d(O,"?")}}if(H.test(T)){D.attributePatterns=D.attributePatterns||[];P.pattern=x(T);D.attributePatterns.push(P)}else{if(!J[T]){E.push(T)}J[T]=P}}}}if(!N&&L=="@"){N=J;C=E}if(z){D.outputName=L;n[z]=D}if(H.test(L)){D.pattern=x(L);v.push(D)}else{n[L]=D}}}}}function u(z){n={};v=[];s(z);k(h,function(B,A){o[A]=B.children})}function r(A){var z=/^(~)?(.+)$/;if(A){k(i(A),function(E){var C=z.exec(E),D=C[1]==="~",F=D?"span":"div",B=C[2];o[B]=o[F];c[B]=F;if(!D){l[B]={}}k(o,function(G,H){if(G[F]){G[B]=G[F]}})})}}function t(A){var z=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(A){k(i(A),function(E){var D=z.exec(E),B,C;if(D){C=D[1];if(C){B=o[D[2]]}else{B=o[D[2]]={"#comment":{}}}B=o[D[2]];k(i(D[3],"|"),function(F){if(C==="-"){delete B[F]}else{B[F]={}}})}})}}if(!q.valid_elements){k(h,function(A,z){n[z]={attributes:A.attributes,attributesOrder:A.attributesOrder};o[z]=A.children});k(i("strong/b,em/i"),function(z){z=i(z,"/");n[z[1]].outputName=z[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(z){n[z].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(z){n[z].paddEmpty=true})}else{u(q.valid_elements)}r(q.custom_elements);t(q.valid_children);s(q.extended_valid_elements);t("+ol[ul|ol],+ul[ul|ol]");if(q.invalid_elements){m.each(m.explode(q.invalid_elements),function(z){if(n[z]){delete n[z]}})}y.children=o;y.styles=p;y.getBoolAttrs=function(){return j};y.getBlockElements=function(){return l};y.getShortEndedElements=function(){return g};y.getSelfClosingElements=function(){return e};y.getNonEmptyElements=function(){return f};y.getWhiteSpaceElements=function(){return b};y.isValidChild=function(z,B){var A=o[z];return !!(A&&A[B])};y.getElementRule=function(z){var B=n[z],A;if(B){return B}A=v.length;while(A--){B=v[A];if(B.pattern.test(z)){return B}}};y.getCustomElements=function(){return c};y.addValidElements=s;y.setValidElements=u;y.addCustomElements=r;y.addValidChildren=t};m.html.Schema.boolAttrMap=j;m.html.Schema.blockElementsMap=l})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(q){var A=this,f,m=0,G,j,l=[],B,K,t,N,F,k,p,x,I,r,E,o,J,n,H,M,L,z,D,h,g,u,s=0,v=a.html.Entities.decode,y;function C(O){var Q,P;Q=l.length;while(Q--){if(l[Q].name===O){break}}if(Q>=0){for(P=l.length-1;P>=Q;P--){O=l[P];if(O.valid){A.end(O.name)}}l.length=Q}}D=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)\\s*((?:[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*)>))","g");h=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;g={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};F=e.getShortEndedElements();z=e.getSelfClosingElements();k=e.getBoolAttrs();x=c.validate;y=c.fix_self_closing;while(f=D.exec(q)){if(m<f.index){A.text(v(q.substr(m,f.index-m)))}if(G=f[6]){C(G.toLowerCase())}else{if(G=f[7]){G=G.toLowerCase();p=G in F;if(y&&z[G]&&l.length>0&&l[l.length-1].name===G){C(G)}if(!x||(I=e.getElementRule(G))){r=true;if(x){J=I.attributes;n=I.attributePatterns}if(o=f[8]){B=[];B.map={};o.replace(h,function(P,O,T,S,R){var U,Q;O=O.toLowerCase();T=O in k?O:v(T||S||R||"");if(x&&O.indexOf("data-")!==0){U=J[O];if(!U&&n){Q=n.length;while(Q--){U=n[Q];if(U.pattern.test(O)){break}}if(Q===-1){U=null}}if(!U){return}if(U.validValues&&!(T in U.validValues)){return}}B.map[O]=T;B.push({name:O,value:T})})}else{B=[];B.map={}}if(x){H=I.attributesRequired;M=I.attributesDefault;L=I.attributesForced;if(L){K=L.length;while(K--){E=L[K];N=E.name;u=E.value;if(u==="{$uid}"){u="mce_"+s++}B.map[N]=u;B.push({name:N,value:u})}}if(M){K=M.length;while(K--){E=M[K];N=E.name;if(!(N in B.map)){u=E.value;if(u==="{$uid}"){u="mce_"+s++}B.map[N]=u;B.push({name:N,value:u})}}}if(H){K=H.length;while(K--){if(H[K] in B.map){break}}if(K===-1){r=false}}if(B.map["data-mce-bogus"]){r=false}}if(r){A.start(G,B,p)}}else{r=false}if(j=g[G]){j.lastIndex=m=f.index+f[0].length;if(f=j.exec(q)){if(r){t=q.substr(m,f.index-m)}m=f.index+f[0].length}else{t=q.substr(m);m=q.length}if(r&&t.length>0){A.text(t,true)}if(r){A.end(G)}D.lastIndex=m;continue}if(!p){if(!o||o.indexOf("/")!=o.length-1){l.push({name:G,valid:r})}else{if(r){A.end(G)}}}}else{if(G=f[1]){A.comment(G)}else{if(G=f[2]){A.cdata(G)}else{if(G=f[3]){A.doctype(G)}else{if(G=f[4]){A.pi(G,f[5])}}}}}}m=f.index+f[0].length}if(m<q.length){A.text(v(q.substr(m)))}for(K=l.length-1;K>=0;K--){G=l[K];if(G.valid){A.end(G.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,K,y,o,D,J=[],t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var L=H.firstChild,l,M;while(L){l=L.next;if(L.type==3||(L.type==1&&L.name!=="p"&&!o[L.name]&&!L.attr("data-mce-type"))){if(!M){M=I(q,1);H.insert(M,L);M.append(L)}else{M.append(L)}}else{M=null}L=l}}function I(l,L){var M=new a(l,L),N;if(l in e){N=i[l];if(N){N.push(M)}else{i[l]=[M]}}return M}function G(M){var N,l,L;for(N=M.prev;N&&N.type===3;){l=N.value.replace(t,"");if(l.length>0){N.value=l;N=N.prev}else{L=N.prev;N.remove();N=L}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(M,l){var L;if(!s[A.name]){M=M.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){M=M.replace(D,"")}}if(M.length!==0){L=I("#text",3);L.raw=!!l;A.append(L).value=M}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,L){A.append(I(l,7)).value=L;G(A)},doctype:function(L){var l;l=A.append(I("#doctype",10));l.value=L;G(A)},start:function(l,T,M){var R,O,N,L,P,U,S,Q;N=y?h.getElementRule(l):{};if(N){R=I(N.outputName||l,1);R.attributes=T;R.shortEnded=M;A.append(R);Q=p[A.name];if(Q&&p[R.name]&&!Q[R.name]){J.push(R)}O=d.length;while(O--){P=d[O].name;if(P in T.map){E=c[P];if(E){E.push(R)}else{c[P]=[R]}}}if(o[l]){G(R)}if(!M){A=R}}},end:function(l){var P,M,O,L,N;M=y?h.getElementRule(l):{};if(M){if(o[l]){if(!s[A.name]){for(P=A.firstChild;P&&P.type===3;){O=P.value.replace(D,"");if(O.length>0){P.value=O;P=P.next}else{L=P.next;P.remove();P=L}}for(P=A.lastChild;P&&P.type===3;){O=P.value.replace(t,"");if(O.length>0){P.value=O;P=P.prev}else{L=P.prev;P.remove();P=L}}}P=A.prev;if(P&&P.type===3){O=P.value.replace(D,"");if(O.length>0){P.value=O}else{P.remove()}}}if(M.removeEmpty||M.paddEmpty){if(A.isEmpty(u)){if(M.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){N=A.parent;A.empty().remove();A=N;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&J.length){if(!m.context){j(J)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(K in i){E=e[K];z=i[K];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,K,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);(function(h){var f=h.each,e=h.is,d=h.isWebKit,b=h.isIE,c=h.html.Entities,a=/^([a-z0-9],?)+$/i,g=h.html.Schema.blockElementsMap,i=/^[ \t\r\n]*$/;h.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,m){var l=this,j,k;l.doc=o;l.win=window;l.files={};l.cssFlicker=false;l.counter=0;l.stdMode=!h.isIE||o.documentMode>=8;l.boxModel=!h.isIE||o.compatMode=="CSS1Compat"||l.stdMode;l.hasOuterHTML="outerHTML" in o.createElement("a");l.settings=m=h.extend({keep_values:false,hex_colors:1},m);l.schema=m.schema;l.styles=new h.html.Styles({url_converter:m.url_converter,url_converter_scope:m.url_converter_scope},m.schema);if(h.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(n){l.cssFlicker=true}}if(b&&m.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(p){o.createElement(p)});for(k in m.schema.getCustomElements()){o.createElement(k)}}h.addUnload(l.destroy,l)},getRoot:function(){var j=this,k=j.settings;return(k&&j.get(k.root_element))||j.doc.body},getViewPort:function(k){var l,j;k=!k?this.win:k;l=k.document;j=this.boxModel?l.documentElement:l.body;return{x:k.pageXOffset||j.scrollLeft,y:k.pageYOffset||j.scrollTop,w:k.innerWidth||j.clientWidth,h:k.innerHeight||j.clientHeight}},getRect:function(m){var l,j=this,k;m=j.get(m);l=j.getPos(m);k=j.getSize(m);return{x:l.x,y:l.y,w:k.w,h:k.h}},getSize:function(m){var k=this,j,l;m=k.get(m);j=k.getStyle(m,"width");l=k.getStyle(m,"height");if(j.indexOf("px")===-1){j=0}if(l.indexOf("px")===-1){l=0}return{w:parseInt(j)||m.offsetWidth||m.clientWidth,h:parseInt(l)||m.offsetHeight||m.clientHeight}},getParent:function(l,k,j){return this.getParents(l,k,j,false)},getParents:function(u,p,l,s){var k=this,j,m=k.settings,q=[];u=k.get(u);s=s===undefined;if(m.strict_root){l=l||k.getRoot()}if(e(p,"string")){j=p;if(p==="*"){p=function(o){return o.nodeType==1}}else{p=function(o){return k.is(o,j)}}}while(u){if(u==l||!u.nodeType||u.nodeType===9){break}if(!p||p(u)){if(s){q.push(u)}else{return u}}u=u.parentNode}return s?q:null},get:function(j){var k;if(j&&this.doc&&typeof(j)=="string"){k=j;j=this.doc.getElementById(j);if(j&&j.id!==k){return this.doc.getElementsByName(k)[1]}}return j},getNext:function(k,j){return this._findSib(k,j,"nextSibling")},getPrev:function(k,j){return this._findSib(k,j,"previousSibling")},select:function(l,k){var j=this;return h.dom.Sizzle(l,j.get(k)||j.get(j.settings.root_element)||j.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(a.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return h.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(m,q,j,l,o){var k=this;return this.run(m,function(s){var r,n;r=e(q,"string")?k.doc.createElement(q):q;k.setAttribs(r,j);if(l){if(l.nodeType){r.appendChild(l)}else{k.setHTML(r,l)}}return !o?s.appendChild(r):r})},create:function(l,j,k){return this.add(this.doc.createElement(l),l,j,k,1)},createHTML:function(r,j,p){var q="",m=this,l;q+="<"+r;for(l in j){if(j.hasOwnProperty(l)){q+=" "+l+'="'+m.encode(j[l])+'"'}}if(typeof(p)!="undefined"){return q+">"+p+"</"+r+">"}return q+" />"},remove:function(j,k){return this.run(j,function(m){var n,l=m.parentNode;if(!l){return null}if(k){while(n=m.firstChild){if(!h.isIE||n.nodeType!==3||n.nodeValue){l.insertBefore(n,m)}else{m.removeChild(n)}}}return l.removeChild(m)})},setStyle:function(m,j,k){var l=this;return l.run(m,function(p){var o,n;o=p.style;j=j.replace(/-(\D)/g,function(r,q){return q.toUpperCase()});if(l.pixelStyles.test(j)&&(h.is(k,"number")||/^[\-0-9\.]+$/.test(k))){k+="px"}switch(j){case"opacity":if(b){o.filter=k===""?"":"alpha(opacity="+(k*100)+")";if(!m.currentStyle||!m.currentStyle.hasLayout){o.display="inline-block"}}o[j]=o["-moz-opacity"]=o["-khtml-opacity"]=k||"";break;case"float":b?o.styleFloat=k:o.cssFloat=k;break;default:o[j]=k||""}if(l.settings.update_styles){l.setAttrib(p,"data-mce-style")}})},getStyle:function(m,j,l){m=this.get(m);if(!m){return}if(this.doc.defaultView&&l){j=j.replace(/[A-Z]/g,function(n){return"-"+n});try{return this.doc.defaultView.getComputedStyle(m,null).getPropertyValue(j)}catch(k){return null}}j=j.replace(/-(\D)/g,function(o,n){return n.toUpperCase()});if(j=="float"){j=b?"styleFloat":"cssFloat"}if(m.currentStyle&&l){return m.currentStyle[j]}return m.style?m.style[j]:undefined},setStyles:function(m,n){var k=this,l=k.settings,j;j=l.update_styles;l.update_styles=0;f(n,function(o,p){k.setStyle(m,p,o)});l.update_styles=j;if(l.update_styles){k.setAttrib(m,l.cssText)}},removeAllAttribs:function(j){return this.run(j,function(m){var l,k=m.attributes;for(l=k.length-1;l>=0;l--){m.removeAttributeNode(k.item(l))}})},setAttrib:function(l,m,j){var k=this;if(!l||!m){return}if(k.settings.strict){m=m.toLowerCase()}return this.run(l,function(o){var n=k.settings;switch(m){case"style":if(!e(j,"string")){f(j,function(p,q){k.setStyle(o,q,p)});return}if(n.keep_values){if(j&&!k._isRes(j)){o.setAttribute("data-mce-style",j,2)}else{o.removeAttribute("data-mce-style",2)}}o.style.cssText=j;break;case"class":o.className=j||"";break;case"src":case"href":if(n.keep_values){if(n.url_converter){j=n.url_converter.call(n.url_converter_scope||k,j,m,o)}k.setAttrib(o,"data-mce-"+m,j,2)}break;case"shape":o.setAttribute("data-mce-style",j);break}if(e(j)&&j!==null&&j.length!==0){o.setAttribute(m,""+j,2)}else{o.removeAttribute(m,2)}})},setAttribs:function(k,l){var j=this;return this.run(k,function(m){f(l,function(o,p){j.setAttrib(m,p,o)})})},getAttrib:function(m,o,l){var j,k=this;m=k.get(m);if(!m||m.nodeType!==1){return false}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(o)){j=m.getAttribute("data-mce-"+o);if(j){return j}}if(b&&k.props[o]){j=m[k.props[o]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[k.props[o]]===true&&j===""){return o}return j?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){j=j||m.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),m.nodeName);if(k.settings.keep_values&&!k._isRes(j)){m.setAttribute("data-mce-style",j)}}}if(d&&o==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(j===1){j=""}break;case"size":if(j==="+0"||j===20||j===0){j=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(j===0){j=""}break;case"hspace":if(j===-1){j=""}break;case"maxlength":case"tabindex":if(j===32768||j===2147483647||j==="32768"){j=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(j===65535){return o}return l;case"shape":j=j.toLowerCase();break;default:if(o.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==undefined&&j!==null&&j!=="")?""+j:l},getPos:function(s,m){var k=this,j=0,q=0,o,p=k.doc,l;s=k.get(s);m=m||p.body;if(s){if(s.getBoundingClientRect){s=s.getBoundingClientRect();o=k.boxModel?p.documentElement:p.body;j=s.left+(p.documentElement.scrollLeft||p.body.scrollLeft)-o.clientTop;q=s.top+(p.documentElement.scrollTop||p.body.scrollTop)-o.clientLeft;return{x:j,y:q}}l=s;while(l&&l!=m&&l.nodeType){j+=l.offsetLeft||0;q+=l.offsetTop||0;l=l.offsetParent}l=s.parentNode;while(l&&l!=m&&l.nodeType){j-=l.scrollLeft||0;q-=l.scrollTop||0;l=l.parentNode}}return{x:j,y:q}},parseStyle:function(j){return this.styles.parse(j)},serializeStyle:function(k,j){return this.styles.serialize(k,j)},loadCSS:function(j){var l=this,m=l.doc,k;if(!j){j=""}k=l.select("head")[0];f(j.split(","),function(n){var o;if(l.files[n]){return}l.files[n]=true;o=l.create("link",{rel:"stylesheet",href:h._addVer(n)});if(b&&m.documentMode&&m.recalc){o.onload=function(){if(m.recalc){m.recalc()}o.onload=null}}k.appendChild(o)})},addClass:function(j,k){return this.run(j,function(l){var m;if(!k){return 0}if(this.hasClass(l,k)){return l.className}m=this.removeClass(l,k);return l.className=(m!=""?(m+" "):"")+k})},removeClass:function(l,m){var j=this,k;return j.run(l,function(o){var n;if(j.hasClass(o,m)){if(!k){k=new RegExp("(^|\\s+)"+m+"(\\s+|$)","g")}n=o.className.replace(k," ");n=h.trim(n!=" "?n:"");o.className=n;if(!n){o.removeAttribute("class");o.removeAttribute("className")}return n}return o.className})},hasClass:function(k,j){k=this.get(k);if(!k||!j){return false}return(" "+k.className+" ").indexOf(" "+j+" ")!==-1},show:function(j){return this.setStyle(j,"display","block")},hide:function(j){return this.setStyle(j,"display","none")},isHidden:function(j){j=this.get(j);return !j||j.style.display=="none"||this.getStyle(j,"display")=="none"},uniqueId:function(j){return(!j?"mce_":j)+(this.counter++)},setHTML:function(l,k){var j=this;return j.run(l,function(n){if(b){while(n.firstChild){n.removeChild(n.firstChild)}try{n.innerHTML="<br />"+k;n.removeChild(n.firstChild)}catch(m){n=j.create("div");n.innerHTML="<br />"+k;f(n.childNodes,function(p,o){if(o){n.appendChild(p)}})}}else{n.innerHTML=k}return k})},getOuterHTML:function(l){var k,j=this;l=j.get(l);if(!l){return null}if(l.nodeType===1&&j.hasOuterHTML){return l.outerHTML}k=(l.ownerDocument||j.doc).createElement("body");k.appendChild(l.cloneNode(true));return k.innerHTML},setOuterHTML:function(m,k,n){var j=this;function l(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){j.insertAfter(s.cloneNode(true),p);s=s.previousSibling}j.remove(p)}return this.run(m,function(p){p=j.get(p);if(p.nodeType==1){n=n||p.ownerDocument||j.doc;if(b){try{if(b&&p.nodeType==1){p.outerHTML=k}else{l(p,k,n)}}catch(o){l(p,k,n)}}else{l(p,k,n)}}})},decode:c.decode,encode:c.encodeAllRaw,insertAfter:function(j,k){k=this.get(k);return this.run(j,function(m){var l,n;l=k.parentNode;n=k.nextSibling;if(n){l.insertBefore(m,n)}else{l.appendChild(m)}return m})},isBlock:function(k){var j=k.nodeType;if(j){return !!(j===1&&g[k.nodeName])}return !!g[k]},replace:function(p,m,j){var l=this;if(e(m,"array")){p=p.cloneNode(true)}return l.run(m,function(k){if(j){f(h.grep(k.childNodes),function(n){p.appendChild(n)})}return k.parentNode.replaceChild(p,k)})},rename:function(m,j){var l=this,k;if(m.nodeName!=j.toUpperCase()){k=l.create(j);f(l.getAttribs(m),function(n){l.setAttrib(k,n.nodeName,l.getAttrib(m,n.nodeName))});l.replace(k,m,1)}return k||m},findCommonAncestor:function(l,j){var m=l,k;while(m){k=j;while(k&&m!=k){k=k.parentNode}if(m==k){break}m=m.parentNode}if(!m&&l.ownerDocument){return l.ownerDocument.documentElement}return m},toHex:function(j){var l=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(j);function k(m){m=parseInt(m).toString(16);return m.length>1?m:"0"+m}if(l){j="#"+k(l[1])+k(l[2])+k(l[3]);return j}return j},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(r){f(r.imports,function(s){q(s)});f(r.cssRules||r.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){f(s.selectorText.split(","),function(t){t=t.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(t)||!/\.[\w\-]+$/.test(t)){return}l=t;t=h._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",t);if(p&&!(t=p(t,l))){return}if(!o[t]){j.push({"class":t});o[t]=1}})}break;case 3:q(s.styleSheet);break}})}try{f(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(m,l,k){var j=this,n;if(j.doc&&typeof(m)==="string"){m=j.get(m)}if(!m){return false}k=k||this;if(!m.nodeType&&(m.length||m.length===0)){n=[];f(m,function(p,o){if(p){if(typeof(p)=="string"){p=j.doc.getElementById(p)}n.push(l.call(k,p,o))}});return n}return l.call(k,m)},getAttribs:function(k){var j;k=this.get(k);if(!k){return[]}if(b){j=[];if(k.nodeName=="OBJECT"){return k.attributes}if(k.nodeName==="OPTION"&&this.getAttrib(k,"selected")){j.push({specified:1,nodeName:"selected"})}k.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(l){j.push({specified:1,nodeName:l})});return j}return k.attributes},isEmpty:function(o,p){var k=this,m,j,n,q,l;o=o.firstChild;if(o){q=new h.dom.TreeWalker(o);p=p||k.schema?k.schema.getNonEmptyElements():null;do{n=o.nodeType;if(n===1){if(o.getAttribute("data-mce-bogus")){continue}if(p&&p[o.nodeName.toLowerCase()]){return false}j=k.getAttribs(o);m=o.attributes.length;while(m--){l=o.attributes[m].nodeName;if(l==="name"||l.indexOf("data-")===0){return false}}}if((n===3&&!i.test(o.nodeValue))){return false}}while(o=q.next())}return true},destroy:function(k){var j=this;if(j.events){j.events.destroy()}j.win=j.doc=j.root=j.events=null;if(!k){h.removeUnload(j.destroy)}},createRng:function(){var j=this.doc;return j.createRange?j.createRange():new h.dom.Range(this)},nodeIndex:function(n,o){var j=0,l,m,k;if(n){for(l=n.nodeType,n=n.previousSibling,m=n;n;n=n.previousSibling){k=n.nodeType;if(o&&k==3){if(k==l||!n.nodeValue.length){continue}}j++;l=k}}return j},split:function(n,m,q){var s=this,j=s.createRng(),o,l,p;function k(v){var t,r=v.childNodes,u=v.nodeType;if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){k(r[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){if(!s.isBlock(v.parentNode)||h.trim(v.nodeValue).length>0){return}}else{if(u==1){r=v.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(r[0],v)}if(r.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}s.remove(v)}return v}if(n&&m){j.setStart(n.parentNode,s.nodeIndex(n));j.setEnd(m.parentNode,s.nodeIndex(m));o=j.extractContents();j=s.createRng();j.setStart(m.parentNode,s.nodeIndex(m)+1);j.setEnd(n.parentNode,s.nodeIndex(n)+1);l=j.extractContents();p=n.parentNode;p.insertBefore(k(o),n);if(q){p.replaceChild(q,m)}else{p.insertBefore(m,n)}p.insertBefore(k(l),n);s.remove(n);return q||m}},bind:function(n,j,m,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.add(n,j,m,l||this)},unbind:function(m,j,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.remove(m,j,l)},_findSib:function(m,j,k){var l=this,n=j;if(m){if(e(n,"string")){n=function(o){return l.is(o,j)}}for(m=m[k];m;m=m[k]){if(n(m)){return m}}}return null},_isRes:function(j){return/^(top|left|bottom|right|width|height)/i.test(j)||/;\s*(top|left|bottom|right|width|height)/i.test(j)}});h.DOM=new h.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(Y,t){var ab=N[h],W=N[U],aa=N[P],V=N[z],Z=t.startContainer,ad=t.startOffset,X=t.endContainer,ac=t.endOffset;if(Y===0){return G(ab,W,Z,ad)}if(Y===1){return G(aa,V,Z,ad)}if(Y===2){return G(aa,V,X,ac)}if(Y===3){return G(ab,W,X,ac)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}k.setEndPoint(j?"EndToStart":"EndToEnd",i);if(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)>0){k=i.duplicate();k.collapse(j);o=-1;while(s==k.parentElement()){if(k.move("character",-1)==0){break}o++}}o=o||k.text.replace("\r\n"," ").length}else{k.collapse(true);k.setEndPoint(j?"StartToStart":"StartToEnd",i);o=k.text.replace("\r\n"," ").length}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{t=r.createTextNode("\uFEFF");u.appendChild(t);x.moveToElementText(t.parentNode);x.collapse(c)}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1&&p==q-1){if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.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\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML=h.item?h.item(0).outerHTML:h.htmlText}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}f.pasteHTML(g)}if(!i.no_events){n.onSetContent.dispatch(n,i)}},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(g(true)&&g()){r.setRng(f)}}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3&&!c.isOpera){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;if(k){f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g)}return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;try{h.removeAllRanges()}catch(f){}h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}e.remove_trailing_brs=true;i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"").replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,r){var h=d.startContainer,k=d.startOffset,s=d.endContainer,l=d.endOffset,i,f,n,g,q,p,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(t){r([t])});return}function o(v,u,t){var x=[];for(;v&&v!=t;v=v[u]){x.push(v)}return x}function m(u,t){do{if(u.parentNode==t){return u}u=u.parentNode}while(u)}function j(v,u,x){var t=x?"nextSibling":"previousSibling";for(g=v,q=g.parentNode;g&&g!=u;g=q){q=g.parentNode;p=o(g==v?g:g[t],t);if(p.length){if(!x){p.reverse()}r(p)}}}if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[k]}if(s.nodeType==1&&s.hasChildNodes()){s=s.childNodes[Math.min(l-1,s.childNodes.length-1)]}i=c.findCommonAncestor(h,s);if(h==s){return r([h])}for(g=h;g;g=g.parentNode){if(g==s){return j(h,i,true)}if(g==i){break}}for(g=s;g;g=g.parentNode){if(g==h){return j(s,i)}if(g==i){break}}f=m(h,i)||h;n=m(s,i)||s;j(h,f,true);p=o(f==h?f:f.nextSibling,"nextSibling",n==s?n.nextSibling:n);if(p.length){r(p)}j(s,n)}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.select("#menu_"+g.id)[0];h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle");c.setAttrib(g.id,"aria-valuenow",i.title)}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null;c.setAttrib(g.id,"aria-valuenow",g.settings.title)}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="button" aria-haspopup="true" aria-labelledby="'+f.id+'_text" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(j){if(j.value===g.selectedValue){f.items[j.id].setSelected(1);g.oldID=j.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{id:f.id,role:"presentation",tabindex:"0","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("span",{role:"button","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(i){i=i.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");g=c.add(g,"a",{role:"option",href:"javascript:;",style:{backgroundColor:"#"+i},title:p.editor.getLang("colors."+i,i),"data-mce-color":"#"+i});if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+i;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return a.cancel(i)});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){this.keyNav.focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(m){var n=m.DOM,j=m.dom.Event,f=m.extend,k=m.util.Dispatcher,i=m.each,a=m.isGecko,b=m.isIE,e=m.isWebKit,d=m.is,h=m.ThemeManager,c=m.PluginManager,o=m.inArray,l=m.grep,g=m.explode;m.create("tinymce.Editor",{Editor:function(r,q){var p=this;p.id=p.editorId=r;p.execCommands={};p.queryStateCommands={};p.queryValueCommands={};p.isNotDirty=false;p.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState"],function(s){p[s]=new k(p)});p.settings=q=f({id:r,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:m.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:m.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",validate:true,entity_encoding:"named",url_converter:p.convertURL,url_converter_scope:p,ie7_compat:true},q);p.documentBaseURI=new m.util.URI(q.document_base_url||m.documentBaseURL,{base_uri:tinyMCE.baseURI});p.baseURI=m.baseURI;p.contentCSS=[];p.execCallback("setup",p)},render:function(r){var u=this,v=u.settings,x=u.id,p=m.ScriptLoader;if(!j.domLoaded){j.add(document,"init",function(){u.render()});return}tinyMCE.settings=v;if(!u.getElement()){return}if(m.isIDevice&&!m.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(u.getElement().nodeName)&&v.hidden_input&&n.getParent(x,"form")){n.insertAfter(n.create("input",{type:"hidden",name:x}),x)}if(m.WindowManager){u.windowManager=new m.WindowManager(u)}if(v.encoding=="xml"){u.onGetContent.add(function(s,t){if(t.save){t.content=n.encode(t.content)}})}if(v.add_form_submit_trigger){u.onSubmit.addToTop(function(){if(u.initialized){u.save();u.isNotDirty=1}})}if(v.add_unload_trigger){u._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(u.initialized&&!u.destroyed&&!u.isHidden()){u.save({format:"raw",no_events:true})}})}m.addUnload(u.destroy,u);if(v.submit_patch){u.onBeforeRenderUI.add(function(){var s=u.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){u.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){m.triggerSave();u.isNotDirty=1;return u.formElement._mceOldSubmit(u.formElement)}}s=null})}function q(){if(v.language&&v.language_load!==false){p.add(m.baseURL+"/langs/"+v.language+".js")}if(v.theme&&v.theme.charAt(0)!="-"&&!h.urls[v.theme]){h.load(v.theme,"themes/"+v.theme+"/editor_template"+m.suffix+".js")}i(g(v.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(z){var y={prefix:"plugins/",resource:z,suffix:"/editor_plugin"+m.suffix+".js"};var z=c.createUrl(y,z);c.load(z.resource,z)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+m.suffix+".js"})}}});p.loadQueue(function(){if(!u.removed){u.init()}})}q()},init:function(){var r,H=this,I=H.settings,E,A,D=H.getElement(),q,p,F,y,C,G,z,v=[];m.add(H);I.aria_label=I.aria_label||n.getAttrib(D,"aria-label",H.getLang("aria.rich_text_area"));if(I.theme){I.theme=I.theme.replace(/-/,"");q=h.get(I.theme);H.theme=new q();if(H.theme.init&&I.init_theme){H.theme.init(H,h.urls[I.theme]||m.documentBaseURL.replace(/\/$/,""))}}function B(J){var K=c.get(J),t=c.urls[J]||m.documentBaseURL.replace(/\/$/,""),s;if(K&&m.inArray(v,J)===-1){i(c.dependencies(J),function(u){B(u)});s=new K(H,t);H.plugins[J]=s;if(s.init){s.init(H,t);v.push(J)}}}i(g(I.plugins.replace(/\-/g,"")),B);if(I.popup_css!==false){if(I.popup_css){I.popup_css=H.documentBaseURI.toAbsolute(I.popup_css)}else{I.popup_css=H.baseURI.toAbsolute("themes/"+I.theme+"/skins/"+I.skin+"/dialog.css")}}if(I.popup_css_add){I.popup_css+=","+H.documentBaseURI.toAbsolute(I.popup_css_add)}H.controlManager=new m.ControlManager(H);if(I.custom_undo_redo){H.onBeforeExecCommand.add(function(t,J,u,K,s){if(J!="Undo"&&J!="Redo"&&J!="mceRepaint"&&(!s||!s.skip_undo)){H.undoManager.beforeChange()}});H.onExecCommand.add(function(t,J,u,K,s){if(J!="Undo"&&J!="Redo"&&J!="mceRepaint"&&(!s||!s.skip_undo)){H.undoManager.add()}})}H.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){H.nodeChanged()}});if(a){function x(s,t){if(!t||!t.initial){H.execCommand("mceRepaint")}}H.onUndo.add(x);H.onRedo.add(x);H.onSetContent.add(x)}H.onBeforeRenderUI.dispatch(H,H.controlManager);if(I.render_ui){E=I.width||D.style.width||D.offsetWidth;A=I.height||D.style.height||D.offsetHeight;H.orgDisplay=D.style.display;G=/^[0-9\.]+(|px)$/i;if(G.test(""+E)){E=Math.max(parseInt(E)+(q.deltaWidth||0),100)}if(G.test(""+A)){A=Math.max(parseInt(A)+(q.deltaHeight||0),100)}q=H.theme.renderUI({targetNode:D,width:E,height:A,deltaWidth:I.delta_width,deltaHeight:I.delta_height});H.editorContainer=q.editorContainer}if(document.domain&&location.hostname!=document.domain){m.relaxedDomain=document.domain}n.setStyles(q.sizeContainer||q.editorContainer,{width:E,height:A});if(I.content_css){m.each(g(I.content_css),function(s){H.contentCSS.push(H.documentBaseURI.toAbsolute(s))})}A=(q.iframeHeight||A)+(typeof(A)=="number"?(q.deltaHeight||0):"");if(A<100){A=100}H.iframeHTML=I.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(I.document_base_url!=m.documentBaseURL){H.iframeHTML+='<base href="'+H.documentBaseURI.getURI()+'" />'}if(I.ie7_compat){H.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{H.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}H.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(!a||!/Firefox\/2/.test(navigator.userAgent)){for(z=0;z<H.contentCSS.length;z++){H.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+H.contentCSS[z]+'" />'}H.contentCSS=[]}y=I.body_id||"tinymce";if(y.indexOf("=")!=-1){y=H.getParam("body_id","","hash");y=y[H.id]||y}C=I.body_class||"";if(C.indexOf("=")!=-1){C=H.getParam("body_class","","hash");C=C[H.id]||""}H.iframeHTML+='</head><body id="'+y+'" class="mceContentBody '+C+'"></body></html>';if(m.relaxedDomain&&(b||(m.isOpera&&parseFloat(opera.version())<11))){F='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+H.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}r=n.add(q.iframeContainer,"iframe",{id:H.id+"_ifr",src:F||'javascript:""',frameBorder:"0",allowTransparency:"true",title:I.aria_label,style:{width:"100%",height:A}});H.contentAreaContainer=q.iframeContainer;n.get(q.editorContainer).style.display=H.orgDisplay;n.get(H.id).style.display="none";n.setAttrib(H.id,"aria-hidden",true);if(!m.relaxedDomain||!F){H.setupIframe()}D=r=q=null},setupIframe:function(x){var q=this,v=q.settings,y=n.get(q.id),z=q.getDoc(),u,p;if((!b||!m.relaxedDomain)&&!x){if(a&&!v.readonly){q.getWin().onload=function(){window.setTimeout(function(){var s=q.getBody(),t;s.innerHTML="<br>";if(s.contentEditable!==t){s.contentEditable=false;s.contentEditable=true;q.onMouseDown.add(function(A,B){if(B.target.nodeName==="HTML"){z.designMode="on";window.setTimeout(function(){z.designMode="off";q.getBody().focus()},1)}})}else{z.designMode="on"}q.setupIframe(true)},1)}}z.open();z.write(q.iframeHTML);z.close();if(m.relaxedDomain){z.domain=m.relaxedDomain}if(a&&!v.readonly){return}}p=q.getBody();p.disabled=true;if(!a&&!v.readonly){p.contentEditable=true}p.disabled=false;q.schema=new m.html.Schema(v);q.dom=new m.dom.DOMUtils(q.getDoc(),{keep_values:true,url_converter:q.convertURL,url_converter_scope:q,hex_colors:v.force_hex_style_colors,class_filter:v.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:q.schema});q.parser=new m.html.DomParser(v,q.schema);if(!q.settings.allow_html_in_named_anchor){q.parser.addAttributeFilter("name",function(s,t){var B=s.length,D,A,C,E;while(B--){E=s[B];if(E.name==="a"&&E.firstChild){C=E.parent;D=E.lastChild;do{A=D.prev;C.insert(D,E);D=A}while(D)}}})}q.parser.addAttributeFilter("src,href,style",function(s,t){var A=s.length,C,E=q.dom,D,B;while(A--){C=s[A];D=C.attr(t);B="data-mce-"+t;if(!C.attributes.map[B]){if(t==="style"){C.attr(B,E.serializeStyle(E.parseStyle(D),C.name))}else{C.attr(B,q.convertURL(D,t,C.name))}}}});q.parser.addNodeFilter("script",function(s,t){var A=s.length;while(A--){s[A].attr("type","mce-text/javascript")}});q.parser.addNodeFilter("#cdata",function(s,t){var A=s.length,B;while(A--){B=s[A];B.type=8;B.name="#comment";B.value="[CDATA["+B.value+"]]"}});q.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,A){var B=t.length,C,s=q.schema.getNonEmptyElements();while(B--){C=t[B];if(C.isEmpty(s)){C.empty().append(new m.html.Node("br",1)).shortEnded=true}}});q.serializer=new m.dom.Serializer(v,q.dom,q.schema);q.selection=new m.dom.Selection(q.dom,q.getWin(),q.serializer);q.formatter=new m.Formatter(this);q.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"}},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){q.formatter.register(s,{block:s,remove:"all"})});q.formatter.register(q.settings.formats);q.undoManager=new m.UndoManager(q);q.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return q.onChange.dispatch(q,s,t)}});q.undoManager.onUndo.add(function(t,s){return q.onUndo.dispatch(q,s,t)});q.undoManager.onRedo.add(function(t,s){return q.onRedo.dispatch(q,s,t)});q.forceBlocks=new m.ForceBlocks(q,{forced_root_block:v.forced_root_block});q.editorCommands=new m.EditorCommands(q);q.serializer.onPreProcess.add(function(s,t){return q.onPreProcess.dispatch(q,t,s)});q.serializer.onPostProcess.add(function(s,t){return q.onPostProcess.dispatch(q,t,s)});q.onPreInit.dispatch(q);if(!v.gecko_spellcheck){q.getBody().spellcheck=0}if(!v.readonly){q._addEvents()}q.controlManager.onPostRender.dispatch(q,q.controlManager);q.onPostRender.dispatch(q);if(v.directionality){q.getBody().dir=v.directionality}if(v.nowrap){q.getBody().style.whiteSpace="nowrap"}if(v.handle_node_change_callback){q.onNodeChange.add(function(t,s,A){q.execCallback("handle_node_change_callback",q.id,A,-1,-1,true,q.selection.isCollapsed())})}if(v.save_callback){q.onSaveContent.add(function(s,A){var t=q.execCallback("save_callback",q.id,A.content,q.getBody());if(t){A.content=t}})}if(v.onchange_callback){q.onChange.add(function(t,s){q.execCallback("onchange_callback",q,s)})}if(v.protect){q.onBeforeSetContent.add(function(s,t){if(v.protect){i(v.protect,function(A){t.content=t.content.replace(A,function(B){return"<!--mce:protected "+escape(B)+"-->"})})}})}if(v.convert_newlines_to_brs){q.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(v.preformatted){q.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(v.verify_css_classes){q.serializer.attribValueFilter=function(C,A){var B,t;if(C=="class"){if(!q.classesRE){t=q.dom.getClasses();if(t.length>0){B="";i(t,function(s){B+=(B?"|":"")+s["class"]});q.classesRE=new RegExp("("+B+")","gi")}}return !q.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A)||q.classesRE.test(A)?A:""}return A}}if(v.cleanup_callback){q.onBeforeSetContent.add(function(s,t){t.content=q.execCallback("cleanup_callback","insert_to_editor",t.content,t)});q.onPreProcess.add(function(s,t){if(t.set){q.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){q.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});q.onPostProcess.add(function(s,t){if(t.set){t.content=q.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=q.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(v.save_callback){q.onGetContent.add(function(s,t){if(t.save){t.content=q.execCallback("save_callback",q.id,t.content,q.getBody())}})}if(v.handle_event_callback){q.onEvent.add(function(s,t,A){if(q.execCallback("handle_event_callback",t,s,A)===false){j.cancel(t)}})}q.onSetContent.add(function(){q.addVisual(q.getBody())});if(v.padd_empty_editor){q.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function r(s,t){i(s.dom.select("a"),function(B){var A=B.parentNode;if(s.dom.isBlock(A)&&A.lastChild===B){s.dom.add(A,"br",{"data-mce-bogus":1})}})}q.onExecCommand.add(function(s,t){if(t==="CreateLink"){r(s)}});q.onSetContent.add(q.selection.onSetContent.add(r))}q.load({initial:true,format:"html"});q.startContent=q.getContent({format:"raw"});q.undoManager.add();q.initialized=true;q.onInit.dispatch(q);q.execCallback("setupcontent_callback",q.id,q.getBody(),q.getDoc());q.execCallback("init_instance_callback",q);q.focus(true);q.nodeChanged({initial:1});i(q.contentCSS,function(s){q.dom.loadCSS(s)});if(v.auto_focus){setTimeout(function(){var s=m.get(v.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}y=null},focus:function(s){var x,q=this,v=q.settings.content_editable,r,p,u=q.getDoc();if(!s){r=q.selection.getRng();if(r.item){p=r.item(0)}if(!v){q.getWin().focus()}if(p&&p.ownerDocument==u){r=u.body.createControlRange();r.addElement(p);r.select()}}if(m.activeEditor!=q){if((x=m.activeEditor)!=null){x.onDeactivate.dispatch(x,q)}q.onActivate.dispatch(q,x)}m._setActive(q)},execCallback:function(u){var p=this,r=p.settings[u],q;if(!r){return}if(p.callbackLookup&&(q=p.callbackLookup[u])){r=q.func;q=q.scope}if(d(r,"string")){q=r.replace(/\.\w+$/,"");q=q?m.resolve(q):0;r=m.resolve(r);p.callbackLookup=p.callbackLookup||{};p.callbackLookup[u]={func:r,scope:q}}return r.apply(q||p,Array.prototype.slice.call(arguments,1))},translate:function(p){var r=this.settings.language||"en",q=m.i18n;if(!p){return""}return q[r+"."+p]||p.replace(/{\#([^}]+)\}/g,function(t,s){return q[r+"."+s]||"{#"+s+"}"})},getLang:function(q,p){return m.i18n[(this.settings.language||"en")+"."+q]||(d(p)?p:"{#"+q+"}")},getParam:function(u,r,p){var s=m.trim,q=d(this.settings[u])?this.settings[u]:r,t;if(p==="hash"){t={};if(d(q,"string")){i(q.indexOf("=")>0?q.split(/[;,](?![^=;,]*(?:[;,]|$))/):q.split(","),function(x){x=x.split("=");if(x.length>1){t[s(x[0])]=s(x[1])}else{t[s(x[0])]=s(x)}})}else{t=q}return t}return q},nodeChanged:function(r){var p=this,q=p.selection,u=q.getStart()||p.getBody();if(p.initialized){r=r||{};u=b&&u.ownerDocument!=p.getDoc()?p.getBody():u;r.parents=[];p.dom.getParent(u,function(s){if(s.nodeName=="BODY"){return true}r.parents.push(s)});p.onNodeChange.dispatch(p,r?r.controlManager||p.controlManager:p.controlManager,u,q.isCollapsed(),r)}},addButton:function(r,q){var p=this;p.buttons=p.buttons||{};p.buttons[r]=q},addCommand:function(p,r,q){this.execCommands[p]={func:r,scope:q||this}},addQueryStateHandler:function(p,r,q){this.queryStateCommands[p]={func:r,scope:q||this}},addQueryValueHandler:function(p,r,q){this.queryValueCommands[p]={func:r,scope:q||this}},addShortcut:function(r,u,p,s){var q=this,v;if(!q.settings.custom_shortcuts){return false}q.shortcuts=q.shortcuts||{};if(d(p,"string")){v=p;p=function(){q.execCommand(v,false,null)}}if(d(p,"object")){v=p;p=function(){q.execCommand(v[0],v[1],v[2])}}i(g(r),function(t){var x={func:p,scope:s||this,desc:u,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});q.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,v,z,p){var r=this,u=0,y,q;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!p||!p.skip_focus)){r.focus()}y={};r.onBeforeExecCommand.dispatch(r,x,v,z,y);if(y.terminate){return false}if(r.execCallback("execcommand_callback",r.id,r.selection.getNode(),x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(y=r.execCommands[x]){q=y.func.call(y.scope,v,z);if(q!==true){r.onExecCommand.dispatch(r,x,v,z,p);return q}}i(r.plugins,function(s){if(s.execCommand&&s.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);u=1;return false}});if(u){return true}if(r.theme&&r.theme.execCommand&&r.theme.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(r.editorCommands.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}r.getDoc().execCommand(x,v,z);r.onExecCommand.dispatch(r,x,v,z,p)},queryCommandState:function(u){var q=this,v,r;if(q._isHidden()){return}if(v=q.queryStateCommands[u]){r=v.func.call(v.scope);if(r!==true){return r}}v=q.editorCommands.queryCommandState(u);if(v!==-1){return v}try{return this.getDoc().queryCommandState(u)}catch(p){}},queryCommandValue:function(v){var q=this,u,r;if(q._isHidden()){return}if(u=q.queryValueCommands[v]){r=u.func.call(u.scope);if(r!==true){return r}}u=q.editorCommands.queryCommandValue(v);if(d(u)){return u}try{return this.getDoc().queryCommandValue(v)}catch(p){}},show:function(){var p=this;n.show(p.getContainer());n.hide(p.id);p.load()},hide:function(){var p=this,q=p.getDoc();if(b&&q){q.execCommand("SelectAll")}p.save();n.hide(p.getContainer());n.setStyle(p.id,"display",p.orgDisplay)},isHidden:function(){return !n.isHidden(this.id)},setProgressState:function(p,q,r){this.onSetProgressState.dispatch(this,p,q,r);return p},load:function(s){var p=this,r=p.getElement(),q;if(r){s=s||{};s.load=true;q=p.setContent(d(r.value)?r.value:r.innerHTML,s);s.element=r;if(!s.no_events){p.onLoadContent.dispatch(p,s)}s.element=r=null;return q}},save:function(u){var p=this,s=p.getElement(),q,r;if(!s||!p.initialized){return}u=u||{};u.save=true;if(!u.no_events){p.undoManager.typing=false;p.undoManager.add()}u.element=s;q=u.content=p.getContent(u);if(!u.no_events){p.onSaveContent.dispatch(p,u)}q=u.content;if(!/TEXTAREA|INPUT/i.test(s.nodeName)){s.innerHTML=q;if(r=n.getParent(p.id,"form")){i(r.elements,function(t){if(t.name==p.id){t.value=q;return false}})}}else{s.value=q}u.element=s=null;return q},setContent:function(u,s){var r=this,q,p=r.getBody(),t;s=s||{};s.format=s.format||"html";s.set=true;s.content=u;if(!s.no_events){r.onBeforeSetContent.dispatch(r,s)}u=s.content;if(!m.isIE&&(u.length===0||/^\s+$/.test(u))){t=r.settings.forced_root_block;if(t){u="<"+t+'><br data-mce-bogus="1"></'+t+">"}else{u='<br data-mce-bogus="1">'}p.innerHTML=u;r.selection.select(p,true);r.selection.collapse(true);return}if(s.format!=="raw"){u=new m.html.Serializer({},r.schema).serialize(r.parser.parse(u))}s.content=m.trim(u);r.dom.setHTML(p,s.content);if(!s.no_events){r.onSetContent.dispatch(r,s)}return s.content},getContent:function(q){var p=this,r;q=q||{};q.format=q.format||"html";q.get=true;if(!q.no_events){p.onBeforeGetContent.dispatch(p,q)}if(q.format=="raw"){r=p.getBody().innerHTML}else{r=p.serializer.serialize(p.getBody(),q)}q.content=m.trim(r);if(!q.no_events){p.onGetContent.dispatch(p,q)}return q.content},isDirty:function(){var p=this;return m.trim(p.startContent)!=m.trim(p.getContent({format:"raw",no_events:1}))&&!p.isNotDirty},getContainer:function(){var p=this;if(!p.container){p.container=n.get(p.editorContainer||p.id+"_parent")}return p.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return n.get(this.settings.content_element||this.id)},getWin:function(){var p=this,q;if(!p.contentWindow){q=n.get(p.id+"_ifr");if(q){p.contentWindow=q.contentWindow}}return p.contentWindow},getDoc:function(){var q=this,p;if(!q.contentDocument){p=q.getWin();if(p){q.contentDocument=p.document}}return q.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(p,x,v){var q=this,r=q.settings;if(r.urlconverter_callback){return q.execCallback("urlconverter_callback",p,v,true,x)}if(!r.convert_urls||(v&&v.nodeName=="LINK")||p.indexOf("file:")===0){return p}if(r.relative_urls){return q.documentBaseURI.toRelative(p)}p=q.documentBaseURI.toAbsolute(p,r.remove_script_host);return p},addVisual:function(r){var p=this,q=p.settings;r=r||p.getBody();if(!d(p.hasVisual)){p.hasVisual=q.visual}i(p.dom.select("table,a",r),function(t){var s;switch(t.nodeName){case"TABLE":s=p.dom.getAttrib(t,"border");if(!s||s=="0"){if(p.hasVisual){p.dom.addClass(t,q.visual_table_class)}else{p.dom.removeClass(t,q.visual_table_class)}}return;case"A":s=p.dom.getAttrib(t,"name");if(s){if(p.hasVisual){p.dom.addClass(t,"mceItemAnchor")}else{p.dom.removeClass(t,"mceItemAnchor")}}return}});p.onVisualAid.dispatch(p,r,p.hasVisual)},remove:function(){var p=this,q=p.getContainer();p.removed=1;p.hide();p.execCallback("remove_instance_callback",p);p.onRemove.dispatch(p);p.onExecCommand.listeners=[];m.remove(p);n.remove(q)},destroy:function(q){var p=this;if(p.destroyed){return}if(!q){m.removeUnload(p.destroy);tinyMCE.onBeforeUnload.remove(p._beforeUnload);if(p.theme&&p.theme.destroy){p.theme.destroy()}p.controlManager.destroy();p.selection.destroy();p.dom.destroy();if(!p.settings.content_editable){j.clear(p.getWin());j.clear(p.getDoc())}j.clear(p.getBody());j.clear(p.formElement)}if(p.formElement){p.formElement.submit=p.formElement._mceOldSubmit;p.formElement._mceOldSubmit=null}p.contentAreaContainer=p.formElement=p.container=p.settings.content_element=p.bodyElement=p.contentDocument=p.contentWindow=null;if(p.selection){p.selection=p.selection.win=p.selection.dom=p.selection.dom.doc=null}p.destroyed=1},_addEvents:function(){var B=this,r,C=B.settings,q=B.dom,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function p(t,D){var s=t.type;if(B.removed){return}if(B.onEvent.dispatch(B,t,D)!==false){B[x[t.fakeType||t.type]].dispatch(B,t,D)}}i(x,function(t,s){switch(s){case"contextmenu":q.bind(B.getDoc(),s,p);break;case"paste":q.bind(B.getBody(),s,function(D){p(D)});break;case"submit":case"reset":q.bind(B.getElement().form||n.getParent(B.id,"form"),s,p);break;default:q.bind(C.content_editable?B.getBody():B.getDoc(),s,p)}});q.bind(C.content_editable?B.getBody():(a?B.getDoc():B.getWin()),"focus",function(s){B.focus(true)});if(m.isGecko){q.bind(B.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=B.documentBaseURI.toAbsolute(s)}})}if(a){function u(){var E=this,G=E.getDoc(),F=E.settings;if(a&&!F.readonly){if(E._isHidden()){try{if(!F.content_editable){G.body.contentEditable=false;G.body.contentEditable=true}}catch(D){}}try{G.execCommand("styleWithCSS",0,false)}catch(D){if(!E._isHidden()){try{G.execCommand("useCSS",0,true)}catch(D){}}}if(!F.table_inline_editing){try{G.execCommand("enableInlineTableEditing",false,false)}catch(D){}}if(!F.object_resizing){try{G.execCommand("enableObjectResizing",false,false)}catch(D){}}}}B.onBeforeExecCommand.add(u);B.onMouseDown.add(u)}B.onClick.add(function(s,t){t=t.target;if(m.isWebKit&&t.nodeName=="IMG"){B.selection.getSel().setBaseAndExtent(t,0,t,1)}if(t.nodeName=="A"&&q.hasClass(t,"mceItemAnchor")){B.selection.select(t)}B.nodeChanged()});B.onMouseUp.add(B.nodeChanged);B.onKeyUp.add(function(s,t){var D=t.keyCode;if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45||D==46||D==8||(m.isMac&&(D==91||D==93))||t.ctrlKey){B.nodeChanged()}});B.onReset.add(function(){B.setContent(B.startContent,{format:"raw"})});if(C.custom_shortcuts){if(C.custom_undo_redo_keyboard_shortcuts){B.addShortcut("ctrl+z",B.getLang("undo_desc"),"Undo");B.addShortcut("ctrl+y",B.getLang("redo_desc"),"Redo")}B.addShortcut("ctrl+b",B.getLang("bold_desc"),"Bold");B.addShortcut("ctrl+i",B.getLang("italic_desc"),"Italic");B.addShortcut("ctrl+u",B.getLang("underline_desc"),"Underline");for(r=1;r<=6;r++){B.addShortcut("ctrl+"+r,"",["FormatBlock",false,"h"+r])}B.addShortcut("ctrl+7","",["FormatBlock",false,"<p>"]);B.addShortcut("ctrl+8","",["FormatBlock",false,"<div>"]);B.addShortcut("ctrl+9","",["FormatBlock",false,"<address>"]);function v(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(B.shortcuts,function(D){if(m.isMac&&D.ctrl!=t.metaKey){return}else{if(!m.isMac&&D.ctrl!=t.ctrlKey){return}}if(D.alt!=t.altKey){return}if(D.shift!=t.shiftKey){return}if(t.keyCode==D.keyCode||(t.charCode&&t.charCode==D.charCode)){s=D;return false}});return s}B.onKeyUp.add(function(s,t){var D=v(t);if(D){return j.cancel(t)}});B.onKeyPress.add(function(s,t){var D=v(t);if(D){return j.cancel(t)}});B.onKeyDown.add(function(s,t){var D=v(t);if(D){D.func.call(D.scope);return j.cancel(t)}})}if(m.isIE){q.bind(B.getDoc(),"controlselect",function(D){var t=B.resizeInfo,s;D=D.target;if(D.nodeName!=="IMG"){return}if(t){q.unbind(t.node,t.ev,t.cb)}if(!q.hasClass(D,"mceItemNoResize")){ev="resizeend";s=q.bind(D,ev,function(F){var E;F=F.target;if(E=q.getStyle(F,"width")){q.setAttrib(F,"width",E.replace(/[^0-9%]+/g,""));q.setStyle(F,"width","")}if(E=q.getStyle(F,"height")){q.setAttrib(F,"height",E.replace(/[^0-9%]+/g,""));q.setStyle(F,"height","")}})}else{ev="resizestart";s=q.bind(D,"resizestart",j.cancel,j)}t=B.resizeInfo={node:D,ev:ev,cb:s}})}if(m.isOpera){B.onClick.add(function(s,t){j.prevent(t)})}if(C.custom_undo_redo){function y(){B.undoManager.typing=false;B.undoManager.add()}q.bind(B.getDoc(),"focusout",function(s){if(!B.removed&&B.undoManager.typing){y()}});B.dom.bind(B.dom.getRoot(),"dragend",function(s){y()});B.onKeyUp.add(function(s,D){var t=D.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||D.ctrlKey){y()}});B.onKeyDown.add(function(s,E){var D=E.keyCode,t;if(D==8){t=B.getDoc().selection;if(t&&t.createRange&&t.createRange().item){B.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));y();return j.cancel(E)}}if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45){if(m.isIE&&D==13){B.undoManager.beforeChange()}if(B.undoManager.typing){y()}return}if((D<16||D>20)&&D!=224&&D!=91&&!B.undoManager.typing){B.undoManager.beforeChange();B.undoManager.typing=true;B.undoManager.add()}});B.onMouseDown.add(function(){if(B.undoManager.typing){y()}})}if(m.isGecko){function A(){var s=B.dom.getAttribs(B.selection.getStart().cloneNode(false));return function(){var t=B.selection.getStart();B.dom.removeAllAttribs(t);i(s,function(D){t.setAttributeNode(D.cloneNode(true))})}}function z(){var t=B.selection;return !t.isCollapsed()&&t.getStart()!=t.getEnd()}B.onKeyPress.add(function(s,D){var t;if((D.keyCode==8||D.keyCode==46)&&z()){t=A();B.getDoc().execCommand("delete",false,null);t();return j.cancel(D)}});B.dom.bind(B.getDoc(),"cut",function(t){var s;if(z()){s=A();B.onKeyUp.addToTop(j.cancel,j);setTimeout(function(){s();B.onKeyUp.remove(j.cancel,j)},0)}})}},_isHidden:function(){var p;if(!a){return 0}p=this.selection.getSel();return(!p||!p.rangeCount||p.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var l=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,o;function q(y,x,v){var u;y=y.toLowerCase();if(u=j.exec[y]){u(y,x,v);return a}return b}function m(v){var u;v=v.toLowerCase();if(u=j.state[v]){return u(v)}return -1}function h(v){var u;v=v.toLowerCase();if(u=j.value[v]){return u(v)}return b}function t(u,v){v=v||"exec";d(u,function(y,x){d(x.toLowerCase().split(","),function(z){j[v][z]=y})})}c.extend(this,{execCommand:q,queryCommandState:m,queryCommandValue:h,addCommands:t});function f(x,v,u){if(v===e){v=b}if(u===e){u=null}return n.getDoc().execCommand(x,v,u)}function s(u){return n.formatter.match(u)}function r(u,v){n.formatter.toggle(u,v?{value:v}:e)}function i(u){o=p.getBookmark(u)}function g(){p.moveToBookmark(o)}t({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(y){var x=n.getDoc(),u;try{f(y)}catch(v){u=a}if(u||!x.queryCommandSupported(y)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(z){if(z){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(u){if(p.isCollapsed()){p.select(p.getNode())}f(u);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){var v=u.substring(7);d("left,center,right,full".split(","),function(x){if(v!=x){n.formatter.remove("align"+x)}});r("align"+v);q("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(x){var u,v;f(x);u=l.getParent(p.getNode(),"ol,ul");if(u){v=u.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(v.nodeName)){i();l.split(v,u);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(u){r(u)},"ForeColor,HiliteColor,FontName":function(x,v,u){r(x,u)},FontSize:function(y,x,v){var u,z;if(v>=1&&v<=7){z=c.explode(k.font_size_style_values);u=c.explode(k.font_size_classes);if(u){v=u[v-1]||v}else{v=z[v-1]||v}}r(y,v)},RemoveFormat:function(u){n.formatter.remove(u)},mceBlockQuote:function(u){r("blockquote")},FormatBlock:function(x,v,u){return r(u||"p")},mceCleanup:function(){var u=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(u)},mceRemoveNode:function(y,x,v){var u=v||p.getNode();if(u!=n.getBody()){i();n.dom.remove(u,a);g()}},mceSelectNodeDepth:function(y,x,v){var u=0;l.getParent(p.getNode(),function(z){if(z.nodeType==1&&u++==v){p.select(z);return b}},n.getBody())},mceSelectNode:function(x,v,u){p.select(u)},mceInsertContent:function(A,H,J){var x,I,D,y,E,F,C,B,K,v,z,L,u,G;x=n.parser;I=new c.html.Serializer({},n.schema);u='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';F={content:J,format:"html"};p.onBeforeSetContent.dispatch(p,F);J=F.content;if(J.indexOf("{$caret}")==-1){J+="{$caret}"}J=J.replace(/\{\$caret\}/,u);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}D=p.getNode();F={context:D.nodeName.toLowerCase()};E=x.parse(J,F);z=E.lastChild;if(z.attr("id")=="mce_marker"){C=z;for(z=z.prev;z;z=z.walk(true)){if(z.type==3||!l.isBlock(z.name)){z.parent.insert(C,z,z.name==="br");break}}}if(!F.invalid){J=I.serialize(E);z=D.firstChild;L=D.lastChild;if(!z||(z===L&&z.nodeName==="BR")){l.setHTML(D,J)}else{p.setContent(J)}}else{p.setContent(u);D=n.selection.getNode();y=n.getBody();if(D.nodeType==9){D=z=y}else{z=D}while(z!==y){D=z;z=z.parentNode}J=D==y?y.innerHTML:l.getOuterHTML(D);J=I.serialize(x.parse(J.replace(/<span (id="mce_marker"|id=mce_marker).+<\/span>/i,function(){return I.serialize(E)})));if(D==y){l.setHTML(y,J)}else{l.setOuterHTML(D,J)}}C=l.get("mce_marker");B=l.getRect(C);K=l.getViewPort(n.getWin());if((B.y+B.h>K.y+K.h||B.y<K.y)||(B.x>K.x+K.w||B.x<K.x)){G=c.isIE?n.getDoc().documentElement:n.getBody();G.scrollLeft=B.x;G.scrollTop=B.y-K.h+25}v=l.createRng();z=C.previousSibling;if(z&&z.nodeType==3){v.setStart(z,z.nodeValue.length)}else{v.setStartBefore(C);v.setEndBefore(C)}l.remove(C);p.setRng(v);p.onSetContent.dispatch(p,F);n.addVisual()},mceInsertRawHTML:function(x,v,u){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return u}))},mceSetContent:function(x,v,u){n.setContent(u)},"Indent,Outdent":function(y){var v,u,x;v=k.indentation;u=/[a-z%]+$/i.exec(v);v=parseInt(v);if(!m("InsertUnorderedList")&&!m("InsertOrderedList")){d(p.getSelectedBlocks(),function(z){if(y=="outdent"){x=Math.max(0,parseInt(z.style.paddingLeft||0)-v);l.setStyle(z,"paddingLeft",x?x+u:"")}else{l.setStyle(z,"paddingLeft",(parseInt(z.style.paddingLeft||0)+v)+u)}})}else{f(y)}},mceRepaint:function(){var v;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(u){}}},mceToggleFormat:function(x,v,u){n.formatter.toggle(u)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(x,v,u){n.execCommand("mceInsertContent",false,u.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(B,A,z){var y=l.getParent(p.getNode(),"a"),v,x,u;if(c.is(z,"string")){z={href:z}}z.href=z.href.replace(" ","%20");if(!y){if(c.isWebKit){v=l.getParent(p.getNode(),"img");if(v){x=v.style.cssText;u=v.className;v.style.cssText=null;v.className=null}}f("CreateLink",b,"javascript:mctmp(0);");if(x){v.style.cssText=x}if(u){v.className=u}d(l.select("a[href='javascript:mctmp(0);']"),function(C){l.setAttribs(C,z)})}else{if(z.href){l.setAttribs(y,z)}else{n.dom.remove(y,a)}}},selectAll:function(){var v=l.getRoot(),u=l.createRng();u.setStart(v,0);u.setEnd(v,v.childNodes.length);n.selection.setRng(u)}});t({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){return s("align"+u.substring(7))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(u){return s(u)},mceBlockQuote:function(){return s("blockquote")},Outdent:function(){var u;if(k.inline_styles){if((u=l.getParent(p.getStart(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}if((u=l.getParent(p.getEnd(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}}return m("InsertUnorderedList")||m("InsertOrderedList")||(!k.inline_styles&&!!l.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(u){return l.getParent(p.getNode(),u=="insertunorderedlist"?"UL":"OL")}},"state");t({"FontSize,FontName":function(x){var v=0,u;if(u=l.getParent(p.getNode(),"span")){if(x=="fontsize"){v=u.style.fontSize}else{v=u.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return v}},"value");if(k.custom_undo_redo){t({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);(function(l){var j=l.dom.Event,c=l.isIE,a=l.isGecko,b=l.isOpera,i=l.each,h=l.extend,d=true,g=false;function k(o){var p,n,m;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(o.nodeName)){if(p){n=o.cloneNode(false);n.appendChild(p);p=n}else{p=m=o.cloneNode(false)}p.removeAttribute("id")}}while(o=o.parentNode);if(p){return{wrapper:p,inner:m}}}function f(n,o){var m=o.ownerDocument.createRange();m.setStart(n.endContainer,n.endOffset);m.setEndAfter(o);return m.cloneContents().textContent.length==0}function e(o,q,m){var n,p;if(q.isEmpty(m)){n=q.getParent(m,"ul,ol");if(!q.getParent(n.parentNode,"ul,ol")){q.split(n,m);p=q.create("p",0,'<br data-mce-bogus="1" />');q.replace(p,m);o.select(p,1)}return g}return d}l.create("tinymce.ForceBlocks",{ForceBlocks:function(m){var n=this,o=m.settings,p;n.editor=m;n.dom=m.dom;p=(o.forced_root_block||"p").toLowerCase();o.element=p.toUpperCase();m.onPreInit.add(n.setup,n)},setup:function(){var n=this,m=n.editor,p=m.settings,u=m.dom,o=m.selection,q=m.schema.getBlockElements();if(p.forced_root_block){function v(){var y=o.getStart(),t=m.getBody(),s,z,D,F,E,x,A,B=-16777215;if(!y||y.nodeType!==1){return}while(y!=t){if(q[y.nodeName]){return}y=y.parentNode}s=o.getRng();if(s.setStart){z=s.startContainer;D=s.startOffset;F=s.endContainer;E=s.endOffset}else{if(s.item){s=m.getDoc().body.createTextRange();s.moveToElementText(s.item(0))}tmpRng=s.duplicate();tmpRng.collapse(true);D=tmpRng.move("character",B)*-1;if(!tmpRng.collapsed){tmpRng=s.duplicate();tmpRng.collapse(false);E=(tmpRng.move("character",B)*-1)-D}}for(y=t.firstChild;y;y){if(y.nodeType===3||(y.nodeType==1&&!q[y.nodeName])){if(!x){x=u.create(p.forced_root_block);y.parentNode.insertBefore(x,y)}A=y;y=y.nextSibling;x.appendChild(A)}else{x=null;y=y.nextSibling}}if(s.setStart){s.setStart(z,D);s.setEnd(F,E);o.setRng(s)}else{try{s=m.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(true);s.moveStart("character",D);if(E>0){s.moveEnd("character",E)}s.select()}catch(C){}}m.nodeChanged()}m.onKeyUp.add(v);m.onClick.add(v)}if(p.force_br_newlines){if(c){m.onKeyPress.add(function(s,t){var x;if(t.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});x=u.get("__");x.removeAttribute("id");o.select(x);o.collapse();return j.cancel(t)}})}}if(p.force_p_newlines){if(!c){m.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!n.insertPara(t)){j.cancel(t)}})}else{l.addUnload(function(){n._previousFormats=0});m.onKeyPress.add(function(s,t){n._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&p.keep_styles){n._previousFormats=k(s.selection.getStart())}});m.onKeyUp.add(function(t,y){if(y.keyCode==13&&!y.shiftKey){var x=t.selection.getStart(),s=n._previousFormats;if(!x.hasChildNodes()&&s){x=u.getParent(x,u.isBlock);if(x&&x.nodeName!="LI"){x.innerHTML="";if(n._previousFormats){x.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{x.innerHTML="\uFEFF"}o.select(x,1);o.collapse(true);t.getDoc().execCommand("Delete",false,null);n._previousFormats=0}}}})}if(a){m.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){n.backspaceDelete(t,t.keyCode==8)}})}}if(l.isWebKit){function r(t){var s=o.getRng(),x,A=u.create("div",null," "),z,y=u.getViewPort(t.getWin()).h;s.insertNode(x=u.create("br"));s.setStartAfter(x);s.setEndAfter(x);o.setRng(s);if(o.getSel().focusNode==x.previousSibling){o.select(u.insertAfter(u.doc.createTextNode("\u00a0"),x));o.collapse(d)}u.insertAfter(A,x);z=u.getPos(A).y;u.remove(A);if(z>y){t.getWin().scrollTo(0,z)}}m.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(p.force_br_newlines&&!u.getParent(o.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);j.cancel(t)}})}if(c){if(p.element!="P"){m.onKeyPress.add(function(s,t){n.lastElm=o.getNode().nodeName});m.onKeyUp.add(function(t,x){var z,y=o.getNode(),s=t.getBody();if(s.childNodes.length===1&&y.nodeName=="P"){y=u.rename(y,p.element);o.select(y);o.collapse();t.nodeChanged()}else{if(x.keyCode==13&&!x.shiftKey&&n.lastElm!="P"){z=u.getParent(y,"p");if(z){u.rename(z,p.element);t.nodeChanged()}}}})}}},getParentBlock:function(o){var m=this.dom;return m.getParent(o,m.isBlock)},insertPara:function(Q){var E=this,v=E.editor,M=v.dom,R=v.getDoc(),V=v.settings,F=v.selection.getSel(),G=F.getRangeAt(0),U=R.body;var J,K,H,O,N,q,o,u,z,m,C,T,p,x,I,L=M.getViewPort(v.getWin()),B,D,A;v.undoManager.beforeChange();J=R.createRange();J.setStart(F.anchorNode,F.anchorOffset);J.collapse(d);K=R.createRange();K.setStart(F.focusNode,F.focusOffset);K.collapse(d);H=J.compareBoundaryPoints(J.START_TO_END,K)<0;O=H?F.anchorNode:F.focusNode;N=H?F.anchorOffset:F.focusOffset;q=H?F.focusNode:F.anchorNode;o=H?F.focusOffset:F.anchorOffset;if(O===q&&/^(TD|TH)$/.test(O.nodeName)){if(O.firstChild.nodeName=="BR"){M.remove(O.firstChild)}if(O.childNodes.length==0){v.dom.add(O,V.element,null,"<br />");T=v.dom.add(O,V.element,null,"<br />")}else{I=O.innerHTML;O.innerHTML="";v.dom.add(O,V.element,null,I);T=v.dom.add(O,V.element,null,"<br />")}G=R.createRange();G.selectNodeContents(T);G.collapse(1);v.selection.setRng(G);return g}if(O==U&&q==U&&U.firstChild&&v.dom.isBlock(U.firstChild)){O=q=O.firstChild;N=o=0;J=R.createRange();J.setStart(O,0);K=R.createRange();K.setStart(q,0)}O=O.nodeName=="HTML"?R.body:O;O=O.nodeName=="BODY"?O.firstChild:O;q=q.nodeName=="HTML"?R.body:q;q=q.nodeName=="BODY"?q.firstChild:q;u=E.getParentBlock(O);z=E.getParentBlock(q);m=u?u.nodeName:V.element;if(I=E.dom.getParent(u,"li,pre")){if(I.nodeName=="LI"){return e(v.selection,E.dom,I)}return d}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;u=null}if(z&&(z.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;z=null}if(/(TD|TABLE|TH|CAPTION)/.test(m)||(u&&m=="DIV"&&/left|right/gi.test(M.getStyle(u,"float",1)))){m=V.element;u=z=null}C=(u&&u.nodeName==m)?u.cloneNode(0):v.dom.create(m);T=(z&&z.nodeName==m)?z.cloneNode(0):v.dom.create(m);T.removeAttribute("id");if(/^(H[1-6])$/.test(m)&&f(G,u)){T=v.dom.create(V.element)}I=p=O;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}p=I}while((I=I.previousSibling?I.previousSibling:I.parentNode));I=x=q;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}x=I}while((I=I.nextSibling?I.nextSibling:I.parentNode));if(p.nodeName==m){J.setStart(p,0)}else{J.setStartBefore(p)}J.setEnd(O,N);C.appendChild(J.cloneContents()||R.createTextNode(""));try{K.setEndAfter(x)}catch(P){}K.setStart(q,o);T.appendChild(K.cloneContents()||R.createTextNode(""));G=R.createRange();if(!p.previousSibling&&p.parentNode.nodeName==m){G.setStartBefore(p.parentNode)}else{if(J.startContainer.nodeName==m&&J.startOffset==0){G.setStartBefore(J.startContainer)}else{G.setStart(J.startContainer,J.startOffset)}}if(!x.nextSibling&&x.parentNode.nodeName==m){G.setEndAfter(x.parentNode)}else{G.setEnd(K.endContainer,K.endOffset)}G.deleteContents();if(b){v.getWin().scrollTo(0,L.y)}if(C.firstChild&&C.firstChild.nodeName==m){C.innerHTML=C.firstChild.innerHTML}if(T.firstChild&&T.firstChild.nodeName==m){T.innerHTML=T.firstChild.innerHTML}function S(y,s){var r=[],X,W,t;y.innerHTML="";if(V.keep_styles){W=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(W.nodeName)){X=W.cloneNode(g);M.setAttrib(X,"id","");r.push(X)}}while(W=W.parentNode)}if(r.length>0){for(t=r.length-1,X=y;t>=0;t--){X=X.appendChild(r[t])}r[0].innerHTML=b?"\u00a0":"<br />";return r[0]}else{y.innerHTML=b?"\u00a0":"<br />"}}if(M.isEmpty(C)){S(C,O)}if(M.isEmpty(T)){A=S(T,q)}if(b&&parseFloat(opera.version())<9.5){G.insertNode(C);G.insertNode(T)}else{G.insertNode(T);G.insertNode(C)}T.normalize();C.normalize();v.selection.select(T,true);v.selection.collapse(true);B=v.dom.getPos(T).y;if(B<L.y||B+25>L.y+L.h){v.getWin().scrollTo(0,B<L.y?B:B-L.h+25)}v.undoManager.add();return g},backspaceDelete:function(u,B){var C=this,s=C.editor,y=s.getBody(),q=s.dom,p,v=s.selection,o=v.getRng(),x=o.startContainer,p,z,A,m;if(!B&&o.collapsed&&x.nodeType==1&&o.startOffset==x.childNodes.length){m=new l.dom.TreeWalker(x.lastChild,x);for(p=x.lastChild;p;p=m.prev()){if(p.nodeType==3){o.setStart(p,p.nodeValue.length);o.collapse(true);v.setRng(o);return}}}if(x&&s.dom.isBlock(x)&&!/^(TD|TH)$/.test(x.nodeName)&&B){if(x.childNodes.length==0||(x.childNodes.length==1&&x.firstChild.nodeName=="BR")){p=x;while((p=p.previousSibling)&&!s.dom.isBlock(p)){}if(p){if(x!=y.firstChild){z=s.dom.doc.createTreeWalker(p,NodeFilter.SHOW_TEXT,null,g);while(A=z.nextNode()){p=A}o=s.getDoc().createRange();o.setStart(p,p.nodeValue?p.nodeValue.length:0);o.setEnd(p,p.nodeValue?p.nodeValue.length:0);v.setRng(o);s.dom.remove(x)}return j.cancel(u)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i,g)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark(1)});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(V){var M={},O=a.each,c=V.dom,q=V.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=V.schema.isValidChild,F=c.isBlock,l=V.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,S=false,B=true,p,P={apply:[],remove:[]};function z(W){return W instanceof Array}function m(X,W){return c.getParents(X,W,c.getRoot())}function b(W){return W.nodeType===1&&(W.face==="mceinline"||W.style.fontFamily==="mceinline")}function R(W){return W?M[W]:M}function k(W,X){if(W){if(typeof(W)!=="string"){O(W,function(Z,Y){k(Y,Z)})}else{X=X.length?X:[X];O(X,function(Y){if(Y.deep===p){Y.deep=!Y.selector}if(Y.split===p){Y.split=!Y.selector||Y.inline}if(Y.remove===p&&Y.selector&&!Y.inline){Y.remove="none"}if(Y.selector&&Y.inline){Y.mixed=true;Y.block_expand=true}if(typeof(Y.classes)==="string"){Y.classes=Y.classes.split(/\s+/)}});M[W]=X}}}var i=function(X){var W;V.dom.getParent(X,function(Y){W=V.dom.getStyle(Y,"text-decoration");return W&&W!=="none"});return W};var I=function(W){var X;if(W.nodeType===1&&W.parentNode&&W.parentNode.nodeType===1){X=i(W.parentNode);if(V.dom.getStyle(W,"color")&&X){V.dom.setStyle(W,"text-decoration",X)}else{if(V.dom.getStyle(W,"textdecoration")===X){V.dom.setStyle(W,"text-decoration",null)}}}};function T(Y,af,aa){var ab=R(Y),ag=ab[0],ae,X,ad,ac=q.isCollapsed();function Z(ak){var aj=ak.startContainer,an=ak.startOffset,am,al;if(aj.nodeType==1||aj.nodeValue===""){aj=aj.nodeType==1?aj.childNodes[an]:aj;if(aj){am=new t(aj,aj.parentNode);for(al=am.current();al;al=am.next()){if(al.nodeType==3&&!f(al)){ak.setStart(al,0);break}}}}return ak}function W(ak,aj){aj=aj||ag;if(ak){O(aj.styles,function(am,al){c.setStyle(ak,al,r(am,af))});O(aj.attributes,function(am,al){c.setAttrib(ak,al,r(am,af))});O(aj.classes,function(al){al=r(al,af);if(!c.hasClass(ak,al)){c.addClass(ak,al)}})}}function ah(ak){var aj=[],am,al;am=ag.inline||ag.block;al=c.create(am);W(al);K.walk(ak,function(an){var ao;function ap(aq){var au=aq.nodeName.toLowerCase(),at=aq.parentNode.nodeName.toLowerCase(),ar;if(g(au,"br")){ao=0;if(ag.block){c.remove(aq)}return}if(ag.wrapper&&x(aq,Y,af)){ao=0;return}if(ag.block&&!ag.wrapper&&G(au)){aq=c.rename(aq,am);W(aq);aj.push(aq);ao=0;return}if(ag.selector){O(ab,function(av){if("collapsed" in av&&av.collapsed!==ac){return}if(c.is(aq,av.selector)&&!b(aq)){W(aq,av);ar=true}});if(!ag.inline||ar){ao=0;return}}if(d(am,au)&&d(at,am)&&!(aq.nodeType===3&&aq.nodeValue.length===1&&aq.nodeValue.charCodeAt(0)===65279)){if(!ao){ao=al.cloneNode(S);aq.parentNode.insertBefore(ao,aq);aj.push(ao)}ao.appendChild(aq)}else{if(au=="li"){if(!ao){liTextNode=aq.ownerDocument.createTextNode("");O(a.grep(aq.childNodes),function(av){if(av.nodeType==3){liTextNode.nodeValue+=av.nodeValue;av.parentNode.removeChild(av)}});ao=al.cloneNode(S);aq.insertBefore(ao,aq.firstChild);aj.push(ao)}ao.appendChild(liTextNode)}else{ao=0;O(a.grep(aq.childNodes),ap);ao=0}}}O(an,ap)});if(ag.wrap_links===false){O(aj,function(an){function ao(at){var ar,aq,ap;if(at.nodeName==="A"){aq=al.cloneNode(S);aj.push(aq);ap=a.grep(at.childNodes);for(ar=0;ar<ap.length;ar++){aq.appendChild(ap[ar])}at.appendChild(aq)}O(a.grep(at.childNodes),ao)}ao(an)})}O(aj,function(ap){var an;function aq(at){var ar=0;O(at.childNodes,function(au){if(!f(au)&&!H(au)){ar++}});return ar}function ao(ar){var au,at;O(ar.childNodes,function(av){if(av.nodeType==1&&!H(av)&&!b(av)){au=av;return S}});if(au&&h(au,ag)){at=au.cloneNode(S);W(at);c.replace(at,ar,B);c.remove(au,1)}return at||ar}an=aq(ap);if((aj.length>1||!F(ap))&&an===0){c.remove(ap,1);return}if(ag.inline||ag.wrapper){if(!ag.exact&&an===1){ap=ao(ap)}O(ab,function(ar){O(c.select(ar.inline,ap),function(au){var at;if(ar.wrap_links===false){at=au.parentNode;do{if(at.nodeName==="A"){return}}while(at=at.parentNode)}U(ar,af,au,ar.exact?au:null)})});if(x(ap.parentNode,Y,af)){c.remove(ap,1);ap=0;return B}if(ag.merge_with_parents){c.getParent(ap.parentNode,function(ar){if(x(ar,Y,af)){c.remove(ap,1);ap=0;return B}})}if(ap){ap=u(C(ap),ap);ap=u(ap,C(ap,B))}}})}if(ag){if(aa){X=c.createRng();X.setStartBefore(aa);X.setEndAfter(aa);ah(o(X,ab))}else{if(!ac||!ag.inline||c.select("td.mceSelected,th.mceSelected").length){var ai=V.selection.getNode();ae=q.getBookmark();ah(o(q.getRng(B),ab));if(ag.styles&&(ag.styles.color||ag.styles.textDecoration)){a.walk(ai,I,"childNodes");I(ai)}q.moveToBookmark(ae);q.setRng(Z(q.getRng(B)));V.nodeChanged()}else{Q("apply",Y,af)}}}}function A(Y,ah,ab){var ac=R(Y),aj=ac[0],ag,af,X;function aa(am){var al=am.startContainer,ar=am.startOffset,aq,ap,an,ao;if(al.nodeType==3&&ar>=al.nodeValue.length-1){al=al.parentNode;ar=s(al)+1}if(al.nodeType==1){an=al.childNodes;al=an[Math.min(ar,an.length-1)];aq=new t(al);if(ar>an.length-1){aq.next()}for(ap=aq.current();ap;ap=aq.next()){if(ap.nodeType==3&&!f(ap)){ao=c.create("a",null,E);ap.parentNode.insertBefore(ao,ap);am.setStart(ap,0);q.setRng(am);c.remove(ao);return}}}}function Z(ao){var an,am,al;an=a.grep(ao.childNodes);for(am=0,al=ac.length;am<al;am++){if(U(ac[am],ah,ao,ao)){break}}if(aj.deep){for(am=0,al=an.length;am<al;am++){Z(an[am])}}}function ad(al){var am;O(m(al.parentNode).reverse(),function(an){var ao;if(!am&&an.id!="_start"&&an.id!="_end"){ao=x(an,Y,ah);if(ao&&ao.split!==false){am=an}}});return am}function W(ao,al,aq,au){var av,at,ar,an,ap,am;if(ao){am=ao.parentNode;for(av=al.parentNode;av&&av!=am;av=av.parentNode){at=av.cloneNode(S);for(ap=0;ap<ac.length;ap++){if(U(ac[ap],ah,at,at)){at=0;break}}if(at){if(ar){at.appendChild(ar)}if(!an){an=at}ar=at}}if(au&&(!aj.mixed||!F(ao))){al=c.split(ao,al)}if(ar){aq.parentNode.insertBefore(ar,aq);an.appendChild(aq)}}return al}function ai(al){return W(ad(al),al,al,true)}function ae(an){var am=c.get(an?"_start":"_end"),al=am[an?"firstChild":"lastChild"];if(H(al)){al=al[an?"firstChild":"lastChild"]}c.remove(am,true);return al}function ak(al){var am,an;al=o(al,ac,B);if(aj.split){am=J(al,B);an=J(al);if(am!=an){am=N(am,"span",{id:"_start","data-mce-type":"bookmark"});an=N(an,"span",{id:"_end","data-mce-type":"bookmark"});ai(am);ai(an);am=ae(B);an=ae()}else{am=an=ai(am)}al.startContainer=am.parentNode;al.startOffset=s(am);al.endContainer=an.parentNode;al.endOffset=s(an)+1}K.walk(al,function(ao){O(ao,function(ap){Z(ap);if(ap.nodeType===1&&V.dom.getStyle(ap,"text-decoration")==="underline"&&ap.parentNode&&i(ap.parentNode)==="underline"){U({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ap)}})})}if(ab){X=c.createRng();X.setStartBefore(ab);X.setEndAfter(ab);ak(X);return}if(!q.isCollapsed()||!aj.inline||c.select("td.mceSelected,th.mceSelected").length){ag=q.getBookmark();ak(q.getRng(B));q.moveToBookmark(ag);if(j(Y,ah,q.getStart())){aa(q.getRng(true))}V.nodeChanged()}else{Q("remove",Y,ah)}}function D(X,Z,Y){var W=R(X);if(j(X,Z,Y)&&(!("toggle" in W[0])||W[0]["toggle"])){A(X,Z,Y)}else{T(X,Z,Y)}}function x(X,W,ac,aa){var Y=R(W),ad,ab,Z;function ae(ai,ak,al){var ah,aj,af=ak[al],ag;if(af){if(af.length===p){for(ah in af){if(af.hasOwnProperty(ah)){if(al==="attributes"){aj=c.getAttrib(ai,ah)}else{aj=L(ai,ah)}if(aa&&!aj&&!ak.exact){return}if((!aa||ak.exact)&&!g(aj,r(af[ah],ac))){return}}}}else{for(ag=0;ag<af.length;ag++){if(al==="attributes"?c.getAttrib(ai,af[ag]):L(ai,af[ag])){return ak}}}}return ak}if(Y&&X){for(ab=0;ab<Y.length;ab++){ad=Y[ab];if(h(X,ad)&&ae(X,ad,"attributes")&&ae(X,ad,"styles")){if(Z=ad.classes){for(ab=0;ab<Z.length;ab++){if(!c.hasClass(X,Z[ab])){return}}}return ad}}}}function j(Y,ab,aa){var X,Z;function W(ac){ac=c.getParent(ac,function(ad){return !!x(ad,Y,ab,true)});return x(ac,Y,ab)}if(aa){return W(aa)}if(q.isCollapsed()){for(Z=P.apply.length-1;Z>=0;Z--){if(P.apply[Z].name==Y){return true}}for(Z=P.remove.length-1;Z>=0;Z--){if(P.remove[Z].name==Y){return false}}return W(q.getNode())}aa=q.getNode();if(W(aa)){return B}X=q.getStart();if(X!=aa){if(W(X)){return B}}return S}function v(ad,ac){var aa,ab=[],Z={},Y,X,W;if(q.isCollapsed()){for(X=0;X<ad.length;X++){for(Y=P.remove.length-1;Y>=0;Y--){W=ad[X];if(P.remove[Y].name==W){Z[W]=true;break}}}for(Y=P.apply.length-1;Y>=0;Y--){for(X=0;X<ad.length;X++){W=ad[X];if(!Z[W]&&P.apply[Y].name==W){Z[W]=true;ab.push(W)}}}}aa=q.getStart();c.getParent(aa,function(ag){var af,ae;for(af=0;af<ad.length;af++){ae=ad[af];if(!Z[ae]&&x(ag,ae,ac)){Z[ae]=true;ab.push(ae)}}});return ab}function y(aa){var ac=R(aa),Z,Y,ab,X,W;if(ac){Z=q.getStart();Y=m(Z);for(X=ac.length-1;X>=0;X--){W=ac[X].selector;if(!W){return B}for(ab=Y.length-1;ab>=0;ab--){if(c.is(Y[ab],W)){return B}}}}return S}a.extend(this,{get:R,register:k,apply:T,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(W,X){if(g(W,X.inline)){return B}if(g(W,X.block)){return B}if(X.selector){return c.is(W,X.selector)}}function g(X,W){X=X||"";W=W||"";X=""+(X.nodeName||X);W=""+(W.nodeName||W);return X.toLowerCase()==W.toLowerCase()}function L(X,W){var Y=c.getStyle(X,W);if(W=="color"||W=="backgroundColor"){Y=c.toHex(Y)}if(W=="fontWeight"&&Y==700){Y="bold"}return""+Y}function r(W,X){if(typeof(W)!="string"){W=W(X)}else{if(X){W=W.replace(/%(\w+)/g,function(Z,Y){return X[Y]||Z})}}return W}function f(W){return W&&W.nodeType===3&&/^([\s\r\n]+|)$/.test(W.nodeValue)}function N(Y,X,W){var Z=c.create(X,W);Y.parentNode.insertBefore(Z,Y);Z.appendChild(Y);return Z}function o(W,ag,Z){var Y=W.startContainer,ad=W.startOffset,aj=W.endContainer,ae=W.endOffset,ai,af,ac;function ah(am,an,ak,al){var ao,ap;al=al||c.getRoot();for(;;){ao=am.parentNode;if(ao==al||(!ag[0].block_expand&&F(ao))){return am}for(ai=ao[an];ai&&ai!=am;ai=ai[ak]){if(ai.nodeType==1&&!H(ai)){return am}if(ai.nodeType==3&&!f(ai)){return am}}am=am.parentNode}return am}function ab(ak,al){if(al===p){al=ak.nodeType===3?ak.length:ak.childNodes.length}while(ak&&ak.hasChildNodes()){ak=ak.childNodes[al];if(ak){al=ak.nodeType===3?ak.length:ak.childNodes.length}}return{node:ak,offset:al}}if(Y.nodeType==1&&Y.hasChildNodes()){af=Y.childNodes.length-1;Y=Y.childNodes[ad>af?af:ad];if(Y.nodeType==3){ad=0}}if(aj.nodeType==1&&aj.hasChildNodes()){af=aj.childNodes.length-1;aj=aj.childNodes[ae>af?af:ae-1];if(aj.nodeType==3){ae=aj.nodeValue.length}}if(H(Y.parentNode)){Y=Y.parentNode}if(H(Y)){Y=Y.nextSibling||Y}if(H(aj.parentNode)){ae=c.nodeIndex(aj);aj=aj.parentNode}if(H(aj)&&aj.previousSibling){aj=aj.previousSibling;ae=aj.length}if(ag[0].inline){ac=ab(aj,ae);if(ac.node){while(ac.node&&ac.offset===0&&ac.node.previousSibling){ac=ab(ac.node.previousSibling)}if(ac.node&&ac.offset>0&&ac.node.nodeType===3&&ac.node.nodeValue.charAt(ac.offset-1)===" "){if(ac.offset>1){aj=ac.node;aj.splitText(ac.offset-1)}else{if(ac.node.previousSibling){aj=ac.node.previousSibling}}}}}if(ag[0].inline||ag[0].block_expand){Y=ah(Y,"firstChild","nextSibling");aj=ah(aj,"lastChild","previousSibling")}if(ag[0].selector&&ag[0].expand!==S&&!ag[0].inline){function aa(al,ak){var am,an,ap,ao;if(al.nodeType==3&&al.nodeValue.length==0&&al[ak]){al=al[ak]}am=m(al);for(an=0;an<am.length;an++){for(ap=0;ap<ag.length;ap++){ao=ag[ap];if("collapsed" in ao&&ao.collapsed!==W.collapsed){continue}if(c.is(am[an],ao.selector)){return am[an]}}}return al}Y=aa(Y,"previousSibling");aj=aa(aj,"nextSibling")}if(ag[0].block||ag[0].selector){function X(al,ak,an){var am;if(!ag[0].wrapper){am=c.getParent(al,ag[0].block)}if(!am){am=c.getParent(al.nodeType==3?al.parentNode:al,F)}if(am&&ag[0].wrapper){am=m(am,"ul,ol").reverse()[0]||am}if(!am){am=al;while(am[ak]&&!F(am[ak])){am=am[ak];if(g(am,"br")){break}}}return am||al}Y=X(Y,"previousSibling");aj=X(aj,"nextSibling");if(ag[0].block){if(!F(Y)){Y=ah(Y,"firstChild","nextSibling")}if(!F(aj)){aj=ah(aj,"lastChild","previousSibling")}}}if(Y.nodeType==1){ad=s(Y);Y=Y.parentNode}if(aj.nodeType==1){ae=s(aj)+1;aj=aj.parentNode}return{startContainer:Y,startOffset:ad,endContainer:aj,endOffset:ae}}function U(ac,ab,Z,W){var Y,X,aa;if(!h(Z,ac)){return S}if(ac.remove!="all"){O(ac.styles,function(ae,ad){ae=r(ae,ab);if(typeof(ad)==="number"){ad=ae;W=0}if(!W||g(L(W,ad),ae)){c.setStyle(Z,ad,"")}aa=1});if(aa&&c.getAttrib(Z,"style")==""){Z.removeAttribute("style");Z.removeAttribute("data-mce-style")}O(ac.attributes,function(af,ad){var ae;af=r(af,ab);if(typeof(ad)==="number"){ad=af;W=0}if(!W||g(c.getAttrib(W,ad),af)){if(ad=="class"){af=c.getAttrib(Z,ad);if(af){ae="";O(af.split(/\s+/),function(ag){if(/mce\w+/.test(ag)){ae+=(ae?" ":"")+ag}});if(ae){c.setAttrib(Z,ad,ae);return}}}if(ad=="class"){Z.removeAttribute("className")}if(e.test(ad)){Z.removeAttribute("data-mce-"+ad)}Z.removeAttribute(ad)}});O(ac.classes,function(ad){ad=r(ad,ab);if(!W||c.hasClass(W,ad)){c.removeClass(Z,ad)}});X=c.getAttribs(Z);for(Y=0;Y<X.length;Y++){if(X[Y].nodeName.indexOf("_")!==0){return S}}}if(ac.remove!="none"){n(Z,ac);return B}}function n(Y,Z){var W=Y.parentNode,X;if(Z.block){if(!l){function aa(ac,ab,ad){ac=C(ac,ab,ad);return !ac||(ac.nodeName=="BR"||F(ac))}if(F(Y)&&!F(W)){if(!aa(Y,S)&&!aa(Y.firstChild,B,1)){Y.insertBefore(c.create("br"),Y.firstChild)}if(!aa(Y,B)&&!aa(Y.lastChild,S,1)){Y.appendChild(c.create("br"))}}}else{if(W==c.getRoot()){if(!Z.list_block||!g(Y,Z.list_block)){O(a.grep(Y.childNodes),function(ab){if(d(l,ab.nodeName.toLowerCase())){if(!X){X=N(ab,l)}else{X.appendChild(ab)}}else{X=0}})}}}}if(Z.selector&&Z.inline&&!g(Z.inline,Y)){return}c.remove(Y,1)}function C(X,W,Y){if(X){W=W?"nextSibling":"previousSibling";for(X=Y?X:X[W];X;X=X[W]){if(X.nodeType==1||!f(X)){return X}}}}function H(W){return W&&W.nodeType==1&&W.getAttribute("data-mce-type")=="bookmark"}function u(aa,Z){var W,Y,X;function ac(af,ae){if(af.nodeName!=ae.nodeName){return S}function ad(ah){var ai={};O(c.getAttribs(ah),function(aj){var ak=aj.nodeName.toLowerCase();if(ak.indexOf("_")!==0&&ak!=="style"){ai[ak]=c.getAttrib(ah,ak)}});return ai}function ag(ak,aj){var ai,ah;for(ah in ak){if(ak.hasOwnProperty(ah)){ai=aj[ah];if(ai===p){return S}if(ak[ah]!=ai){return S}delete aj[ah]}}for(ah in aj){if(aj.hasOwnProperty(ah)){return S}}return B}if(!ag(ad(af),ad(ae))){return S}if(!ag(c.parseStyle(c.getAttrib(af,"style")),c.parseStyle(c.getAttrib(ae,"style")))){return S}return B}if(aa&&Z){function ab(ae,ad){for(Y=ae;Y;Y=Y[ad]){if(Y.nodeType==3&&Y.nodeValue.length!==0){return ae}if(Y.nodeType==1&&!H(Y)){return Y}}return ae}aa=ab(aa,"previousSibling");Z=ab(Z,"nextSibling");if(ac(aa,Z)){for(Y=aa.nextSibling;Y&&Y!=Z;){X=Y;Y=Y.nextSibling;aa.appendChild(X)}c.remove(Z);O(a.grep(Z.childNodes),function(ad){aa.appendChild(ad)});return aa}}return Z}function G(W){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)}function J(X,aa){var W,Z,Y;W=X[aa?"startContainer":"endContainer"];Z=X[aa?"startOffset":"endOffset"];if(W.nodeType==1){Y=W.childNodes.length-1;if(!aa&&Z){Z--}W=W.childNodes[Z>Y?Y:Z]}return W}function Q(ab,X,aa){var Y,W=P[ab],ac=P[ab=="apply"?"remove":"apply"];function ad(){return P.apply.length||P.remove.length}function Z(){P.apply=[];P.remove=[]}function ae(af){O(P.apply.reverse(),function(ag){T(ag.name,ag.vars,af);if(ag.name==="forecolor"&&ag.vars.value){I(af.parentNode)}});O(P.remove.reverse(),function(ag){A(ag.name,ag.vars,af)});c.remove(af,1);Z()}for(Y=W.length-1;Y>=0;Y--){if(W[Y].name==X){return}}W.push({name:X,vars:aa});for(Y=ac.length-1;Y>=0;Y--){if(ac[Y].name==X){ac.splice(Y,1)}}if(ad()){V.getDoc().execCommand("FontName",false,"mceinline");P.lastRng=q.getRng();O(c.select("font,span"),function(ag){var af;if(b(ag)){af=q.getBookmark();ae(ag);q.moveToBookmark(af);V.nodeChanged()}});if(!P.isListening&&ad()){P.isListening=true;O("onKeyDown,onKeyUp,onKeyPress,onMouseUp".split(","),function(af){V[af].addToTop(function(ag,ah){if(ad()&&!a.dom.RangeUtils.compareRanges(P.lastRng,q.getRng())){O(c.select("font,span"),function(aj){var ak,ai;if(b(aj)){ak=aj.firstChild;while(ak&&ak.nodeType!=3){ak=ak.firstChild}if(ak){ae(aj);ai=c.createRng();ai.setStart(ak,ak.nodeValue.length);ai.setEnd(ak,ak.nodeValue.length);q.setRng(ai);ag.nodeChanged()}else{c.remove(aj)}}});if(ah.type=="keyup"||ah.type=="mouseup"){Z()}}})})}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_style_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/tiny_mce_popup.js b/plugins/TinyMCE/js/tiny_mce_popup.js
deleted file mode 100644 (file)
index f859d24..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-// Uncomment and change this document.domain value if you are loading the script cross subdomains
-// document.domain = 'moxiecode.com';
-
-var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/tiny_mce_src.js b/plugins/TinyMCE/js/tiny_mce_src.js
deleted file mode 100644 (file)
index bc6aece..0000000
+++ /dev/null
@@ -1,16063 +0,0 @@
-(function(win) {\r
-       var whiteSpaceRe = /^\s*|\s*$/g,\r
-               undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';\r
-\r
-       var tinymce = {\r
-               majorVersion : '3',\r
-\r
-               minorVersion : '4.3.1',\r
-\r
-               releaseDate : '2011-06-16',\r
-\r
-               _init : function() {\r
-                       var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;\r
-\r
-                       t.isOpera = win.opera && opera.buildNumber;\r
-\r
-                       t.isWebKit = /WebKit/.test(ua);\r
-\r
-                       t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);\r
-\r
-                       t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
-\r
-                       t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
-\r
-                       t.isMac = ua.indexOf('Mac') != -1;\r
-\r
-                       t.isAir = /adobeair/i.test(ua);\r
-\r
-                       t.isIDevice = /(iPad|iPhone)/.test(ua);\r
-                       \r
-                       t.isIOS5 = t.isIDevice && ua.match(/AppleWebKit\/(\d*)/)[1]>=534;\r
-\r
-                       // TinyMCE .NET webcontrol might be setting the values for TinyMCE\r
-                       if (win.tinyMCEPreInit) {\r
-                               t.suffix = tinyMCEPreInit.suffix;\r
-                               t.baseURL = tinyMCEPreInit.base;\r
-                               t.query = tinyMCEPreInit.query;\r
-                               return;\r
-                       }\r
-\r
-                       // Get suffix and base\r
-                       t.suffix = '';\r
-\r
-                       // If base element found, add that infront of baseURL\r
-                       nl = d.getElementsByTagName('base');\r
-                       for (i=0; i<nl.length; i++) {\r
-                               if (v = nl[i].href) {\r
-                                       // Host only value like http://site.com or http://site.com:8008\r
-                                       if (/^https?:\/\/[^\/]+$/.test(v))\r
-                                               v += '/';\r
-\r
-                                       base = v ? v.match(/.*\//)[0] : ''; // Get only directory\r
-                               }\r
-                       }\r
-\r
-                       function getBase(n) {\r
-                               if (n.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(n.src)) {\r
-                                       if (/_(src|dev)\.js/g.test(n.src))\r
-                                               t.suffix = '_src';\r
-\r
-                                       if ((p = n.src.indexOf('?')) != -1)\r
-                                               t.query = n.src.substring(p + 1);\r
-\r
-                                       t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));\r
-\r
-                                       // If path to script is relative and a base href was found add that one infront\r
-                                       // the src property will always be an absolute one on non IE browsers and IE 8\r
-                                       // so this logic will basically only be executed on older IE versions\r
-                                       if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)\r
-                                               t.baseURL = base + t.baseURL;\r
-\r
-                                       return t.baseURL;\r
-                               }\r
-\r
-                               return null;\r
-                       };\r
-\r
-                       // Check document\r
-                       nl = d.getElementsByTagName('script');\r
-                       for (i=0; i<nl.length; i++) {\r
-                               if (getBase(nl[i]))\r
-                                       return;\r
-                       }\r
-\r
-                       // Check head\r
-                       n = d.getElementsByTagName('head')[0];\r
-                       if (n) {\r
-                               nl = n.getElementsByTagName('script');\r
-                               for (i=0; i<nl.length; i++) {\r
-                                       if (getBase(nl[i]))\r
-                                               return;\r
-                               }\r
-                       }\r
-\r
-                       return;\r
-               },\r
-\r
-               is : function(o, t) {\r
-                       if (!t)\r
-                               return o !== undefined;\r
-\r
-                       if (t == 'array' && (o.hasOwnProperty && o instanceof Array))\r
-                               return true;\r
-\r
-                       return typeof(o) == t;\r
-               },\r
-\r
-               makeMap : function(items, delim, map) {\r
-                       var i;\r
-\r
-                       items = items || [];\r
-                       delim = delim || ',';\r
-\r
-                       if (typeof(items) == "string")\r
-                               items = items.split(delim);\r
-\r
-                       map = map || {};\r
-\r
-                       i = items.length;\r
-                       while (i--)\r
-                               map[items[i]] = {};\r
-\r
-                       return map;\r
-               },\r
-\r
-               each : function(o, cb, s) {\r
-                       var n, l;\r
-\r
-                       if (!o)\r
-                               return 0;\r
-\r
-                       s = s || o;\r
-\r
-                       if (o.length !== undefined) {\r
-                               // Indexed arrays, needed for Safari\r
-                               for (n=0, l = o.length; n < l; n++) {\r
-                                       if (cb.call(s, o[n], n, o) === false)\r
-                                               return 0;\r
-                               }\r
-                       } else {\r
-                               // Hashtables\r
-                               for (n in o) {\r
-                                       if (o.hasOwnProperty(n)) {\r
-                                               if (cb.call(s, o[n], n, o) === false)\r
-                                                       return 0;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       return 1;\r
-               },\r
-\r
-\r
-               map : function(a, f) {\r
-                       var o = [];\r
-\r
-                       tinymce.each(a, function(v) {\r
-                               o.push(f(v));\r
-                       });\r
-\r
-                       return o;\r
-               },\r
-\r
-               grep : function(a, f) {\r
-                       var o = [];\r
-\r
-                       tinymce.each(a, function(v) {\r
-                               if (!f || f(v))\r
-                                       o.push(v);\r
-                       });\r
-\r
-                       return o;\r
-               },\r
-\r
-               inArray : function(a, v) {\r
-                       var i, l;\r
-\r
-                       if (a) {\r
-                               for (i = 0, l = a.length; i < l; i++) {\r
-                                       if (a[i] === v)\r
-                                               return i;\r
-                               }\r
-                       }\r
-\r
-                       return -1;\r
-               },\r
-\r
-               extend : function(o, e) {\r
-                       var i, l, a = arguments;\r
-\r
-                       for (i = 1, l = a.length; i < l; i++) {\r
-                               e = a[i];\r
-\r
-                               tinymce.each(e, function(v, n) {\r
-                                       if (v !== undefined)\r
-                                               o[n] = v;\r
-                               });\r
-                       }\r
-\r
-                       return o;\r
-               },\r
-\r
-\r
-               trim : function(s) {\r
-                       return (s ? '' + s : '').replace(whiteSpaceRe, '');\r
-               },\r
-\r
-               create : function(s, p, root) {\r
-                       var t = this, sp, ns, cn, scn, c, de = 0;\r
-\r
-                       // Parse : <prefix> <class>:<super class>\r
-                       s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);\r
-                       cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name\r
-\r
-                       // Create namespace for new class\r
-                       ns = t.createNS(s[3].replace(/\.\w+$/, ''), root);\r
-\r
-                       // Class already exists\r
-                       if (ns[cn])\r
-                               return;\r
-\r
-                       // Make pure static class\r
-                       if (s[2] == 'static') {\r
-                               ns[cn] = p;\r
-\r
-                               if (this.onCreate)\r
-                                       this.onCreate(s[2], s[3], ns[cn]);\r
-\r
-                               return;\r
-                       }\r
-\r
-                       // Create default constructor\r
-                       if (!p[cn]) {\r
-                               p[cn] = function() {};\r
-                               de = 1;\r
-                       }\r
-\r
-                       // Add constructor and methods\r
-                       ns[cn] = p[cn];\r
-                       t.extend(ns[cn].prototype, p);\r
-\r
-                       // Extend\r
-                       if (s[5]) {\r
-                               sp = t.resolve(s[5]).prototype;\r
-                               scn = s[5].match(/\.(\w+)$/i)[1]; // Class name\r
-\r
-                               // Extend constructor\r
-                               c = ns[cn];\r
-                               if (de) {\r
-                                       // Add passthrough constructor\r
-                                       ns[cn] = function() {\r
-                                               return sp[scn].apply(this, arguments);\r
-                                       };\r
-                               } else {\r
-                                       // Add inherit constructor\r
-                                       ns[cn] = function() {\r
-                                               this.parent = sp[scn];\r
-                                               return c.apply(this, arguments);\r
-                                       };\r
-                               }\r
-                               ns[cn].prototype[cn] = ns[cn];\r
-\r
-                               // Add super methods\r
-                               t.each(sp, function(f, n) {\r
-                                       ns[cn].prototype[n] = sp[n];\r
-                               });\r
-\r
-                               // Add overridden methods\r
-                               t.each(p, function(f, n) {\r
-                                       // Extend methods if needed\r
-                                       if (sp[n]) {\r
-                                               ns[cn].prototype[n] = function() {\r
-                                                       this.parent = sp[n];\r
-                                                       return f.apply(this, arguments);\r
-                                               };\r
-                                       } else {\r
-                                               if (n != cn)\r
-                                                       ns[cn].prototype[n] = f;\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       // Add static methods\r
-                       t.each(p['static'], function(f, n) {\r
-                               ns[cn][n] = f;\r
-                       });\r
-\r
-                       if (this.onCreate)\r
-                               this.onCreate(s[2], s[3], ns[cn].prototype);\r
-               },\r
-\r
-               walk : function(o, f, n, s) {\r
-                       s = s || this;\r
-\r
-                       if (o) {\r
-                               if (n)\r
-                                       o = o[n];\r
-\r
-                               tinymce.each(o, function(o, i) {\r
-                                       if (f.call(s, o, i, n) === false)\r
-                                               return false;\r
-\r
-                                       tinymce.walk(o, f, n, s);\r
-                               });\r
-                       }\r
-               },\r
-\r
-               createNS : function(n, o) {\r
-                       var i, v;\r
-\r
-                       o = o || win;\r
-\r
-                       n = n.split('.');\r
-                       for (i=0; i<n.length; i++) {\r
-                               v = n[i];\r
-\r
-                               if (!o[v])\r
-                                       o[v] = {};\r
-\r
-                               o = o[v];\r
-                       }\r
-\r
-                       return o;\r
-               },\r
-\r
-               resolve : function(n, o) {\r
-                       var i, l;\r
-\r
-                       o = o || win;\r
-\r
-                       n = n.split('.');\r
-                       for (i = 0, l = n.length; i < l; i++) {\r
-                               o = o[n[i]];\r
-\r
-                               if (!o)\r
-                                       break;\r
-                       }\r
-\r
-                       return o;\r
-               },\r
-\r
-               addUnload : function(f, s) {\r
-                       var t = this;\r
-\r
-                       f = {func : f, scope : s || this};\r
-\r
-                       if (!t.unloads) {\r
-                               function unload() {\r
-                                       var li = t.unloads, o, n;\r
-\r
-                                       if (li) {\r
-                                               // Call unload handlers\r
-                                               for (n in li) {\r
-                                                       o = li[n];\r
-\r
-                                                       if (o && o.func)\r
-                                                               o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy\r
-                                               }\r
-\r
-                                               // Detach unload function\r
-                                               if (win.detachEvent) {\r
-                                                       win.detachEvent('onbeforeunload', fakeUnload);\r
-                                                       win.detachEvent('onunload', unload);\r
-                                               } else if (win.removeEventListener)\r
-                                                       win.removeEventListener('unload', unload, false);\r
-\r
-                                               // Destroy references\r
-                                               t.unloads = o = li = w = unload = 0;\r
-\r
-                                               // Run garbarge collector on IE\r
-                                               if (win.CollectGarbage)\r
-                                                       CollectGarbage();\r
-                                       }\r
-                               };\r
-\r
-                               function fakeUnload() {\r
-                                       var d = document;\r
-\r
-                                       // Is there things still loading, then do some magic\r
-                                       if (d.readyState == 'interactive') {\r
-                                               function stop() {\r
-                                                       // Prevent memory leak\r
-                                                       d.detachEvent('onstop', stop);\r
-\r
-                                                       // Call unload handler\r
-                                                       if (unload)\r
-                                                               unload();\r
-\r
-                                                       d = 0;\r
-                                               };\r
-\r
-                                               // Fire unload when the currently loading page is stopped\r
-                                               if (d)\r
-                                                       d.attachEvent('onstop', stop);\r
-\r
-                                               // Remove onstop listener after a while to prevent the unload function\r
-                                               // to execute if the user presses cancel in an onbeforeunload\r
-                                               // confirm dialog and then presses the browser stop button\r
-                                               win.setTimeout(function() {\r
-                                                       if (d)\r
-                                                               d.detachEvent('onstop', stop);\r
-                                               }, 0);\r
-                                       }\r
-                               };\r
-\r
-                               // Attach unload handler\r
-                               if (win.attachEvent) {\r
-                                       win.attachEvent('onunload', unload);\r
-                                       win.attachEvent('onbeforeunload', fakeUnload);\r
-                               } else if (win.addEventListener)\r
-                                       win.addEventListener('unload', unload, false);\r
-\r
-                               // Setup initial unload handler array\r
-                               t.unloads = [f];\r
-                       } else\r
-                               t.unloads.push(f);\r
-\r
-                       return f;\r
-               },\r
-\r
-               removeUnload : function(f) {\r
-                       var u = this.unloads, r = null;\r
-\r
-                       tinymce.each(u, function(o, i) {\r
-                               if (o && o.func == f) {\r
-                                       u.splice(i, 1);\r
-                                       r = f;\r
-                                       return false;\r
-                               }\r
-                       });\r
-\r
-                       return r;\r
-               },\r
-\r
-               explode : function(s, d) {\r
-                       return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;\r
-               },\r
-\r
-               _addVer : function(u) {\r
-                       var v;\r
-\r
-                       if (!this.query)\r
-                               return u;\r
-\r
-                       v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;\r
-\r
-                       if (u.indexOf('#') == -1)\r
-                               return u + v;\r
-\r
-                       return u.replace('#', v + '#');\r
-               },\r
-\r
-               // Fix function for IE 9 where regexps isn't working correctly\r
-               // Todo: remove me once MS fixes the bug\r
-               _replace : function(find, replace, str) {\r
-                       // On IE9 we have to fake $x replacement\r
-                       if (isRegExpBroken) {\r
-                               return str.replace(find, function() {\r
-                                       var val = replace, args = arguments, i;\r
-\r
-                                       for (i = 0; i < args.length - 2; i++) {\r
-                                               if (args[i] === undefined) {\r
-                                                       val = val.replace(new RegExp('\\$' + i, 'g'), '');\r
-                                               } else {\r
-                                                       val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);\r
-                                               }\r
-                                       }\r
-\r
-                                       return val;\r
-                               });\r
-                       }\r
-\r
-                       return str.replace(find, replace);\r
-               }\r
-\r
-               };\r
-\r
-       // Initialize the API\r
-       tinymce._init();\r
-\r
-       // Expose tinymce namespace to the global namespace (window)\r
-       win.tinymce = win.tinyMCE = tinymce;\r
-\r
-       // Describe the different namespaces\r
-\r
-       })(window);\r
-\r
-\r
-\r
-tinymce.create('tinymce.util.Dispatcher', {\r
-       scope : null,\r
-       listeners : null,\r
-\r
-       Dispatcher : function(s) {\r
-               this.scope = s || this;\r
-               this.listeners = [];\r
-       },\r
-\r
-       add : function(cb, s) {\r
-               this.listeners.push({cb : cb, scope : s || this.scope});\r
-\r
-               return cb;\r
-       },\r
-\r
-       addToTop : function(cb, s) {\r
-               this.listeners.unshift({cb : cb, scope : s || this.scope});\r
-\r
-               return cb;\r
-       },\r
-\r
-       remove : function(cb) {\r
-               var l = this.listeners, o = null;\r
-\r
-               tinymce.each(l, function(c, i) {\r
-                       if (cb == c.cb) {\r
-                               o = cb;\r
-                               l.splice(i, 1);\r
-                               return false;\r
-                       }\r
-               });\r
-\r
-               return o;\r
-       },\r
-\r
-       dispatch : function() {\r
-               var s, a = arguments, i, li = this.listeners, c;\r
-\r
-               // Needs to be a real loop since the listener count might change while looping\r
-               // And this is also more efficient\r
-               for (i = 0; i<li.length; i++) {\r
-                       c = li[i];\r
-                       s = c.cb.apply(c.scope, a);\r
-\r
-                       if (s === false)\r
-                               break;\r
-               }\r
-\r
-               return s;\r
-       }\r
-\r
-       });\r
-\r
-(function() {\r
-       var each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.util.URI', {\r
-               URI : function(u, s) {\r
-                       var t = this, o, a, b, base_url;\r
-\r
-                       // Trim whitespace\r
-                       u = tinymce.trim(u);\r
-\r
-                       // Default settings\r
-                       s = t.settings = s || {};\r
-\r
-                       // Strange app protocol or local anchor\r
-                       if (/^(mailto|tel|news|javascript|about|data):/i.test(u) || /^\s*#/.test(u)) {\r
-                               t.source = u;\r
-                               return;\r
-                       }\r
-\r
-                       // Absolute path with no host, fake host and protocol\r
-                       if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)\r
-                               u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;\r
-\r
-                       // Relative path http:// or protocol relative //path\r
-                       if (!/^[\w-]*:?\/\//.test(u)) {\r
-                               base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;\r
-                               u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);\r
-                       }\r
-\r
-                       // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)\r
-                       u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something\r
-                       u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);\r
-                       each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {\r
-                               var s = u[i];\r
-\r
-                               // Zope 3 workaround, they use @@something\r
-                               if (s)\r
-                                       s = s.replace(/\(mce_at\)/g, '@@');\r
-\r
-                               t[v] = s;\r
-                       });\r
-\r
-                       if (b = s.base_uri) {\r
-                               if (!t.protocol)\r
-                                       t.protocol = b.protocol;\r
-\r
-                               if (!t.userInfo)\r
-                                       t.userInfo = b.userInfo;\r
-\r
-                               if (!t.port && t.host == 'mce_host')\r
-                                       t.port = b.port;\r
-\r
-                               if (!t.host || t.host == 'mce_host')\r
-                                       t.host = b.host;\r
-\r
-                               t.source = '';\r
-                       }\r
-\r
-                       //t.path = t.path || '/';\r
-               },\r
-\r
-               setPath : function(p) {\r
-                       var t = this;\r
-\r
-                       p = /^(.*?)\/?(\w+)?$/.exec(p);\r
-\r
-                       // Update path parts\r
-                       t.path = p[0];\r
-                       t.directory = p[1];\r
-                       t.file = p[2];\r
-\r
-                       // Rebuild source\r
-                       t.source = '';\r
-                       t.getURI();\r
-               },\r
-\r
-               toRelative : function(u) {\r
-                       var t = this, o;\r
-\r
-                       if (u === "./")\r
-                               return u;\r
-\r
-                       u = new tinymce.util.URI(u, {base_uri : t});\r
-\r
-                       // Not on same domain/port or protocol\r
-                       if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)\r
-                               return u.getURI();\r
-\r
-                       o = t.toRelPath(t.path, u.path);\r
-\r
-                       // Add query\r
-                       if (u.query)\r
-                               o += '?' + u.query;\r
-\r
-                       // Add anchor\r
-                       if (u.anchor)\r
-                               o += '#' + u.anchor;\r
-\r
-                       return o;\r
-               },\r
-       \r
-               toAbsolute : function(u, nh) {\r
-                       var u = new tinymce.util.URI(u, {base_uri : this});\r
-\r
-                       return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);\r
-               },\r
-\r
-               toRelPath : function(base, path) {\r
-                       var items, bp = 0, out = '', i, l;\r
-\r
-                       // Split the paths\r
-                       base = base.substring(0, base.lastIndexOf('/'));\r
-                       base = base.split('/');\r
-                       items = path.split('/');\r
-\r
-                       if (base.length >= items.length) {\r
-                               for (i = 0, l = base.length; i < l; i++) {\r
-                                       if (i >= items.length || base[i] != items[i]) {\r
-                                               bp = i + 1;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (base.length < items.length) {\r
-                               for (i = 0, l = items.length; i < l; i++) {\r
-                                       if (i >= base.length || base[i] != items[i]) {\r
-                                               bp = i + 1;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (bp == 1)\r
-                               return path;\r
-\r
-                       for (i = 0, l = base.length - (bp - 1); i < l; i++)\r
-                               out += "../";\r
-\r
-                       for (i = bp - 1, l = items.length; i < l; i++) {\r
-                               if (i != bp - 1)\r
-                                       out += "/" + items[i];\r
-                               else\r
-                                       out += items[i];\r
-                       }\r
-\r
-                       return out;\r
-               },\r
-\r
-               toAbsPath : function(base, path) {\r
-                       var i, nb = 0, o = [], tr, outPath;\r
-\r
-                       // Split paths\r
-                       tr = /\/$/.test(path) ? '/' : '';\r
-                       base = base.split('/');\r
-                       path = path.split('/');\r
-\r
-                       // Remove empty chunks\r
-                       each(base, function(k) {\r
-                               if (k)\r
-                                       o.push(k);\r
-                       });\r
-\r
-                       base = o;\r
-\r
-                       // Merge relURLParts chunks\r
-                       for (i = path.length - 1, o = []; i >= 0; i--) {\r
-                               // Ignore empty or .\r
-                               if (path[i].length == 0 || path[i] == ".")\r
-                                       continue;\r
-\r
-                               // Is parent\r
-                               if (path[i] == '..') {\r
-                                       nb++;\r
-                                       continue;\r
-                               }\r
-\r
-                               // Move up\r
-                               if (nb > 0) {\r
-                                       nb--;\r
-                                       continue;\r
-                               }\r
-\r
-                               o.push(path[i]);\r
-                       }\r
-\r
-                       i = base.length - nb;\r
-\r
-                       // If /a/b/c or /\r
-                       if (i <= 0)\r
-                               outPath = o.reverse().join('/');\r
-                       else\r
-                               outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\r
-\r
-                       // Add front / if it's needed\r
-                       if (outPath.indexOf('/') !== 0)\r
-                               outPath = '/' + outPath;\r
-\r
-                       // Add traling / if it's needed\r
-                       if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)\r
-                               outPath += tr;\r
-\r
-                       return outPath;\r
-               },\r
-\r
-               getURI : function(nh) {\r
-                       var s, t = this;\r
-\r
-                       // Rebuild source\r
-                       if (!t.source || nh) {\r
-                               s = '';\r
-\r
-                               if (!nh) {\r
-                                       if (t.protocol)\r
-                                               s += t.protocol + '://';\r
-\r
-                                       if (t.userInfo)\r
-                                               s += t.userInfo + '@';\r
-\r
-                                       if (t.host)\r
-                                               s += t.host;\r
-\r
-                                       if (t.port)\r
-                                               s += ':' + t.port;\r
-                               }\r
-\r
-                               if (t.path)\r
-                                       s += t.path;\r
-\r
-                               if (t.query)\r
-                                       s += '?' + t.query;\r
-\r
-                               if (t.anchor)\r
-                                       s += '#' + t.anchor;\r
-\r
-                               t.source = s;\r
-                       }\r
-\r
-                       return t.source;\r
-               }\r
-       });\r
-})();\r
-\r
-(function() {\r
-       var each = tinymce.each;\r
-\r
-       tinymce.create('static tinymce.util.Cookie', {\r
-               getHash : function(n) {\r
-                       var v = this.get(n), h;\r
-\r
-                       if (v) {\r
-                               each(v.split('&'), function(v) {\r
-                                       v = v.split('=');\r
-                                       h = h || {};\r
-                                       h[unescape(v[0])] = unescape(v[1]);\r
-                               });\r
-                       }\r
-\r
-                       return h;\r
-               },\r
-\r
-               setHash : function(n, v, e, p, d, s) {\r
-                       var o = '';\r
-\r
-                       each(v, function(v, k) {\r
-                               o += (!o ? '' : '&') + escape(k) + '=' + escape(v);\r
-                       });\r
-\r
-                       this.set(n, o, e, p, d, s);\r
-               },\r
-\r
-               get : function(n) {\r
-                       var c = document.cookie, e, p = n + "=", b;\r
-\r
-                       // Strict mode\r
-                       if (!c)\r
-                               return;\r
-\r
-                       b = c.indexOf("; " + p);\r
-\r
-                       if (b == -1) {\r
-                               b = c.indexOf(p);\r
-\r
-                               if (b != 0)\r
-                                       return null;\r
-                       } else\r
-                               b += 2;\r
-\r
-                       e = c.indexOf(";", b);\r
-\r
-                       if (e == -1)\r
-                               e = c.length;\r
-\r
-                       return unescape(c.substring(b + p.length, e));\r
-               },\r
-\r
-               set : function(n, v, e, p, d, s) {\r
-                       document.cookie = n + "=" + escape(v) +\r
-                               ((e) ? "; expires=" + e.toGMTString() : "") +\r
-                               ((p) ? "; path=" + escape(p) : "") +\r
-                               ((d) ? "; domain=" + d : "") +\r
-                               ((s) ? "; secure" : "");\r
-               },\r
-\r
-               remove : function(n, p) {\r
-                       var d = new Date();\r
-\r
-                       d.setTime(d.getTime() - 1000);\r
-\r
-                       this.set(n, '', d, p, d);\r
-               }\r
-       });\r
-})();\r
-\r
-(function() {\r
-       function serialize(o, quote) {\r
-               var i, v, t;\r
-\r
-               quote = quote || '"';\r
-\r
-               if (o == null)\r
-                       return 'null';\r
-\r
-               t = typeof o;\r
-\r
-               if (t == 'string') {\r
-                       v = '\bb\tt\nn\ff\rr\""\'\'\\\\';\r
-\r
-                       return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) {\r
-                               // Make sure single quotes never get encoded inside double quotes for JSON compatibility\r
-                               if (quote === '"' && a === "'")\r
-                                       return a;\r
-\r
-                               i = v.indexOf(b);\r
-\r
-                               if (i + 1)\r
-                                       return '\\' + v.charAt(i + 1);\r
-\r
-                               a = b.charCodeAt().toString(16);\r
-\r
-                               return '\\u' + '0000'.substring(a.length) + a;\r
-                       }) + quote;\r
-               }\r
-\r
-               if (t == 'object') {\r
-                       if (o.hasOwnProperty && o instanceof Array) {\r
-                                       for (i=0, v = '['; i<o.length; i++)\r
-                                               v += (i > 0 ? ',' : '') + serialize(o[i], quote);\r
-\r
-                                       return v + ']';\r
-                               }\r
-\r
-                               v = '{';\r
-\r
-                               for (i in o)\r
-                                       v += typeof o[i] != 'function' ? (v.length > 1 ? ',' + quote : quote) + i + quote +':' + serialize(o[i], quote) : '';\r
-\r
-                               return v + '}';\r
-               }\r
-\r
-               return '' + o;\r
-       };\r
-\r
-       tinymce.util.JSON = {\r
-               serialize: serialize,\r
-\r
-               parse: function(s) {\r
-                       try {\r
-                               return eval('(' + s + ')');\r
-                       } catch (ex) {\r
-                               // Ignore\r
-                       }\r
-               }\r
-\r
-               };\r
-})();\r
-tinymce.create('static tinymce.util.XHR', {\r
-       send : function(o) {\r
-               var x, t, w = window, c = 0;\r
-\r
-               // Default settings\r
-               o.scope = o.scope || this;\r
-               o.success_scope = o.success_scope || o.scope;\r
-               o.error_scope = o.error_scope || o.scope;\r
-               o.async = o.async === false ? false : true;\r
-               o.data = o.data || '';\r
-\r
-               function get(s) {\r
-                       x = 0;\r
-\r
-                       try {\r
-                               x = new ActiveXObject(s);\r
-                       } catch (ex) {\r
-                       }\r
-\r
-                       return x;\r
-               };\r
-\r
-               x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');\r
-\r
-               if (x) {\r
-                       if (x.overrideMimeType)\r
-                               x.overrideMimeType(o.content_type);\r
-\r
-                       x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);\r
-\r
-                       if (o.content_type)\r
-                               x.setRequestHeader('Content-Type', o.content_type);\r
-\r
-                       x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r
-\r
-                       x.send(o.data);\r
-\r
-                       function ready() {\r
-                               if (!o.async || x.readyState == 4 || c++ > 10000) {\r
-                                       if (o.success && c < 10000 && x.status == 200)\r
-                                               o.success.call(o.success_scope, '' + x.responseText, x, o);\r
-                                       else if (o.error)\r
-                                               o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);\r
-\r
-                                       x = null;\r
-                               } else\r
-                                       w.setTimeout(ready, 10);\r
-                       };\r
-\r
-                       // Syncronous request\r
-                       if (!o.async)\r
-                               return ready();\r
-\r
-                       // Wait for response, onReadyStateChange can not be used since it leaks memory in IE\r
-                       t = w.setTimeout(ready, 10);\r
-               }\r
-       }\r
-});\r
-\r
-(function() {\r
-       var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;\r
-\r
-       tinymce.create('tinymce.util.JSONRequest', {\r
-               JSONRequest : function(s) {\r
-                       this.settings = extend({\r
-                       }, s);\r
-                       this.count = 0;\r
-               },\r
-\r
-               send : function(o) {\r
-                       var ecb = o.error, scb = o.success;\r
-\r
-                       o = extend(this.settings, o);\r
-\r
-                       o.success = function(c, x) {\r
-                               c = JSON.parse(c);\r
-\r
-                               if (typeof(c) == 'undefined') {\r
-                                       c = {\r
-                                               error : 'JSON Parse error.'\r
-                                       };\r
-                               }\r
-\r
-                               if (c.error)\r
-                                       ecb.call(o.error_scope || o.scope, c.error, x);\r
-                               else\r
-                                       scb.call(o.success_scope || o.scope, c.result);\r
-                       };\r
-\r
-                       o.error = function(ty, x) {\r
-                               if (ecb)\r
-                                       ecb.call(o.error_scope || o.scope, ty, x);\r
-                       };\r
-\r
-                       o.data = JSON.serialize({\r
-                               id : o.id || 'c' + (this.count++),\r
-                               method : o.method,\r
-                               params : o.params\r
-                       });\r
-\r
-                       // JSON content type for Ruby on rails. Bug: #1883287\r
-                       o.content_type = 'application/json';\r
-\r
-                       XHR.send(o);\r
-               },\r
-\r
-               'static' : {\r
-                       sendRPC : function(o) {\r
-                               return new tinymce.util.JSONRequest().send(o);\r
-                       }\r
-               }\r
-       });\r
-}());\r
-(function(tinymce) {\r
-       var namedEntities, baseEntities, reverseEntities,\r
-               attrsCharsRegExp = /[&<>\"\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,\r
-               textCharsRegExp = /[<>&\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,\r
-               rawCharsRegExp = /[<>&\"\']/g,\r
-               entityRegExp = /&(#x|#)?([\w]+);/g,\r
-               asciiMap = {\r
-                               128 : "\u20AC", 130 : "\u201A", 131 : "\u0192", 132 : "\u201E", 133 : "\u2026", 134 : "\u2020",\r
-                               135 : "\u2021", 136 : "\u02C6", 137 : "\u2030", 138 : "\u0160", 139 : "\u2039", 140 : "\u0152",\r
-                               142 : "\u017D", 145 : "\u2018", 146 : "\u2019", 147 : "\u201C", 148 : "\u201D", 149 : "\u2022",\r
-                               150 : "\u2013", 151 : "\u2014", 152 : "\u02DC", 153 : "\u2122", 154 : "\u0161", 155 : "\u203A",\r
-                               156 : "\u0153", 158 : "\u017E", 159 : "\u0178"\r
-               };\r
-\r
-       // Raw entities\r
-       baseEntities = {\r
-               '"' : '&quot;',\r
-               "'" : '&#39;',\r
-               '<' : '&lt;',\r
-               '>' : '&gt;',\r
-               '&' : '&amp;'\r
-       };\r
-\r
-       // Reverse lookup table for raw entities\r
-       reverseEntities = {\r
-               '&lt;' : '<',\r
-               '&gt;' : '>',\r
-               '&amp;' : '&',\r
-               '&quot;' : '"',\r
-               '&apos;' : "'"\r
-       };\r
-\r
-       // Decodes text by using the browser\r
-       function nativeDecode(text) {\r
-               var elm;\r
-\r
-               elm = document.createElement("div");\r
-               elm.innerHTML = text;\r
-\r
-               return elm.textContent || elm.innerText || text;\r
-       };\r
-\r
-       // Build a two way lookup table for the entities\r
-       function buildEntitiesLookup(items, radix) {\r
-               var i, chr, entity, lookup = {};\r
-\r
-               if (items) {\r
-                       items = items.split(',');\r
-                       radix = radix || 10;\r
-\r
-                       // Build entities lookup table\r
-                       for (i = 0; i < items.length; i += 2) {\r
-                               chr = String.fromCharCode(parseInt(items[i], radix));\r
-\r
-                               // Only add non base entities\r
-                               if (!baseEntities[chr]) {\r
-                                       entity = '&' + items[i + 1] + ';';\r
-                                       lookup[chr] = entity;\r
-                                       lookup[entity] = chr;\r
-                               }\r
-                       }\r
-\r
-                       return lookup;\r
-               }\r
-       };\r
-\r
-       // Unpack entities lookup where the numbers are in radix 32 to reduce the size\r
-       namedEntities = buildEntitiesLookup(\r
-               '50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' +\r
-               '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' +\r
-               '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' +\r
-               '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' +\r
-               '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' +\r
-               '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' +\r
-               '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' +\r
-               '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' +\r
-               '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' +\r
-               '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' +\r
-               'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' +\r
-               'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' +\r
-               't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' +\r
-               'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' +\r
-               'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' +\r
-               '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' +\r
-               '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' +\r
-               '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' +\r
-               '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' +\r
-               '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' +\r
-               'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' +\r
-               'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' +\r
-               'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' +\r
-               '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' +\r
-               '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro'\r
-       , 32);\r
-\r
-       tinymce.html = tinymce.html || {};\r
-\r
-       tinymce.html.Entities = {\r
-               encodeRaw : function(text, attr) {\r
-                       return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {\r
-                               return baseEntities[chr] || chr;\r
-                       });\r
-               },\r
-\r
-               encodeAllRaw : function(text) {\r
-                       return ('' + text).replace(rawCharsRegExp, function(chr) {\r
-                               return baseEntities[chr] || chr;\r
-                       });\r
-               },\r
-\r
-               encodeNumeric : function(text, attr) {\r
-                       return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {\r
-                               // Multi byte sequence convert it to a single entity\r
-                               if (chr.length > 1)\r
-                                       return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';';\r
-\r
-                               return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\r
-                       });\r
-               },\r
-\r
-               encodeNamed : function(text, attr, entities) {\r
-                       entities = entities || namedEntities;\r
-\r
-                       return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {\r
-                               return baseEntities[chr] || entities[chr] || chr;\r
-                       });\r
-               },\r
-\r
-               getEncodeFunc : function(name, entities) {\r
-                       var Entities = tinymce.html.Entities;\r
-\r
-                       entities = buildEntitiesLookup(entities) || namedEntities;\r
-\r
-                       function encodeNamedAndNumeric(text, attr) {\r
-                               return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {\r
-                                       return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;\r
-                               });\r
-                       };\r
-\r
-                       function encodeCustomNamed(text, attr) {\r
-                               return Entities.encodeNamed(text, attr, entities);\r
-                       };\r
-\r
-                       // Replace + with , to be compatible with previous TinyMCE versions\r
-                       name = tinymce.makeMap(name.replace(/\+/g, ','));\r
-\r
-                       // Named and numeric encoder\r
-                       if (name.named && name.numeric)\r
-                               return encodeNamedAndNumeric;\r
-\r
-                       // Named encoder\r
-                       if (name.named) {\r
-                               // Custom names\r
-                               if (entities)\r
-                                       return encodeCustomNamed;\r
-\r
-                               return Entities.encodeNamed;\r
-                       }\r
-\r
-                       // Numeric\r
-                       if (name.numeric)\r
-                               return Entities.encodeNumeric;\r
-\r
-                       // Raw encoder\r
-                       return Entities.encodeRaw;\r
-               },\r
-\r
-               decode : function(text) {\r
-                       return text.replace(entityRegExp, function(all, numeric, value) {\r
-                               if (numeric) {\r
-                                       value = parseInt(value, numeric.length === 2 ? 16 : 10);\r
-\r
-                                       // Support upper UTF\r
-                                       if (value > 0xFFFF) {\r
-                                               value -= 0x10000;\r
-\r
-                                               return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF));\r
-                                       } else\r
-                                               return asciiMap[value] || String.fromCharCode(value);\r
-                               }\r
-\r
-                               return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\r
-                       });\r
-               }\r
-       };\r
-})(tinymce);\r
-\r
-tinymce.html.Styles = function(settings, schema) {\r
-       var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,\r
-               urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,\r
-               styleRegExp = /\s*([^:]+):\s*([^;]+);?/g,\r
-               trimRightRegExp = /\s+$/,\r
-               urlColorRegExp = /rgb/,\r
-               undef, i, encodingLookup = {}, encodingItems;\r
-\r
-       settings = settings || {};\r
-\r
-       encodingItems = '\\" \\\' \\; \\: ; : \uFEFF'.split(' ');\r
-       for (i = 0; i < encodingItems.length; i++) {\r
-               encodingLookup[encodingItems[i]] = '\uFEFF' + i;\r
-               encodingLookup['\uFEFF' + i] = encodingItems[i];\r
-       }\r
-\r
-       function toHex(match, r, g, b) {\r
-               function hex(val) {\r
-                       val = parseInt(val).toString(16);\r
-\r
-                       return val.length > 1 ? val : '0' + val; // 0 -> 00\r
-               };\r
-\r
-               return '#' + hex(r) + hex(g) + hex(b);\r
-       };\r
-\r
-       return {\r
-               toHex : function(color) {\r
-                       return color.replace(rgbRegExp, toHex);\r
-               },\r
-\r
-               parse : function(css) {\r
-                       var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope || this;\r
-\r
-                       function compress(prefix, suffix) {\r
-                               var top, right, bottom, left;\r
-\r
-                               // Get values and check it it needs compressing\r
-                               top = styles[prefix + '-top' + suffix];\r
-                               if (!top)\r
-                                       return;\r
-\r
-                               right = styles[prefix + '-right' + suffix];\r
-                               if (top != right)\r
-                                       return;\r
-\r
-                               bottom = styles[prefix + '-bottom' + suffix];\r
-                               if (right != bottom)\r
-                                       return;\r
-\r
-                               left = styles[prefix + '-left' + suffix];\r
-                               if (bottom != left)\r
-                                       return;\r
-\r
-                               // Compress\r
-                               styles[prefix + suffix] = left;\r
-                               delete styles[prefix + '-top' + suffix];\r
-                               delete styles[prefix + '-right' + suffix];\r
-                               delete styles[prefix + '-bottom' + suffix];\r
-                               delete styles[prefix + '-left' + suffix];\r
-                       };\r
-\r
-                       function canCompress(key) {\r
-                               var value = styles[key], i;\r
-\r
-                               if (!value || value.indexOf(' ') < 0)\r
-                                       return;\r
-\r
-                               value = value.split(' ');\r
-                               i = value.length;\r
-                               while (i--) {\r
-                                       if (value[i] !== value[0])\r
-                                               return false;\r
-                               }\r
-\r
-                               styles[key] = value[0];\r
-\r
-                               return true;\r
-                       };\r
-\r
-                       function compress2(target, a, b, c) {\r
-                               if (!canCompress(a))\r
-                                       return;\r
-\r
-                               if (!canCompress(b))\r
-                                       return;\r
-\r
-                               if (!canCompress(c))\r
-                                       return;\r
-\r
-                               // Compress\r
-                               styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\r
-                               delete styles[a];\r
-                               delete styles[b];\r
-                               delete styles[c];\r
-                       };\r
-\r
-                       // Encodes the specified string by replacing all \" \' ; : with _<num>\r
-                       function encode(str) {\r
-                               isEncoded = true;\r
-\r
-                               return encodingLookup[str];\r
-                       };\r
-\r
-                       // Decodes the specified string by replacing all _<num> with it's original value \" \' etc\r
-                       // It will also decode the \" \' if keep_slashes is set to fale or omitted\r
-                       function decode(str, keep_slashes) {\r
-                               if (isEncoded) {\r
-                                       str = str.replace(/\uFEFF[0-9]/g, function(str) {\r
-                                               return encodingLookup[str];\r
-                                       });\r
-                               }\r
-\r
-                               if (!keep_slashes)\r
-                                       str = str.replace(/\\([\'\";:])/g, "$1");\r
-\r
-                               return str;\r
-                       }\r
-\r
-                       if (css) {\r
-                               // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing\r
-                               css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {\r
-                                       return str.replace(/[;:]/g, encode);\r
-                               });\r
-\r
-                               // Parse styles\r
-                               while (matches = styleRegExp.exec(css)) {\r
-                                       name = matches[1].replace(trimRightRegExp, '').toLowerCase();\r
-                                       value = matches[2].replace(trimRightRegExp, '');\r
-\r
-                                       if (name && value.length > 0) {\r
-                                               // Opera will produce 700 instead of bold in their style values\r
-                                               if (name === 'font-weight' && value === '700')\r
-                                                       value = 'bold';\r
-                                               else if (name === 'color' || name === 'background-color') // Lowercase colors like RED\r
-                                                       value = value.toLowerCase();            \r
-\r
-                                               // Convert RGB colors to HEX\r
-                                               value = value.replace(rgbRegExp, toHex);\r
-\r
-                                               // Convert URLs and force them into url('value') format\r
-                                               value = value.replace(urlOrStrRegExp, function(match, url, url2, url3, str, str2) {\r
-                                                       str = str || str2;\r
-\r
-                                                       if (str) {\r
-                                                               str = decode(str);\r
-\r
-                                                               // Force strings into single quote format\r
-                                                               return "'" + str.replace(/\'/g, "\\'") + "'";\r
-                                                       }\r
-\r
-                                                       url = decode(url || url2 || url3);\r
-\r
-                                                       // Convert the URL to relative/absolute depending on config\r
-                                                       if (urlConverter)\r
-                                                               url = urlConverter.call(urlConverterScope, url, 'style');\r
-\r
-                                                       // Output new URL format\r
-                                                       return "url('" + url.replace(/\'/g, "\\'") + "')";\r
-                                               });\r
-\r
-                                               styles[name] = isEncoded ? decode(value, true) : value;\r
-                                       }\r
-\r
-                                       styleRegExp.lastIndex = matches.index + matches[0].length;\r
-                               }\r
-\r
-                               // Compress the styles to reduce it's size for example IE will expand styles\r
-                               compress("border", "");\r
-                               compress("border", "-width");\r
-                               compress("border", "-color");\r
-                               compress("border", "-style");\r
-                               compress("padding", "");\r
-                               compress("margin", "");\r
-                               compress2('border', 'border-width', 'border-style', 'border-color');\r
-\r
-                               // Remove pointless border, IE produces these\r
-                               if (styles.border === 'medium none')\r
-                                       delete styles.border;\r
-                       }\r
-\r
-                       return styles;\r
-               },\r
-\r
-               serialize : function(styles, element_name) {\r
-                       var css = '', name, value;\r
-\r
-                       function serializeStyles(name) {\r
-                               var styleList, i, l, value;\r
-\r
-                               styleList = schema.styles[name];\r
-                               if (styleList) {\r
-                                       for (i = 0, l = styleList.length; i < l; i++) {\r
-                                               name = styleList[i];\r
-                                               value = styles[name];\r
-\r
-                                               if (value !== undef && value.length > 0)\r
-                                                       css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       // Serialize styles according to schema\r
-                       if (element_name && schema && schema.styles) {\r
-                               // Serialize global styles and element specific styles\r
-                               serializeStyles('*');\r
-                               serializeStyles(element_name);\r
-                       } else {\r
-                               // Output the styles in the order they are inside the object\r
-                               for (name in styles) {\r
-                                       value = styles[name];\r
-\r
-                                       if (value !== undef && value.length > 0)\r
-                                               css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\r
-                               }\r
-                       }\r
-\r
-                       return css;\r
-               }\r
-       };\r
-};\r
-\r
-(function(tinymce) {\r
-       var transitional = {}, boolAttrMap, blockElementsMap, shortEndedElementsMap, nonEmptyElementsMap, customElementsMap = {},\r
-               whiteSpaceElementsMap, selfClosingElementsMap, makeMap = tinymce.makeMap, each = tinymce.each;\r
-\r
-       function split(str, delim) {\r
-               return str.split(delim || ',');\r
-       };\r
-\r
-       function unpack(lookup, data) {\r
-               var key, elements = {};\r
-\r
-               function replace(value) {\r
-                       return value.replace(/[A-Z]+/g, function(key) {\r
-                               return replace(lookup[key]);\r
-                       });\r
-               };\r
-\r
-               // Unpack lookup\r
-               for (key in lookup) {\r
-                       if (lookup.hasOwnProperty(key))\r
-                               lookup[key] = replace(lookup[key]);\r
-               }\r
-\r
-               // Unpack and parse data into object map\r
-               replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) {\r
-                       attributes = split(attributes, '|');\r
-\r
-                       elements[name] = {\r
-                               attributes : makeMap(attributes),\r
-                               attributesOrder : attributes,\r
-                               children : makeMap(children, '|', {'#comment' : {}})\r
-                       }\r
-               });\r
-\r
-               return elements;\r
-       };\r
-\r
-       // Build a lookup table for block elements both lowercase and uppercase\r
-       blockElementsMap = 'h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,' + \r
-                                               'th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,' + \r
-                                               'noscript,menu,isindex,samp,header,footer,article,section,hgroup';\r
-       blockElementsMap = makeMap(blockElementsMap, ',', makeMap(blockElementsMap.toUpperCase()));\r
-\r
-       // This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size\r
-       transitional = unpack({\r
-               Z : 'H|K|N|O|P',\r
-               Y : 'X|form|R|Q',\r
-               ZG : 'E|span|width|align|char|charoff|valign',\r
-               X : 'p|T|div|U|W|isindex|fieldset|table',\r
-               ZF : 'E|align|char|charoff|valign',\r
-               W : 'pre|hr|blockquote|address|center|noframes',\r
-               ZE : 'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height',\r
-               ZD : '[E][S]',\r
-               U : 'ul|ol|dl|menu|dir',\r
-               ZC : 'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',\r
-               T : 'h1|h2|h3|h4|h5|h6',\r
-               ZB : 'X|S|Q',\r
-               S : 'R|P',\r
-               ZA : 'a|G|J|M|O|P',\r
-               R : 'a|H|K|N|O',\r
-               Q : 'noscript|P',\r
-               P : 'ins|del|script',\r
-               O : 'input|select|textarea|label|button',\r
-               N : 'M|L',\r
-               M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',\r
-               L : 'sub|sup',\r
-               K : 'J|I',\r
-               J : 'tt|i|b|u|s|strike',\r
-               I : 'big|small|font|basefont',\r
-               H : 'G|F',\r
-               G : 'br|span|bdo',\r
-               F : 'object|applet|img|map|iframe',\r
-               E : 'A|B|C',\r
-               D : 'accesskey|tabindex|onfocus|onblur',\r
-               C : 'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',\r
-               B : 'lang|xml:lang|dir',\r
-               A : 'id|class|style|title'\r
-       }, 'script[id|charset|type|language|src|defer|xml:space][]' + \r
-               'style[B|id|type|media|title|xml:space][]' + \r
-               'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]' + \r
-               'param[id|name|value|valuetype|type][]' + \r
-               'p[E|align][#|S]' + \r
-               'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]' + \r
-               'br[A|clear][]' + \r
-               'span[E][#|S]' + \r
-               'bdo[A|C|B][#|S]' + \r
-               'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]' + \r
-               'h1[E|align][#|S]' + \r
-               'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]' + \r
-               'map[B|C|A|name][X|form|Q|area]' + \r
-               'h2[E|align][#|S]' + \r
-               'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]' + \r
-               'h3[E|align][#|S]' + \r
-               'tt[E][#|S]' + \r
-               'i[E][#|S]' + \r
-               'b[E][#|S]' + \r
-               'u[E][#|S]' + \r
-               's[E][#|S]' + \r
-               'strike[E][#|S]' + \r
-               'big[E][#|S]' + \r
-               'small[E][#|S]' + \r
-               'font[A|B|size|color|face][#|S]' + \r
-               'basefont[id|size|color|face][]' + \r
-               'em[E][#|S]' + \r
-               'strong[E][#|S]' + \r
-               'dfn[E][#|S]' + \r
-               'code[E][#|S]' + \r
-               'q[E|cite][#|S]' + \r
-               'samp[E][#|S]' + \r
-               'kbd[E][#|S]' + \r
-               'var[E][#|S]' + \r
-               'cite[E][#|S]' + \r
-               'abbr[E][#|S]' + \r
-               'acronym[E][#|S]' + \r
-               'sub[E][#|S]' + \r
-               'sup[E][#|S]' + \r
-               'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]' + \r
-               'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]' + \r
-               'optgroup[E|disabled|label][option]' + \r
-               'option[E|selected|disabled|label|value][]' + \r
-               'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]' + \r
-               'label[E|for|accesskey|onfocus|onblur][#|S]' + \r
-               'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + \r
-               'h4[E|align][#|S]' + \r
-               'ins[E|cite|datetime][#|Y]' + \r
-               'h5[E|align][#|S]' + \r
-               'del[E|cite|datetime][#|Y]' + \r
-               'h6[E|align][#|S]' + \r
-               'div[E|align][#|Y]' + \r
-               'ul[E|type|compact][li]' + \r
-               'li[E|type|value][#|Y]' + \r
-               'ol[E|type|compact|start][li]' + \r
-               'dl[E|compact][dt|dd]' + \r
-               'dt[E][#|S]' + \r
-               'dd[E][#|Y]' + \r
-               'menu[E|compact][li]' + \r
-               'dir[E|compact][li]' + \r
-               'pre[E|width|xml:space][#|ZA]' + \r
-               'hr[E|align|noshade|size|width][]' + \r
-               'blockquote[E|cite][#|Y]' + \r
-               'address[E][#|S|p]' + \r
-               'center[E][#|Y]' + \r
-               'noframes[E][#|Y]' + \r
-               'isindex[A|B|prompt][]' + \r
-               'fieldset[E][#|legend|Y]' + \r
-               'legend[E|accesskey|align][#|S]' + \r
-               'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]' + \r
-               'caption[E|align][#|S]' + \r
-               'col[ZG][]' + \r
-               'colgroup[ZG][col]' + \r
-               'thead[ZF][tr]' + \r
-               'tr[ZF|bgcolor][th|td]' + \r
-               'th[E|ZE][#|Y]' + \r
-               'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]' + \r
-               'noscript[E][#|Y]' + \r
-               'td[E|ZE][#|Y]' + \r
-               'tfoot[ZF][tr]' + \r
-               'tbody[ZF][tr]' + \r
-               'area[E|D|shape|coords|href|nohref|alt|target][]' + \r
-               'base[id|href|target][]' + \r
-               'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]'\r
-       );\r
-\r
-       boolAttrMap = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,preload,autoplay,loop,controls');\r
-       shortEndedElementsMap = makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source');\r
-       nonEmptyElementsMap = tinymce.extend(makeMap('td,th,iframe,video,object'), shortEndedElementsMap);\r
-       whiteSpaceElementsMap = makeMap('pre,script,style');\r
-       selfClosingElementsMap = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');\r
-\r
-       tinymce.html.Schema = function(settings) {\r
-               var self = this, elements = {}, children = {}, patternElements = [], validStyles;\r
-\r
-               settings = settings || {};\r
-\r
-               // Allow all elements and attributes if verify_html is set to false\r
-               if (settings.verify_html === false)\r
-                       settings.valid_elements = '*[*]';\r
-\r
-               // Build styles list\r
-               if (settings.valid_styles) {\r
-                       validStyles = {};\r
-\r
-                       // Convert styles into a rule list\r
-                       each(settings.valid_styles, function(value, key) {\r
-                               validStyles[key] = tinymce.explode(value);\r
-                       });\r
-               }\r
-\r
-               // Converts a wildcard expression string to a regexp for example *a will become /.*a/.\r
-               function patternToRegExp(str) {\r
-                       return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\r
-               };\r
-\r
-               // Parses the specified valid_elements string and adds to the current rules\r
-               // This function is a bit hard to read since it's heavily optimized for speed\r
-               function addValidElements(valid_elements) {\r
-                       var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder,\r
-                               prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value,\r
-                               elementRuleRegExp = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,\r
-                               attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,\r
-                               hasPatternsRegExp = /[*?+]/;\r
-\r
-                       if (valid_elements) {\r
-                               // Split valid elements into an array with rules\r
-                               valid_elements = split(valid_elements);\r
-\r
-                               if (elements['@']) {\r
-                                       globalAttributes = elements['@'].attributes;\r
-                                       globalAttributesOrder = elements['@'].attributesOrder;\r
-                               }\r
-\r
-                               // Loop all rules\r
-                               for (ei = 0, el = valid_elements.length; ei < el; ei++) {\r
-                                       // Parse element rule\r
-                                       matches = elementRuleRegExp.exec(valid_elements[ei]);\r
-                                       if (matches) {\r
-                                               // Setup local names for matches\r
-                                               prefix = matches[1];\r
-                                               elementName = matches[2];\r
-                                               outputName = matches[3];\r
-                                               attrData = matches[4];\r
-\r
-                                               // Create new attributes and attributesOrder\r
-                                               attributes = {};\r
-                                               attributesOrder = [];\r
-\r
-                                               // Create the new element\r
-                                               element = {\r
-                                                       attributes : attributes,\r
-                                                       attributesOrder : attributesOrder\r
-                                               };\r
-\r
-                                               // Padd empty elements prefix\r
-                                               if (prefix === '#')\r
-                                                       element.paddEmpty = true;\r
-\r
-                                               // Remove empty elements prefix\r
-                                               if (prefix === '-')\r
-                                                       element.removeEmpty = true;\r
-\r
-                                               // Copy attributes from global rule into current rule\r
-                                               if (globalAttributes) {\r
-                                                       for (key in globalAttributes)\r
-                                                               attributes[key] = globalAttributes[key];\r
-\r
-                                                       attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\r
-                                               }\r
-\r
-                                               // Attributes defined\r
-                                               if (attrData) {\r
-                                                       attrData = split(attrData, '|');\r
-                                                       for (ai = 0, al = attrData.length; ai < al; ai++) {\r
-                                                               matches = attrRuleRegExp.exec(attrData[ai]);\r
-                                                               if (matches) {\r
-                                                                       attr = {};\r
-                                                                       attrType = matches[1];\r
-                                                                       attrName = matches[2].replace(/::/g, ':');\r
-                                                                       prefix = matches[3];\r
-                                                                       value = matches[4];\r
-\r
-                                                                       // Required\r
-                                                                       if (attrType === '!') {\r
-                                                                               element.attributesRequired = element.attributesRequired || [];\r
-                                                                               element.attributesRequired.push(attrName);\r
-                                                                               attr.required = true;\r
-                                                                       }\r
-\r
-                                                                       // Denied from global\r
-                                                                       if (attrType === '-') {\r
-                                                                               delete attributes[attrName];\r
-                                                                               attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1);\r
-                                                                               continue;\r
-                                                                       }\r
-\r
-                                                                       // Default value\r
-                                                                       if (prefix) {\r
-                                                                               // Default value\r
-                                                                               if (prefix === '=') {\r
-                                                                                       element.attributesDefault = element.attributesDefault || [];\r
-                                                                                       element.attributesDefault.push({name: attrName, value: value});\r
-                                                                                       attr.defaultValue = value;\r
-                                                                               }\r
-\r
-                                                                               // Forced value\r
-                                                                               if (prefix === ':') {\r
-                                                                                       element.attributesForced = element.attributesForced || [];\r
-                                                                                       element.attributesForced.push({name: attrName, value: value});\r
-                                                                                       attr.forcedValue = value;\r
-                                                                               }\r
-\r
-                                                                               // Required values\r
-                                                                               if (prefix === '<')\r
-                                                                                       attr.validValues = makeMap(value, '?');\r
-                                                                       }\r
-\r
-                                                                       // Check for attribute patterns\r
-                                                                       if (hasPatternsRegExp.test(attrName)) {\r
-                                                                               element.attributePatterns = element.attributePatterns || [];\r
-                                                                               attr.pattern = patternToRegExp(attrName);\r
-                                                                               element.attributePatterns.push(attr);\r
-                                                                       } else {\r
-                                                                               // Add attribute to order list if it doesn't already exist\r
-                                                                               if (!attributes[attrName])\r
-                                                                                       attributesOrder.push(attrName);\r
-\r
-                                                                               attributes[attrName] = attr;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Global rule, store away these for later usage\r
-                                               if (!globalAttributes && elementName == '@') {\r
-                                                       globalAttributes = attributes;\r
-                                                       globalAttributesOrder = attributesOrder;\r
-                                               }\r
-\r
-                                               // Handle substitute elements such as b/strong\r
-                                               if (outputName) {\r
-                                                       element.outputName = elementName;\r
-                                                       elements[outputName] = element;\r
-                                               }\r
-\r
-                                               // Add pattern or exact element\r
-                                               if (hasPatternsRegExp.test(elementName)) {\r
-                                                       element.pattern = patternToRegExp(elementName);\r
-                                                       patternElements.push(element);\r
-                                               } else\r
-                                                       elements[elementName] = element;\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function setValidElements(valid_elements) {\r
-                       elements = {};\r
-                       patternElements = [];\r
-\r
-                       addValidElements(valid_elements);\r
-\r
-                       each(transitional, function(element, name) {\r
-                               children[name] = element.children;\r
-                       });\r
-               };\r
-\r
-               // Adds custom non HTML elements to the schema\r
-               function addCustomElements(custom_elements) {\r
-                       var customElementRegExp = /^(~)?(.+)$/;\r
-\r
-                       if (custom_elements) {\r
-                               each(split(custom_elements), function(rule) {\r
-                                       var matches = customElementRegExp.exec(rule),\r
-                                               inline = matches[1] === '~',\r
-                                               cloneName = inline ? 'span' : 'div',\r
-                                               name = matches[2];\r
-\r
-                                       children[name] = children[cloneName];\r
-                                       customElementsMap[name] = cloneName;\r
-\r
-                                       // If it's not marked as inline then add it to valid block elements\r
-                                       if (!inline)\r
-                                               blockElementsMap[name] = {};\r
-\r
-                                       // Add custom elements at span/div positions\r
-                                       each(children, function(element, child) {\r
-                                               if (element[cloneName])\r
-                                                       element[name] = element[cloneName];\r
-                                       });\r
-                               });\r
-                       }\r
-               };\r
-\r
-               // Adds valid children to the schema object\r
-               function addValidChildren(valid_children) {\r
-                       var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;\r
-\r
-                       if (valid_children) {\r
-                               each(split(valid_children), function(rule) {\r
-                                       var matches = childRuleRegExp.exec(rule), parent, prefix;\r
-\r
-                                       if (matches) {\r
-                                               prefix = matches[1];\r
-\r
-                                               // Add/remove items from default\r
-                                               if (prefix)\r
-                                                       parent = children[matches[2]];\r
-                                               else\r
-                                                       parent = children[matches[2]] = {'#comment' : {}};\r
-\r
-                                               parent = children[matches[2]];\r
-\r
-                                               each(split(matches[3], '|'), function(child) {\r
-                                                       if (prefix === '-')\r
-                                                               delete parent[child];\r
-                                                       else\r
-                                                               parent[child] = {};\r
-                                               });\r
-                                       }\r
-                               });\r
-                       }\r
-               }\r
-\r
-               if (!settings.valid_elements) {\r
-                       // No valid elements defined then clone the elements from the transitional spec\r
-                       each(transitional, function(element, name) {\r
-                               elements[name] = {\r
-                                       attributes : element.attributes,\r
-                                       attributesOrder : element.attributesOrder\r
-                               };\r
-\r
-                               children[name] = element.children;\r
-                       });\r
-\r
-                       // Switch these\r
-                       each(split('strong/b,em/i'), function(item) {\r
-                               item = split(item, '/');\r
-                               elements[item[1]].outputName = item[0];\r
-                       });\r
-\r
-                       // Add default alt attribute for images\r
-                       elements.img.attributesDefault = [{name: 'alt', value: ''}];\r
-\r
-                       // Remove these if they are empty by default\r
-                       each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr'), function(name) {\r
-                               elements[name].removeEmpty = true;\r
-                       });\r
-\r
-                       // Padd these by default\r
-                       each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) {\r
-                               elements[name].paddEmpty = true;\r
-                       });\r
-               } else\r
-                       setValidElements(settings.valid_elements);\r
-\r
-               addCustomElements(settings.custom_elements);\r
-               addValidChildren(settings.valid_children);\r
-               addValidElements(settings.extended_valid_elements);\r
-\r
-               // Todo: Remove this when we fix list handling to be valid\r
-               addValidChildren('+ol[ul|ol],+ul[ul|ol]');\r
-\r
-               // Delete invalid elements\r
-               if (settings.invalid_elements) {\r
-                       tinymce.each(tinymce.explode(settings.invalid_elements), function(item) {\r
-                               if (elements[item])\r
-                                       delete elements[item];\r
-                       });\r
-               }\r
-\r
-               self.children = children;\r
-\r
-               self.styles = validStyles;\r
-\r
-               self.getBoolAttrs = function() {\r
-                       return boolAttrMap;\r
-               };\r
-\r
-               self.getBlockElements = function() {\r
-                       return blockElementsMap;\r
-               };\r
-\r
-               self.getShortEndedElements = function() {\r
-                       return shortEndedElementsMap;\r
-               };\r
-\r
-               self.getSelfClosingElements = function() {\r
-                       return selfClosingElementsMap;\r
-               };\r
-\r
-               self.getNonEmptyElements = function() {\r
-                       return nonEmptyElementsMap;\r
-               };\r
-\r
-               self.getWhiteSpaceElements = function() {\r
-                       return whiteSpaceElementsMap;\r
-               };\r
-\r
-               self.isValidChild = function(name, child) {\r
-                       var parent = children[name];\r
-\r
-                       return !!(parent && parent[child]);\r
-               };\r
-\r
-               self.getElementRule = function(name) {\r
-                       var element = elements[name], i;\r
-\r
-                       // Exact match found\r
-                       if (element)\r
-                               return element;\r
-\r
-                       // No exact match then try the patterns\r
-                       i = patternElements.length;\r
-                       while (i--) {\r
-                               element = patternElements[i];\r
-\r
-                               if (element.pattern.test(name))\r
-                                       return element;\r
-                       }\r
-               };\r
-\r
-               self.getCustomElements = function() {\r
-                       return customElementsMap;\r
-               };\r
-\r
-               self.addValidElements = addValidElements;\r
-\r
-               self.setValidElements = setValidElements;\r
-\r
-               self.addCustomElements = addCustomElements;\r
-\r
-               self.addValidChildren = addValidChildren;\r
-       };\r
-\r
-       // Expose boolMap and blockElementMap as static properties for usage in DOMUtils\r
-       tinymce.html.Schema.boolAttrMap = boolAttrMap;\r
-       tinymce.html.Schema.blockElementsMap = blockElementsMap;\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       tinymce.html.SaxParser = function(settings, schema) {\r
-               var self = this, noop = function() {};\r
-\r
-               settings = settings || {};\r
-               self.schema = schema = schema || new tinymce.html.Schema();\r
-\r
-               if (settings.fix_self_closing !== false)\r
-                       settings.fix_self_closing = true;\r
-\r
-               // Add handler functions from settings and setup default handlers\r
-               tinymce.each('comment cdata text start end pi doctype'.split(' '), function(name) {\r
-                       if (name)\r
-                               self[name] = settings[name] || noop;\r
-               });\r
-\r
-               self.parse = function(html) {\r
-                       var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name,\r
-                               shortEndedElements, fillAttrsMap, isShortEnded, validate, elementRule, isValidElement, attr, attribsValue,\r
-                               validAttributesMap, validAttributePatterns, attributesRequired, attributesDefault, attributesForced, selfClosing,\r
-                               tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0, decode = tinymce.html.Entities.decode, fixSelfClosing;\r
-\r
-                       function processEndTag(name) {\r
-                               var pos, i;\r
-\r
-                               // Find position of parent of the same type\r
-                               pos = stack.length;\r
-                               while (pos--) {\r
-                                       if (stack[pos].name === name)\r
-                                               break;                                          \r
-                               }\r
-\r
-                               // Found parent\r
-                               if (pos >= 0) {\r
-                                       // Close all the open elements\r
-                                       for (i = stack.length - 1; i >= pos; i--) {\r
-                                               name = stack[i];\r
-\r
-                                               if (name.valid)\r
-                                                       self.end(name.name);\r
-                                       }\r
-\r
-                                       // Remove the open elements from the stack\r
-                                       stack.length = pos;\r
-                               }\r
-                       };\r
-\r
-                       // Precompile RegExps and map objects\r
-                       tokenRegExp = new RegExp('<(?:' +\r
-                               '(?:!--([\\w\\W]*?)-->)|' + // Comment\r
-                               '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA\r
-                               '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE\r
-                               '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI\r
-                               '(?:\\/([^>]+)>)|' + // End element\r
-                               '(?:([^\\s\\/<>]+)\\s*((?:[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*)>)' + // Start element\r
-                       ')', 'g');\r
-\r
-                       attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;\r
-                       specialElements = {\r
-                               'script' : /<\/script[^>]*>/gi,\r
-                               'style' : /<\/style[^>]*>/gi,\r
-                               'noscript' : /<\/noscript[^>]*>/gi\r
-                       };\r
-\r
-                       // Setup lookup tables for empty elements and boolean attributes\r
-                       shortEndedElements = schema.getShortEndedElements();\r
-                       selfClosing = schema.getSelfClosingElements();\r
-                       fillAttrsMap = schema.getBoolAttrs();\r
-                       validate = settings.validate;\r
-                       fixSelfClosing = settings.fix_self_closing;\r
-\r
-                       while (matches = tokenRegExp.exec(html)) {\r
-                               // Text\r
-                               if (index < matches.index)\r
-                                       self.text(decode(html.substr(index, matches.index - index)));\r
-\r
-                               if (value = matches[6]) { // End element\r
-                                       processEndTag(value.toLowerCase());\r
-                               } else if (value = matches[7]) { // Start element\r
-                                       value = value.toLowerCase();\r
-                                       isShortEnded = value in shortEndedElements;\r
-\r
-                                       // Is self closing tag for example an <li> after an open <li>\r
-                                       if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value)\r
-                                               processEndTag(value);\r
-\r
-                                       // Validate element\r
-                                       if (!validate || (elementRule = schema.getElementRule(value))) {\r
-                                               isValidElement = true;\r
-\r
-                                               // Grab attributes map and patters when validation is enabled\r
-                                               if (validate) {\r
-                                                       validAttributesMap = elementRule.attributes;\r
-                                                       validAttributePatterns = elementRule.attributePatterns;\r
-                                               }\r
-\r
-                                               // Parse attributes\r
-                                               if (attribsValue = matches[8]) {\r
-                                                       attrList = [];\r
-                                                       attrList.map = {};\r
-\r
-                                                       attribsValue.replace(attrRegExp, function(match, name, value, val2, val3) {\r
-                                                               var attrRule, i;\r
-\r
-                                                               name = name.toLowerCase();\r
-                                                               value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute\r
-\r
-                                                               // Validate name and value\r
-                                                               if (validate && name.indexOf('data-') !== 0) {\r
-                                                                       attrRule = validAttributesMap[name];\r
-\r
-                                                                       // Find rule by pattern matching\r
-                                                                       if (!attrRule && validAttributePatterns) {\r
-                                                                               i = validAttributePatterns.length;\r
-                                                                               while (i--) {\r
-                                                                                       attrRule = validAttributePatterns[i];\r
-                                                                                       if (attrRule.pattern.test(name))\r
-                                                                                               break;\r
-                                                                               }\r
-\r
-                                                                               // No rule matched\r
-                                                                               if (i === -1)\r
-                                                                                       attrRule = null;\r
-                                                                       }\r
-\r
-                                                                       // No attribute rule found\r
-                                                                       if (!attrRule)\r
-                                                                               return;\r
-\r
-                                                                       // Validate value\r
-                                                                       if (attrRule.validValues && !(value in attrRule.validValues))\r
-                                                                               return;\r
-                                                               }\r
-\r
-                                                               // Add attribute to list and map\r
-                                                               attrList.map[name] = value;\r
-                                                               attrList.push({\r
-                                                                       name: name,\r
-                                                                       value: value\r
-                                                               });\r
-                                                       });\r
-                                               } else {\r
-                                                       attrList = [];\r
-                                                       attrList.map = {};\r
-                                               }\r
-\r
-                                               // Process attributes if validation is enabled\r
-                                               if (validate) {\r
-                                                       attributesRequired = elementRule.attributesRequired;\r
-                                                       attributesDefault = elementRule.attributesDefault;\r
-                                                       attributesForced = elementRule.attributesForced;\r
-\r
-                                                       // Handle forced attributes\r
-                                                       if (attributesForced) {\r
-                                                               i = attributesForced.length;\r
-                                                               while (i--) {\r
-                                                                       attr = attributesForced[i];\r
-                                                                       name = attr.name;\r
-                                                                       attrValue = attr.value;\r
-\r
-                                                                       if (attrValue === '{$uid}')\r
-                                                                               attrValue = 'mce_' + idCount++;\r
-\r
-                                                                       attrList.map[name] = attrValue;\r
-                                                                       attrList.push({name: name, value: attrValue});\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       // Handle default attributes\r
-                                                       if (attributesDefault) {\r
-                                                               i = attributesDefault.length;\r
-                                                               while (i--) {\r
-                                                                       attr = attributesDefault[i];\r
-                                                                       name = attr.name;\r
-\r
-                                                                       if (!(name in attrList.map)) {\r
-                                                                               attrValue = attr.value;\r
-\r
-                                                                               if (attrValue === '{$uid}')\r
-                                                                                       attrValue = 'mce_' + idCount++;\r
-\r
-                                                                               attrList.map[name] = attrValue;\r
-                                                                               attrList.push({name: name, value: attrValue});\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       // Handle required attributes\r
-                                                       if (attributesRequired) {\r
-                                                               i = attributesRequired.length;\r
-                                                               while (i--) {\r
-                                                                       if (attributesRequired[i] in attrList.map)\r
-                                                                               break;\r
-                                                               }\r
-\r
-                                                               // None of the required attributes where found\r
-                                                               if (i === -1)\r
-                                                                       isValidElement = false;\r
-                                                       }\r
-\r
-                                                       // Invalidate element if it's marked as bogus\r
-                                                       if (attrList.map['data-mce-bogus'])\r
-                                                               isValidElement = false;\r
-                                               }\r
-\r
-                                               if (isValidElement)\r
-                                                       self.start(value, attrList, isShortEnded);\r
-                                       } else\r
-                                               isValidElement = false;\r
-\r
-                                       // Treat script, noscript and style a bit different since they may include code that looks like elements\r
-                                       if (endRegExp = specialElements[value]) {\r
-                                               endRegExp.lastIndex = index = matches.index + matches[0].length;\r
-\r
-                                               if (matches = endRegExp.exec(html)) {\r
-                                                       if (isValidElement)\r
-                                                               text = html.substr(index, matches.index - index);\r
-\r
-                                                       index = matches.index + matches[0].length;\r
-                                               } else {\r
-                                                       text = html.substr(index);\r
-                                                       index = html.length;\r
-                                               }\r
-\r
-                                               if (isValidElement && text.length > 0)\r
-                                                       self.text(text, true);\r
-\r
-                                               if (isValidElement)\r
-                                                       self.end(value);\r
-\r
-                                               tokenRegExp.lastIndex = index;\r
-                                               continue;\r
-                                       }\r
-\r
-                                       // Push value on to stack\r
-                                       if (!isShortEnded) {\r
-                                               if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1)\r
-                                                       stack.push({name: value, valid: isValidElement});\r
-                                               else if (isValidElement)\r
-                                                       self.end(value);\r
-                                       }\r
-                               } else if (value = matches[1]) { // Comment\r
-                                       self.comment(value);\r
-                               } else if (value = matches[2]) { // CDATA\r
-                                       self.cdata(value);\r
-                               } else if (value = matches[3]) { // DOCTYPE\r
-                                       self.doctype(value);\r
-                               } else if (value = matches[4]) { // PI\r
-                                       self.pi(value, matches[5]);\r
-                               }\r
-\r
-                               index = matches.index + matches[0].length;\r
-                       }\r
-\r
-                       // Text\r
-                       if (index < html.length)\r
-                               self.text(decode(html.substr(index)));\r
-\r
-                       // Close any open elements\r
-                       for (i = stack.length - 1; i >= 0; i--) {\r
-                               value = stack[i];\r
-\r
-                               if (value.valid)\r
-                                       self.end(value.name);\r
-                       }\r
-               };\r
-       }\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = {\r
-               '#text' : 3,\r
-               '#comment' : 8,\r
-               '#cdata' : 4,\r
-               '#pi' : 7,\r
-               '#doctype' : 10,\r
-               '#document-fragment' : 11\r
-       };\r
-\r
-       // Walks the tree left/right\r
-       function walk(node, root_node, prev) {\r
-               var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next';\r
-\r
-               // Walk into nodes if it has a start\r
-               if (node[startName])\r
-                       return node[startName];\r
-\r
-               // Return the sibling if it has one\r
-               if (node !== root_node) {\r
-                       sibling = node[siblingName];\r
-\r
-                       if (sibling)\r
-                               return sibling;\r
-\r
-                       // Walk up the parents to look for siblings\r
-                       for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) {\r
-                               sibling = parent[siblingName];\r
-\r
-                               if (sibling)\r
-                                       return sibling;\r
-                       }\r
-               }\r
-       };\r
-\r
-       function Node(name, type) {\r
-               this.name = name;\r
-               this.type = type;\r
-\r
-               if (type === 1) {\r
-                       this.attributes = [];\r
-                       this.attributes.map = {};\r
-               }\r
-       }\r
-\r
-       tinymce.extend(Node.prototype, {\r
-               replace : function(node) {\r
-                       var self = this;\r
-\r
-                       if (node.parent)\r
-                               node.remove();\r
-\r
-                       self.insert(node, self);\r
-                       self.remove();\r
-\r
-                       return self;\r
-               },\r
-\r
-               attr : function(name, value) {\r
-                       var self = this, attrs, i, undef;\r
-\r
-                       if (typeof name !== "string") {\r
-                               for (i in name)\r
-                                       self.attr(i, name[i]);\r
-\r
-                               return self;\r
-                       }\r
-\r
-                       if (attrs = self.attributes) {\r
-                               if (value !== undef) {\r
-                                       // Remove attribute\r
-                                       if (value === null) {\r
-                                               if (name in attrs.map) {\r
-                                                       delete attrs.map[name];\r
-\r
-                                                       i = attrs.length;\r
-                                                       while (i--) {\r
-                                                               if (attrs[i].name === name) {\r
-                                                                       attrs = attrs.splice(i, 1);\r
-                                                                       return self;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               return self;\r
-                                       }\r
-\r
-                                       // Set attribute\r
-                                       if (name in attrs.map) {\r
-                                               // Set attribute\r
-                                               i = attrs.length;\r
-                                               while (i--) {\r
-                                                       if (attrs[i].name === name) {\r
-                                                               attrs[i].value = value;\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                       } else\r
-                                               attrs.push({name: name, value: value});\r
-\r
-                                       attrs.map[name] = value;\r
-\r
-                                       return self;\r
-                               } else {\r
-                                       return attrs.map[name];\r
-                               }\r
-                       }\r
-               },\r
-\r
-               clone : function() {\r
-                       var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs;\r
-\r
-                       // Clone element attributes\r
-                       if (selfAttrs = self.attributes) {\r
-                               cloneAttrs = [];\r
-                               cloneAttrs.map = {};\r
-\r
-                               for (i = 0, l = selfAttrs.length; i < l; i++) {\r
-                                       selfAttr = selfAttrs[i];\r
-\r
-                                       // Clone everything except id\r
-                                       if (selfAttr.name !== 'id') {\r
-                                               cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value};\r
-                                               cloneAttrs.map[selfAttr.name] = selfAttr.value;\r
-                                       }\r
-                               }\r
-\r
-                               clone.attributes = cloneAttrs;\r
-                       }\r
-\r
-                       clone.value = self.value;\r
-                       clone.shortEnded = self.shortEnded;\r
-\r
-                       return clone;\r
-               },\r
-\r
-               wrap : function(wrapper) {\r
-                       var self = this;\r
-\r
-                       self.parent.insert(wrapper, self);\r
-                       wrapper.append(self);\r
-\r
-                       return self;\r
-               },\r
-\r
-               unwrap : function() {\r
-                       var self = this, node, next;\r
-\r
-                       for (node = self.firstChild; node; ) {\r
-                               next = node.next;\r
-                               self.insert(node, self, true);\r
-                               node = next;\r
-                       }\r
-\r
-                       self.remove();\r
-               },\r
-\r
-               remove : function() {\r
-                       var self = this, parent = self.parent, next = self.next, prev = self.prev;\r
-\r
-                       if (parent) {\r
-                               if (parent.firstChild === self) {\r
-                                       parent.firstChild = next;\r
-\r
-                                       if (next)\r
-                                               next.prev = null;\r
-                               } else {\r
-                                       prev.next = next;\r
-                               }\r
-\r
-                               if (parent.lastChild === self) {\r
-                                       parent.lastChild = prev;\r
-\r
-                                       if (prev)\r
-                                               prev.next = null;\r
-                               } else {\r
-                                       next.prev = prev;\r
-                               }\r
-\r
-                               self.parent = self.next = self.prev = null;\r
-                       }\r
-\r
-                       return self;\r
-               },\r
-\r
-               append : function(node) {\r
-                       var self = this, last;\r
-\r
-                       if (node.parent)\r
-                               node.remove();\r
-\r
-                       last = self.lastChild;\r
-                       if (last) {\r
-                               last.next = node;\r
-                               node.prev = last;\r
-                               self.lastChild = node;\r
-                       } else\r
-                               self.lastChild = self.firstChild = node;\r
-\r
-                       node.parent = self;\r
-\r
-                       return node;\r
-               },\r
-\r
-               insert : function(node, ref_node, before) {\r
-                       var parent;\r
-\r
-                       if (node.parent)\r
-                               node.remove();\r
-\r
-                       parent = ref_node.parent || this;\r
-\r
-                       if (before) {\r
-                               if (ref_node === parent.firstChild)\r
-                                       parent.firstChild = node;\r
-                               else\r
-                                       ref_node.prev.next = node;\r
-\r
-                               node.prev = ref_node.prev;\r
-                               node.next = ref_node;\r
-                               ref_node.prev = node;\r
-                       } else {\r
-                               if (ref_node === parent.lastChild)\r
-                                       parent.lastChild = node;\r
-                               else\r
-                                       ref_node.next.prev = node;\r
-\r
-                               node.next = ref_node.next;\r
-                               node.prev = ref_node;\r
-                               ref_node.next = node;\r
-                       }\r
-\r
-                       node.parent = parent;\r
-\r
-                       return node;\r
-               },\r
-\r
-               getAll : function(name) {\r
-                       var self = this, node, collection = [];\r
-\r
-                       for (node = self.firstChild; node; node = walk(node, self)) {\r
-                               if (node.name === name)\r
-                                       collection.push(node);\r
-                       }\r
-\r
-                       return collection;\r
-               },\r
-\r
-               empty : function() {\r
-                       var self = this, nodes, i, node;\r
-\r
-                       // Remove all children\r
-                       if (self.firstChild) {\r
-                               nodes = [];\r
-\r
-                               // Collect the children\r
-                               for (node = self.firstChild; node; node = walk(node, self))\r
-                                       nodes.push(node);\r
-\r
-                               // Remove the children\r
-                               i = nodes.length;\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-                                       node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\r
-                               }\r
-                       }\r
-\r
-                       self.firstChild = self.lastChild = null;\r
-\r
-                       return self;\r
-               },\r
-\r
-               isEmpty : function(elements) {\r
-                       var self = this, node = self.firstChild, i, name;\r
-\r
-                       if (node) {\r
-                               do {\r
-                                       if (node.type === 1) {\r
-                                               // Ignore bogus elements\r
-                                               if (node.attributes.map['data-mce-bogus'])\r
-                                                       continue;\r
-\r
-                                               // Keep empty elements like <img />\r
-                                               if (elements[node.name])\r
-                                                       return false;\r
-\r
-                                               // Keep elements with data attributes or name attribute like <a name="1"></a>\r
-                                               i = node.attributes.length;\r
-                                               while (i--) {\r
-                                                       name = node.attributes[i].name;\r
-                                                       if (name === "name" || name.indexOf('data-') === 0)\r
-                                                               return false;\r
-                                               }\r
-                                       }\r
-\r
-                                       // Keep non whitespace text nodes\r
-                                       if ((node.type === 3 && !whiteSpaceRegExp.test(node.value)))\r
-                                               return false;\r
-                               } while (node = walk(node, self));\r
-                       }\r
-\r
-                       return true;\r
-               },\r
-\r
-               walk : function(prev) {\r
-                       return walk(this, null, prev);\r
-               }\r
-       });\r
-\r
-       tinymce.extend(Node, {\r
-               create : function(name, attrs) {\r
-                       var node, attrName;\r
-\r
-                       // Create node\r
-                       node = new Node(name, typeLookup[name] || 1);\r
-\r
-                       // Add attributes if needed\r
-                       if (attrs) {\r
-                               for (attrName in attrs)\r
-                                       node.attr(attrName, attrs[attrName]);\r
-                       }\r
-\r
-                       return node;\r
-               }\r
-       });\r
-\r
-       tinymce.html.Node = Node;\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var Node = tinymce.html.Node;\r
-\r
-       tinymce.html.DomParser = function(settings, schema) {\r
-               var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {};\r
-\r
-               settings = settings || {};\r
-               settings.validate = "validate" in settings ? settings.validate : true;\r
-               settings.root_name = settings.root_name || 'body';\r
-               self.schema = schema = schema || new tinymce.html.Schema();\r
-\r
-               function fixInvalidChildren(nodes) {\r
-                       var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i,\r
-                               childClone, nonEmptyElements, nonSplitableElements, sibling, nextNode;\r
-\r
-                       nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table');\r
-                       nonEmptyElements = schema.getNonEmptyElements();\r
-\r
-                       for (ni = 0; ni < nodes.length; ni++) {\r
-                               node = nodes[ni];\r
-\r
-                               // Already removed\r
-                               if (!node.parent)\r
-                                       continue;\r
-\r
-                               // Get list of all parent nodes until we find a valid parent to stick the child into\r
-                               parents = [node];\r
-                               for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent)\r
-                                       parents.push(parent);\r
-\r
-                               // Found a suitable parent\r
-                               if (parent && parents.length > 1) {\r
-                                       // Reverse the array since it makes looping easier\r
-                                       parents.reverse();\r
-\r
-                                       // Clone the related parent and insert that after the moved node\r
-                                       newParent = currentNode = self.filterNode(parents[0].clone());\r
-\r
-                                       // Start cloning and moving children on the left side of the target node\r
-                                       for (i = 0; i < parents.length - 1; i++) {\r
-                                               if (schema.isValidChild(currentNode.name, parents[i].name)) {\r
-                                                       tempNode = self.filterNode(parents[i].clone());\r
-                                                       currentNode.append(tempNode);\r
-                                               } else\r
-                                                       tempNode = currentNode;\r
-\r
-                                               for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) {\r
-                                                       nextNode = childNode.next;\r
-                                                       tempNode.append(childNode);\r
-                                                       childNode = nextNode;\r
-                                               }\r
-\r
-                                               currentNode = tempNode;\r
-                                       }\r
-\r
-                                       if (!newParent.isEmpty(nonEmptyElements)) {\r
-                                               parent.insert(newParent, parents[0], true);\r
-                                               parent.insert(node, newParent);\r
-                                       } else {\r
-                                               parent.insert(node, parents[0], true);\r
-                                       }\r
-\r
-                                       // Check if the element is empty by looking through it's contents and special treatment for <p><br /></p>\r
-                                       parent = parents[0];\r
-                                       if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') {\r
-                                               parent.empty().remove();\r
-                                       }\r
-                               } else if (node.parent) {\r
-                                       // If it's an LI try to find a UL/OL for it or wrap it\r
-                                       if (node.name === 'li') {\r
-                                               sibling = node.prev;\r
-                                               if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\r
-                                                       sibling.append(node);\r
-                                                       continue;\r
-                                               }\r
-\r
-                                               sibling = node.next;\r
-                                               if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\r
-                                                       sibling.insert(node, sibling.firstChild, true);\r
-                                                       continue;\r
-                                               }\r
-\r
-                                               node.wrap(self.filterNode(new Node('ul', 1)));\r
-                                               continue;\r
-                                       }\r
-\r
-                                       // Try wrapping the element in a DIV\r
-                                       if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\r
-                                               node.wrap(self.filterNode(new Node('div', 1)));\r
-                                       } else {\r
-                                               // We failed wrapping it, then remove or unwrap it\r
-                                               if (node.name === 'style' || node.name === 'script')\r
-                                                       node.empty().remove();\r
-                                               else\r
-                                                       node.unwrap();\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-\r
-               self.filterNode = function(node) {\r
-                       var i, name, list;\r
-\r
-                       // Run element filters\r
-                       if (name in nodeFilters) {\r
-                               list = matchedNodes[name];\r
-\r
-                               if (list)\r
-                                       list.push(node);\r
-                               else\r
-                                       matchedNodes[name] = [node];\r
-                       }\r
-\r
-                       // Run attribute filters\r
-                       i = attributeFilters.length;\r
-                       while (i--) {\r
-                               name = attributeFilters[i].name;\r
-\r
-                               if (name in node.attributes.map) {\r
-                                       list = matchedAttributes[name];\r
-\r
-                                       if (list)\r
-                                               list.push(node);\r
-                                       else\r
-                                               matchedAttributes[name] = [node];\r
-                               }\r
-                       }\r
-\r
-                       return node;\r
-               };\r
-\r
-               self.addNodeFilter = function(name, callback) {\r
-                       tinymce.each(tinymce.explode(name), function(name) {\r
-                               var list = nodeFilters[name];\r
-\r
-                               if (!list)\r
-                                       nodeFilters[name] = list = [];\r
-\r
-                               list.push(callback);\r
-                       });\r
-               };\r
-\r
-               self.addAttributeFilter = function(name, callback) {\r
-                       tinymce.each(tinymce.explode(name), function(name) {\r
-                               var i;\r
-\r
-                               for (i = 0; i < attributeFilters.length; i++) {\r
-                                       if (attributeFilters[i].name === name) {\r
-                                               attributeFilters[i].callbacks.push(callback);\r
-                                               return;\r
-                                       }\r
-                               }\r
-\r
-                               attributeFilters.push({name: name, callbacks: [callback]});\r
-                       });\r
-               };\r
-\r
-               self.parse = function(html, args) {\r
-                       var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate,\r
-                               blockElements, startWhiteSpaceRegExp, invalidChildren = [],\r
-                               endWhiteSpaceRegExp, allWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;\r
-\r
-                       args = args || {};\r
-                       matchedNodes = {};\r
-                       matchedAttributes = {};\r
-                       blockElements = tinymce.extend(tinymce.makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\r
-                       nonEmptyElements = schema.getNonEmptyElements();\r
-                       children = schema.children;\r
-                       validate = settings.validate;\r
-                       rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block;\r
-\r
-                       whiteSpaceElements = schema.getWhiteSpaceElements();\r
-                       startWhiteSpaceRegExp = /^[ \t\r\n]+/;\r
-                       endWhiteSpaceRegExp = /[ \t\r\n]+$/;\r
-                       allWhiteSpaceRegExp = /[ \t\r\n]+/g;\r
-\r
-                       function addRootBlocks() {\r
-                               var node = rootNode.firstChild, next, rootBlockNode;\r
-\r
-                               while (node) {\r
-                                       next = node.next;\r
-\r
-                                       if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) {\r
-                                               if (!rootBlockNode) {\r
-                                                       // Create a new root block element\r
-                                                       rootBlockNode = createNode(rootBlockName, 1);\r
-                                                       rootNode.insert(rootBlockNode, node);\r
-                                                       rootBlockNode.append(node);\r
-                                               } else\r
-                                                       rootBlockNode.append(node);\r
-                                       } else {\r
-                                               rootBlockNode = null;\r
-                                       }\r
-\r
-                                       node = next;\r
-                               };\r
-                       };\r
-\r
-                       function createNode(name, type) {\r
-                               var node = new Node(name, type), list;\r
-\r
-                               if (name in nodeFilters) {\r
-                                       list = matchedNodes[name];\r
-\r
-                                       if (list)\r
-                                               list.push(node);\r
-                                       else\r
-                                               matchedNodes[name] = [node];\r
-                               }\r
-\r
-                               return node;\r
-                       };\r
-\r
-                       function removeWhitespaceBefore(node) {\r
-                               var textNode, textVal, sibling;\r
-\r
-                               for (textNode = node.prev; textNode && textNode.type === 3; ) {\r
-                                       textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\r
-\r
-                                       if (textVal.length > 0) {\r
-                                               textNode.value = textVal;\r
-                                               textNode = textNode.prev;\r
-                                       } else {\r
-                                               sibling = textNode.prev;\r
-                                               textNode.remove();\r
-                                               textNode = sibling;\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       parser = new tinymce.html.SaxParser({\r
-                               validate : validate,\r
-                               fix_self_closing : !validate, // Let the DOM parser handle <li> in <li> or <p> in <p> for better results\r
-\r
-                               cdata: function(text) {\r
-                                       node.append(createNode('#cdata', 4)).value = text;\r
-                               },\r
-\r
-                               text: function(text, raw) {\r
-                                       var textNode;\r
-\r
-                                       // Trim all redundant whitespace on non white space elements\r
-                                       if (!whiteSpaceElements[node.name]) {\r
-                                               text = text.replace(allWhiteSpaceRegExp, ' ');\r
-\r
-                                               if (node.lastChild && blockElements[node.lastChild.name])\r
-                                                       text = text.replace(startWhiteSpaceRegExp, '');\r
-                                       }\r
-\r
-                                       // Do we need to create the node\r
-                                       if (text.length !== 0) {\r
-                                               textNode = createNode('#text', 3);\r
-                                               textNode.raw = !!raw;\r
-                                               node.append(textNode).value = text;\r
-                                       }\r
-                               },\r
-\r
-                               comment: function(text) {\r
-                                       node.append(createNode('#comment', 8)).value = text;\r
-                               },\r
-\r
-                               pi: function(name, text) {\r
-                                       node.append(createNode(name, 7)).value = text;\r
-                                       removeWhitespaceBefore(node);\r
-                               },\r
-\r
-                               doctype: function(text) {\r
-                                       var newNode;\r
-               \r
-                                       newNode = node.append(createNode('#doctype', 10));\r
-                                       newNode.value = text;\r
-                                       removeWhitespaceBefore(node);\r
-                               },\r
-\r
-                               start: function(name, attrs, empty) {\r
-                                       var newNode, attrFiltersLen, elementRule, textNode, attrName, text, sibling, parent;\r
-\r
-                                       elementRule = validate ? schema.getElementRule(name) : {};\r
-                                       if (elementRule) {\r
-                                               newNode = createNode(elementRule.outputName || name, 1);\r
-                                               newNode.attributes = attrs;\r
-                                               newNode.shortEnded = empty;\r
-\r
-                                               node.append(newNode);\r
-\r
-                                               // Check if node is valid child of the parent node is the child is\r
-                                               // unknown we don't collect it since it's probably a custom element\r
-                                               parent = children[node.name];\r
-                                               if (parent && children[newNode.name] && !parent[newNode.name])\r
-                                                       invalidChildren.push(newNode);\r
-\r
-                                               attrFiltersLen = attributeFilters.length;\r
-                                               while (attrFiltersLen--) {\r
-                                                       attrName = attributeFilters[attrFiltersLen].name;\r
-\r
-                                                       if (attrName in attrs.map) {\r
-                                                               list = matchedAttributes[attrName];\r
-\r
-                                                               if (list)\r
-                                                                       list.push(newNode);\r
-                                                               else\r
-                                                                       matchedAttributes[attrName] = [newNode];\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Trim whitespace before block\r
-                                               if (blockElements[name])\r
-                                                       removeWhitespaceBefore(newNode);\r
-\r
-                                               // Change current node if the element wasn't empty i.e not <br /> or <img />\r
-                                               if (!empty)\r
-                                                       node = newNode;\r
-                                       }\r
-                               },\r
-\r
-                               end: function(name) {\r
-                                       var textNode, elementRule, text, sibling, tempNode;\r
-\r
-                                       elementRule = validate ? schema.getElementRule(name) : {};\r
-                                       if (elementRule) {\r
-                                               if (blockElements[name]) {\r
-                                                       if (!whiteSpaceElements[node.name]) {\r
-                                                               // Trim whitespace at beginning of block\r
-                                                               for (textNode = node.firstChild; textNode && textNode.type === 3; ) {\r
-                                                                       text = textNode.value.replace(startWhiteSpaceRegExp, '');\r
-\r
-                                                                       if (text.length > 0) {\r
-                                                                               textNode.value = text;\r
-                                                                               textNode = textNode.next;\r
-                                                                       } else {\r
-                                                                               sibling = textNode.next;\r
-                                                                               textNode.remove();\r
-                                                                               textNode = sibling;\r
-                                                                       }\r
-                                                               }\r
-\r
-                                                               // Trim whitespace at end of block\r
-                                                               for (textNode = node.lastChild; textNode && textNode.type === 3; ) {\r
-                                                                       text = textNode.value.replace(endWhiteSpaceRegExp, '');\r
-\r
-                                                                       if (text.length > 0) {\r
-                                                                               textNode.value = text;\r
-                                                                               textNode = textNode.prev;\r
-                                                                       } else {\r
-                                                                               sibling = textNode.prev;\r
-                                                                               textNode.remove();\r
-                                                                               textNode = sibling;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       // Trim start white space\r
-                                                       textNode = node.prev;\r
-                                                       if (textNode && textNode.type === 3) {\r
-                                                               text = textNode.value.replace(startWhiteSpaceRegExp, '');\r
-\r
-                                                               if (text.length > 0)\r
-                                                                       textNode.value = text;\r
-                                                               else\r
-                                                                       textNode.remove();\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Handle empty nodes\r
-                                               if (elementRule.removeEmpty || elementRule.paddEmpty) {\r
-                                                       if (node.isEmpty(nonEmptyElements)) {\r
-                                                               if (elementRule.paddEmpty)\r
-                                                                       node.empty().append(new Node('#text', '3')).value = '\u00a0';\r
-                                                               else {\r
-                                                                       // Leave nodes that have a name like <a name="name">\r
-                                                                       if (!node.attributes.map.name) {\r
-                                                                               tempNode = node.parent;\r
-                                                                               node.empty().remove();\r
-                                                                               node = tempNode;\r
-                                                                               return;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               node = node.parent;\r
-                                       }\r
-                               }\r
-                       }, schema);\r
-\r
-                       rootNode = node = new Node(args.context || settings.root_name, 11);\r
-\r
-                       parser.parse(html);\r
-\r
-                       // Fix invalid children or report invalid children in a contextual parsing\r
-                       if (validate && invalidChildren.length) {\r
-                               if (!args.context)\r
-                                       fixInvalidChildren(invalidChildren);\r
-                               else\r
-                                       args.invalid = true;\r
-                       }\r
-\r
-                       // Wrap nodes in the root into block elements if the root is body\r
-                       if (rootBlockName && rootNode.name == 'body')\r
-                               addRootBlocks();\r
-\r
-                       // Run filters only when the contents is valid\r
-                       if (!args.invalid) {\r
-                               // Run node filters\r
-                               for (name in matchedNodes) {\r
-                                       list = nodeFilters[name];\r
-                                       nodes = matchedNodes[name];\r
-\r
-                                       // Remove already removed children\r
-                                       fi = nodes.length;\r
-                                       while (fi--) {\r
-                                               if (!nodes[fi].parent)\r
-                                                       nodes.splice(fi, 1);\r
-                                       }\r
-\r
-                                       for (i = 0, l = list.length; i < l; i++)\r
-                                               list[i](nodes, name, args);\r
-                               }\r
-\r
-                               // Run attribute filters\r
-                               for (i = 0, l = attributeFilters.length; i < l; i++) {\r
-                                       list = attributeFilters[i];\r
-\r
-                                       if (list.name in matchedAttributes) {\r
-                                               nodes = matchedAttributes[list.name];\r
-\r
-                                               // Remove already removed children\r
-                                               fi = nodes.length;\r
-                                               while (fi--) {\r
-                                                       if (!nodes[fi].parent)\r
-                                                               nodes.splice(fi, 1);\r
-                                               }\r
-\r
-                                               for (fi = 0, fl = list.callbacks.length; fi < fl; fi++)\r
-                                                       list.callbacks[fi](nodes, list.name, args);\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       return rootNode;\r
-               };\r
-\r
-               // Remove <br> at end of block elements Gecko and WebKit injects BR elements to\r
-               // make it possible to place the caret inside empty blocks. This logic tries to remove\r
-               // these elements and keep br elements that where intended to be there intact\r
-               if (settings.remove_trailing_brs) {\r
-                       self.addNodeFilter('br', function(nodes, name) {\r
-                               var i, l = nodes.length, node, blockElements = schema.getBlockElements(),\r
-                                       nonEmptyElements = schema.getNonEmptyElements(), parent, prev, prevName;\r
-\r
-                               // Remove brs from body element as well\r
-                               blockElements.body = 1;\r
-\r
-                               // Must loop forwards since it will otherwise remove all brs in <p>a<br><br><br></p>\r
-                               for (i = 0; i < l; i++) {\r
-                                       node = nodes[i];\r
-                                       parent = node.parent;\r
-\r
-                                       if (blockElements[node.parent.name] && node === parent.lastChild) {\r
-                                               // Loop all nodes to the right of the current node and check for other BR elements\r
-                                               // excluding bookmarks since they are invisible\r
-                                               prev = node.prev;\r
-                                               while (prev) {\r
-                                                       prevName = prev.name;\r
-\r
-                                                       // Ignore bookmarks\r
-                                                       if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') {\r
-                                                               // Found a non BR element\r
-                                                               if (prevName !== "br")\r
-                                                                       break;\r
-       \r
-                                                               // Found another br it's a <br><br> structure then don't remove anything\r
-                                                               if (prevName === 'br') {\r
-                                                                       node = null;\r
-                                                                       break;\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       prev = prev.prev;\r
-                                               }\r
-\r
-                                               if (node) {\r
-                                                       node.remove();\r
-\r
-                                                       // Is the parent to be considered empty after we removed the BR\r
-                                                       if (parent.isEmpty(nonEmptyElements)) {\r
-                                                               elementRule = schema.getElementRule(parent.name);\r
-\r
-                                                               // Remove or padd the element depending on schema rule\r
-                                                               if (elementRule.removeEmpty)\r
-                                                                       parent.remove();\r
-                                                               else if (elementRule.paddEmpty) \r
-                                                                       parent.empty().append(new tinymce.html.Node('#text', 3)).value = '\u00a0';\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                       });\r
-               }\r
-       }\r
-})(tinymce);\r
-\r
-tinymce.html.Writer = function(settings) {\r
-       var html = [], indent, indentBefore, indentAfter, encode, htmlOutput;\r
-\r
-       settings = settings || {};\r
-       indent = settings.indent;\r
-       indentBefore = tinymce.makeMap(settings.indent_before || '');\r
-       indentAfter = tinymce.makeMap(settings.indent_after || '');\r
-       encode = tinymce.html.Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\r
-       htmlOutput = settings.element_format == "html";\r
-\r
-       return {\r
-               start: function(name, attrs, empty) {\r
-                       var i, l, attr, value;\r
-\r
-                       if (indent && indentBefore[name] && html.length > 0) {\r
-                               value = html[html.length - 1];\r
-\r
-                               if (value.length > 0 && value !== '\n')\r
-                                       html.push('\n');\r
-                       }\r
-\r
-                       html.push('<', name);\r
-\r
-                       if (attrs) {\r
-                               for (i = 0, l = attrs.length; i < l; i++) {\r
-                                       attr = attrs[i];\r
-                                       html.push(' ', attr.name, '="', encode(attr.value, true), '"');\r
-                               }\r
-                       }\r
-\r
-                       if (!empty || htmlOutput)\r
-                               html[html.length] = '>';\r
-                       else\r
-                               html[html.length] = ' />';\r
-\r
-                       if (empty && indent && indentAfter[name] && html.length > 0) {\r
-                               value = html[html.length - 1];\r
-\r
-                               if (value.length > 0 && value !== '\n')\r
-                                       html.push('\n');\r
-                       }\r
-               },\r
-\r
-               end: function(name) {\r
-                       var value;\r
-\r
-                       /*if (indent && indentBefore[name] && html.length > 0) {\r
-                               value = html[html.length - 1];\r
-\r
-                               if (value.length > 0 && value !== '\n')\r
-                                       html.push('\n');\r
-                       }*/\r
-\r
-                       html.push('</', name, '>');\r
-\r
-                       if (indent && indentAfter[name] && html.length > 0) {\r
-                               value = html[html.length - 1];\r
-\r
-                               if (value.length > 0 && value !== '\n')\r
-                                       html.push('\n');\r
-                       }\r
-               },\r
-\r
-               text: function(text, raw) {\r
-                       if (text.length > 0)\r
-                               html[html.length] = raw ? text : encode(text);\r
-               },\r
-\r
-               cdata: function(text) {\r
-                       html.push('<![CDATA[', text, ']]>');\r
-               },\r
-\r
-               comment: function(text) {\r
-                       html.push('<!--', text, '-->');\r
-               },\r
-\r
-               pi: function(name, text) {\r
-                       if (text)\r
-                               html.push('<?', name, ' ', text, '?>');\r
-                       else\r
-                               html.push('<?', name, '?>');\r
-\r
-                       if (indent)\r
-                               html.push('\n');\r
-               },\r
-\r
-               doctype: function(text) {\r
-                       html.push('<!DOCTYPE', text, '>', indent ? '\n' : '');\r
-               },\r
-\r
-               reset: function() {\r
-                       html.length = 0;\r
-               },\r
-\r
-               getContent: function() {\r
-                       return html.join('').replace(/\n$/, '');\r
-               }\r
-       };\r
-};\r
-\r
-(function(tinymce) {\r
-       tinymce.html.Serializer = function(settings, schema) {\r
-               var self = this, writer = new tinymce.html.Writer(settings);\r
-\r
-               settings = settings || {};\r
-               settings.validate = "validate" in settings ? settings.validate : true;\r
-\r
-               self.schema = schema = schema || new tinymce.html.Schema();\r
-               self.writer = writer;\r
-\r
-               self.serialize = function(node) {\r
-                       var handlers, validate;\r
-\r
-                       validate = settings.validate;\r
-\r
-                       handlers = {\r
-                               // #text\r
-                               3: function(node, raw) {\r
-                                       writer.text(node.value, node.raw);\r
-                               },\r
-\r
-                               // #comment\r
-                               8: function(node) {\r
-                                       writer.comment(node.value);\r
-                               },\r
-\r
-                               // Processing instruction\r
-                               7: function(node) {\r
-                                       writer.pi(node.name, node.value);\r
-                               },\r
-\r
-                               // Doctype\r
-                               10: function(node) {\r
-                                       writer.doctype(node.value);\r
-                               },\r
-\r
-                               // CDATA\r
-                               4: function(node) {\r
-                                       writer.cdata(node.value);\r
-                               },\r
-\r
-                               // Document fragment\r
-                               11: function(node) {\r
-                                       if ((node = node.firstChild)) {\r
-                                               do {\r
-                                                       walk(node);\r
-                                               } while (node = node.next);\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       writer.reset();\r
-\r
-                       function walk(node) {\r
-                               var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\r
-\r
-                               if (!handler) {\r
-                                       name = node.name;\r
-                                       isEmpty = node.shortEnded;\r
-                                       attrs = node.attributes;\r
-\r
-                                       // Sort attributes\r
-                                       if (validate && attrs && attrs.length > 1) {\r
-                                               sortedAttrs = [];\r
-                                               sortedAttrs.map = {};\r
-\r
-                                               elementRule = schema.getElementRule(node.name);\r
-                                               for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\r
-                                                       attrName = elementRule.attributesOrder[i];\r
-\r
-                                                       if (attrName in attrs.map) {\r
-                                                               attrValue = attrs.map[attrName];\r
-                                                               sortedAttrs.map[attrName] = attrValue;\r
-                                                               sortedAttrs.push({name: attrName, value: attrValue});\r
-                                                       }\r
-                                               }\r
-\r
-                                               for (i = 0, l = attrs.length; i < l; i++) {\r
-                                                       attrName = attrs[i].name;\r
-\r
-                                                       if (!(attrName in sortedAttrs.map)) {\r
-                                                               attrValue = attrs.map[attrName];\r
-                                                               sortedAttrs.map[attrName] = attrValue;\r
-                                                               sortedAttrs.push({name: attrName, value: attrValue});\r
-                                                       }\r
-                                               }\r
-\r
-                                               attrs = sortedAttrs;\r
-                                       }\r
-\r
-                                       writer.start(node.name, attrs, isEmpty);\r
-\r
-                                       if (!isEmpty) {\r
-                                               if ((node = node.firstChild)) {\r
-                                                       do {\r
-                                                               walk(node);\r
-                                                       } while (node = node.next);\r
-                                               }\r
-\r
-                                               writer.end(name);\r
-                                       }\r
-                               } else\r
-                                       handler(node);\r
-                       }\r
-\r
-                       // Serialize element and treat all non elements as fragments\r
-                       if (node.type == 1 && !settings.inner)\r
-                               walk(node);\r
-                       else\r
-                               handlers[11](node);\r
-\r
-                       return writer.getContent();\r
-               };\r
-       }\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       // Shorten names\r
-       var each = tinymce.each,\r
-               is = tinymce.is,\r
-               isWebKit = tinymce.isWebKit,\r
-               isIE = tinymce.isIE,\r
-               Entities = tinymce.html.Entities,\r
-               simpleSelectorRe = /^([a-z0-9],?)+$/i,\r
-               blockElementsMap = tinymce.html.Schema.blockElementsMap,\r
-               whiteSpaceRegExp = /^[ \t\r\n]*$/;\r
-\r
-       tinymce.create('tinymce.dom.DOMUtils', {\r
-               doc : null,\r
-               root : null,\r
-               files : null,\r
-               pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,\r
-               props : {\r
-                       "for" : "htmlFor",\r
-                       "class" : "className",\r
-                       className : "className",\r
-                       checked : "checked",\r
-                       disabled : "disabled",\r
-                       maxlength : "maxLength",\r
-                       readonly : "readOnly",\r
-                       selected : "selected",\r
-                       value : "value",\r
-                       id : "id",\r
-                       name : "name",\r
-                       type : "type"\r
-               },\r
-\r
-               DOMUtils : function(d, s) {\r
-                       var t = this, globalStyle, name;\r
-\r
-                       t.doc = d;\r
-                       t.win = window;\r
-                       t.files = {};\r
-                       t.cssFlicker = false;\r
-                       t.counter = 0;\r
-                       t.stdMode = !tinymce.isIE || d.documentMode >= 8;\r
-                       t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode;\r
-                       t.hasOuterHTML = "outerHTML" in d.createElement("a");\r
-\r
-                       t.settings = s = tinymce.extend({\r
-                               keep_values : false,\r
-                               hex_colors : 1\r
-                       }, s);\r
-                       \r
-                       t.schema = s.schema;\r
-                       t.styles = new tinymce.html.Styles({\r
-                               url_converter : s.url_converter,\r
-                               url_converter_scope : s.url_converter_scope\r
-                       }, s.schema);\r
-\r
-                       // Fix IE6SP2 flicker and check it failed for pre SP2\r
-                       if (tinymce.isIE6) {\r
-                               try {\r
-                                       d.execCommand('BackgroundImageCache', false, true);\r
-                               } catch (e) {\r
-                                       t.cssFlicker = true;\r
-                               }\r
-                       }\r
-\r
-                       if (isIE && s.schema) {\r
-                               // Add missing HTML 4/5 elements to IE\r
-                               ('abbr article aside audio canvas ' +\r
-                               'details figcaption figure footer ' +\r
-                               'header hgroup mark menu meter nav ' +\r
-                               'output progress section summary ' +\r
-                               'time video').replace(/\w+/g, function(name) {\r
-                                       d.createElement(name);\r
-                               });\r
-\r
-                               // Create all custom elements\r
-                               for (name in s.schema.getCustomElements()) {\r
-                                       d.createElement(name);\r
-                               }\r
-                       }\r
-\r
-                       tinymce.addUnload(t.destroy, t);\r
-               },\r
-\r
-               getRoot : function() {\r
-                       var t = this, s = t.settings;\r
-\r
-                       return (s && t.get(s.root_element)) || t.doc.body;\r
-               },\r
-\r
-               getViewPort : function(w) {\r
-                       var d, b;\r
-\r
-                       w = !w ? this.win : w;\r
-                       d = w.document;\r
-                       b = this.boxModel ? d.documentElement : d.body;\r
-\r
-                       // Returns viewport size excluding scrollbars\r
-                       return {\r
-                               x : w.pageXOffset || b.scrollLeft,\r
-                               y : w.pageYOffset || b.scrollTop,\r
-                               w : w.innerWidth || b.clientWidth,\r
-                               h : w.innerHeight || b.clientHeight\r
-                       };\r
-               },\r
-\r
-               getRect : function(e) {\r
-                       var p, t = this, sr;\r
-\r
-                       e = t.get(e);\r
-                       p = t.getPos(e);\r
-                       sr = t.getSize(e);\r
-\r
-                       return {\r
-                               x : p.x,\r
-                               y : p.y,\r
-                               w : sr.w,\r
-                               h : sr.h\r
-                       };\r
-               },\r
-\r
-               getSize : function(e) {\r
-                       var t = this, w, h;\r
-\r
-                       e = t.get(e);\r
-                       w = t.getStyle(e, 'width');\r
-                       h = t.getStyle(e, 'height');\r
-\r
-                       // Non pixel value, then force offset/clientWidth\r
-                       if (w.indexOf('px') === -1)\r
-                               w = 0;\r
-\r
-                       // Non pixel value, then force offset/clientWidth\r
-                       if (h.indexOf('px') === -1)\r
-                               h = 0;\r
-\r
-                       return {\r
-                               w : parseInt(w) || e.offsetWidth || e.clientWidth,\r
-                               h : parseInt(h) || e.offsetHeight || e.clientHeight\r
-                       };\r
-               },\r
-\r
-               getParent : function(n, f, r) {\r
-                       return this.getParents(n, f, r, false);\r
-               },\r
-\r
-               getParents : function(n, f, r, c) {\r
-                       var t = this, na, se = t.settings, o = [];\r
-\r
-                       n = t.get(n);\r
-                       c = c === undefined;\r
-\r
-                       if (se.strict_root)\r
-                               r = r || t.getRoot();\r
-\r
-                       // Wrap node name as func\r
-                       if (is(f, 'string')) {\r
-                               na = f;\r
-\r
-                               if (f === '*') {\r
-                                       f = function(n) {return n.nodeType == 1;};\r
-                               } else {\r
-                                       f = function(n) {\r
-                                               return t.is(n, na);\r
-                                       };\r
-                               }\r
-                       }\r
-\r
-                       while (n) {\r
-                               if (n == r || !n.nodeType || n.nodeType === 9)\r
-                                       break;\r
-\r
-                               if (!f || f(n)) {\r
-                                       if (c)\r
-                                               o.push(n);\r
-                                       else\r
-                                               return n;\r
-                               }\r
-\r
-                               n = n.parentNode;\r
-                       }\r
-\r
-                       return c ? o : null;\r
-               },\r
-\r
-               get : function(e) {\r
-                       var n;\r
-\r
-                       if (e && this.doc && typeof(e) == 'string') {\r
-                               n = e;\r
-                               e = this.doc.getElementById(e);\r
-\r
-                               // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick\r
-                               if (e && e.id !== n)\r
-                                       return this.doc.getElementsByName(n)[1];\r
-                       }\r
-\r
-                       return e;\r
-               },\r
-\r
-               getNext : function(node, selector) {\r
-                       return this._findSib(node, selector, 'nextSibling');\r
-               },\r
-\r
-               getPrev : function(node, selector) {\r
-                       return this._findSib(node, selector, 'previousSibling');\r
-               },\r
-\r
-\r
-               select : function(pa, s) {\r
-                       var t = this;\r
-\r
-                       return tinymce.dom.Sizzle(pa, t.get(s) || t.get(t.settings.root_element) || t.doc, []);\r
-               },\r
-\r
-               is : function(n, selector) {\r
-                       var i;\r
-\r
-                       // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance\r
-                       if (n.length === undefined) {\r
-                               // Simple all selector\r
-                               if (selector === '*')\r
-                                       return n.nodeType == 1;\r
-\r
-                               // Simple selector just elements\r
-                               if (simpleSelectorRe.test(selector)) {\r
-                                       selector = selector.toLowerCase().split(/,/);\r
-                                       n = n.nodeName.toLowerCase();\r
-\r
-                                       for (i = selector.length - 1; i >= 0; i--) {\r
-                                               if (selector[i] == n)\r
-                                                       return true;\r
-                                       }\r
-\r
-                                       return false;\r
-                               }\r
-                       }\r
-\r
-                       return tinymce.dom.Sizzle.matches(selector, n.nodeType ? [n] : n).length > 0;\r
-               },\r
-\r
-\r
-               add : function(p, n, a, h, c) {\r
-                       var t = this;\r
-\r
-                       return this.run(p, function(p) {\r
-                               var e, k;\r
-\r
-                               e = is(n, 'string') ? t.doc.createElement(n) : n;\r
-                               t.setAttribs(e, a);\r
-\r
-                               if (h) {\r
-                                       if (h.nodeType)\r
-                                               e.appendChild(h);\r
-                                       else\r
-                                               t.setHTML(e, h);\r
-                               }\r
-\r
-                               return !c ? p.appendChild(e) : e;\r
-                       });\r
-               },\r
-\r
-               create : function(n, a, h) {\r
-                       return this.add(this.doc.createElement(n), n, a, h, 1);\r
-               },\r
-\r
-               createHTML : function(n, a, h) {\r
-                       var o = '', t = this, k;\r
-\r
-                       o += '<' + n;\r
-\r
-                       for (k in a) {\r
-                               if (a.hasOwnProperty(k))\r
-                                       o += ' ' + k + '="' + t.encode(a[k]) + '"';\r
-                       }\r
-\r
-                       // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime\r
-                       if (typeof(h) != "undefined")\r
-                               return o + '>' + h + '</' + n + '>';\r
-\r
-                       return o + ' />';\r
-               },\r
-\r
-               remove : function(node, keep_children) {\r
-                       return this.run(node, function(node) {\r
-                               var child, parent = node.parentNode;\r
-\r
-                               if (!parent)\r
-                                       return null;\r
-\r
-                               if (keep_children) {\r
-                                       while (child = node.firstChild) {\r
-                                               // IE 8 will crash if you don't remove completely empty text nodes\r
-                                               if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)\r
-                                                       parent.insertBefore(child, node);\r
-                                               else\r
-                                                       node.removeChild(child);\r
-                                       }\r
-                               }\r
-\r
-                               return parent.removeChild(node);\r
-                       });\r
-               },\r
-\r
-               setStyle : function(n, na, v) {\r
-                       var t = this;\r
-\r
-                       return t.run(n, function(e) {\r
-                               var s, i;\r
-\r
-                               s = e.style;\r
-\r
-                               // Camelcase it, if needed\r
-                               na = na.replace(/-(\D)/g, function(a, b){\r
-                                       return b.toUpperCase();\r
-                               });\r
-\r
-                               // Default px suffix on these\r
-                               if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))\r
-                                       v += 'px';\r
-\r
-                               switch (na) {\r
-                                       case 'opacity':\r
-                                               // IE specific opacity\r
-                                               if (isIE) {\r
-                                                       s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";\r
-\r
-                                                       if (!n.currentStyle || !n.currentStyle.hasLayout)\r
-                                                               s.display = 'inline-block';\r
-                                               }\r
-\r
-                                               // Fix for older browsers\r
-                                               s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';\r
-                                               break;\r
-\r
-                                       case 'float':\r
-                                               isIE ? s.styleFloat = v : s.cssFloat = v;\r
-                                               break;\r
-                                       \r
-                                       default:\r
-                                               s[na] = v || '';\r
-                               }\r
-\r
-                               // Force update of the style data\r
-                               if (t.settings.update_styles)\r
-                                       t.setAttrib(e, 'data-mce-style');\r
-                       });\r
-               },\r
-\r
-               getStyle : function(n, na, c) {\r
-                       n = this.get(n);\r
-\r
-                       if (!n)\r
-                               return;\r
-\r
-                       // Gecko\r
-                       if (this.doc.defaultView && c) {\r
-                               // Remove camelcase\r
-                               na = na.replace(/[A-Z]/g, function(a){\r
-                                       return '-' + a;\r
-                               });\r
-\r
-                               try {\r
-                                       return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);\r
-                               } catch (ex) {\r
-                                       // Old safari might fail\r
-                                       return null;\r
-                               }\r
-                       }\r
-\r
-                       // Camelcase it, if needed\r
-                       na = na.replace(/-(\D)/g, function(a, b){\r
-                               return b.toUpperCase();\r
-                       });\r
-\r
-                       if (na == 'float')\r
-                               na = isIE ? 'styleFloat' : 'cssFloat';\r
-\r
-                       // IE & Opera\r
-                       if (n.currentStyle && c)\r
-                               return n.currentStyle[na];\r
-\r
-                       return n.style ? n.style[na] : undefined;\r
-               },\r
-\r
-               setStyles : function(e, o) {\r
-                       var t = this, s = t.settings, ol;\r
-\r
-                       ol = s.update_styles;\r
-                       s.update_styles = 0;\r
-\r
-                       each(o, function(v, n) {\r
-                               t.setStyle(e, n, v);\r
-                       });\r
-\r
-                       // Update style info\r
-                       s.update_styles = ol;\r
-                       if (s.update_styles)\r
-                               t.setAttrib(e, s.cssText);\r
-               },\r
-\r
-               removeAllAttribs: function(e) {\r
-                       return this.run(e, function(e) {\r
-                               var i, attrs = e.attributes;\r
-                               for (i = attrs.length - 1; i >= 0; i--) {\r
-                                       e.removeAttributeNode(attrs.item(i));\r
-                               }\r
-                       });\r
-               },\r
-\r
-               setAttrib : function(e, n, v) {\r
-                       var t = this;\r
-\r
-                       // Whats the point\r
-                       if (!e || !n)\r
-                               return;\r
-\r
-                       // Strict XML mode\r
-                       if (t.settings.strict)\r
-                               n = n.toLowerCase();\r
-\r
-                       return this.run(e, function(e) {\r
-                               var s = t.settings;\r
-\r
-                               switch (n) {\r
-                                       case "style":\r
-                                               if (!is(v, 'string')) {\r
-                                                       each(v, function(v, n) {\r
-                                                               t.setStyle(e, n, v);\r
-                                                       });\r
-\r
-                                                       return;\r
-                                               }\r
-\r
-                                               // No mce_style for elements with these since they might get resized by the user\r
-                                               if (s.keep_values) {\r
-                                                       if (v && !t._isRes(v))\r
-                                                               e.setAttribute('data-mce-style', v, 2);\r
-                                                       else\r
-                                                               e.removeAttribute('data-mce-style', 2);\r
-                                               }\r
-\r
-                                               e.style.cssText = v;\r
-                                               break;\r
-\r
-                                       case "class":\r
-                                               e.className = v || ''; // Fix IE null bug\r
-                                               break;\r
-\r
-                                       case "src":\r
-                                       case "href":\r
-                                               if (s.keep_values) {\r
-                                                       if (s.url_converter)\r
-                                                               v = s.url_converter.call(s.url_converter_scope || t, v, n, e);\r
-\r
-                                                       t.setAttrib(e, 'data-mce-' + n, v, 2);\r
-                                               }\r
-\r
-                                               break;\r
-\r
-                                       case "shape":\r
-                                               e.setAttribute('data-mce-style', v);\r
-                                               break;\r
-                               }\r
-\r
-                               if (is(v) && v !== null && v.length !== 0)\r
-                                       e.setAttribute(n, '' + v, 2);\r
-                               else\r
-                                       e.removeAttribute(n, 2);\r
-                       });\r
-               },\r
-\r
-               setAttribs : function(e, o) {\r
-                       var t = this;\r
-\r
-                       return this.run(e, function(e) {\r
-                               each(o, function(v, n) {\r
-                                       t.setAttrib(e, n, v);\r
-                               });\r
-                       });\r
-               },\r
-\r
-               getAttrib : function(e, n, dv) {\r
-                       var v, t = this;\r
-\r
-                       e = t.get(e);\r
-\r
-                       if (!e || e.nodeType !== 1)\r
-                               return false;\r
-\r
-                       if (!is(dv))\r
-                               dv = '';\r
-\r
-                       // Try the mce variant for these\r
-                       if (/^(src|href|style|coords|shape)$/.test(n)) {\r
-                               v = e.getAttribute("data-mce-" + n);\r
-\r
-                               if (v)\r
-                                       return v;\r
-                       }\r
-\r
-                       if (isIE && t.props[n]) {\r
-                               v = e[t.props[n]];\r
-                               v = v && v.nodeValue ? v.nodeValue : v;\r
-                       }\r
-\r
-                       if (!v)\r
-                               v = e.getAttribute(n, 2);\r
-\r
-                       // Check boolean attribs\r
-                       if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {\r
-                               if (e[t.props[n]] === true && v === '')\r
-                                       return n;\r
-\r
-                               return v ? n : '';\r
-                       }\r
-\r
-                       // Inner input elements will override attributes on form elements\r
-                       if (e.nodeName === "FORM" && e.getAttributeNode(n))\r
-                               return e.getAttributeNode(n).nodeValue;\r
-\r
-                       if (n === 'style') {\r
-                               v = v || e.style.cssText;\r
-\r
-                               if (v) {\r
-                                       v = t.serializeStyle(t.parseStyle(v), e.nodeName);\r
-\r
-                                       if (t.settings.keep_values && !t._isRes(v))\r
-                                               e.setAttribute('data-mce-style', v);\r
-                               }\r
-                       }\r
-\r
-                       // Remove Apple and WebKit stuff\r
-                       if (isWebKit && n === "class" && v)\r
-                               v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');\r
-\r
-                       // Handle IE issues\r
-                       if (isIE) {\r
-                               switch (n) {\r
-                                       case 'rowspan':\r
-                                       case 'colspan':\r
-                                               // IE returns 1 as default value\r
-                                               if (v === 1)\r
-                                                       v = '';\r
-\r
-                                               break;\r
-\r
-                                       case 'size':\r
-                                               // IE returns +0 as default value for size\r
-                                               if (v === '+0' || v === 20 || v === 0)\r
-                                                       v = '';\r
-\r
-                                               break;\r
-\r
-                                       case 'width':\r
-                                       case 'height':\r
-                                       case 'vspace':\r
-                                       case 'checked':\r
-                                       case 'disabled':\r
-                                       case 'readonly':\r
-                                               if (v === 0)\r
-                                                       v = '';\r
-\r
-                                               break;\r
-\r
-                                       case 'hspace':\r
-                                               // IE returns -1 as default value\r
-                                               if (v === -1)\r
-                                                       v = '';\r
-\r
-                                               break;\r
-\r
-                                       case 'maxlength':\r
-                                       case 'tabindex':\r
-                                               // IE returns default value\r
-                                               if (v === 32768 || v === 2147483647 || v === '32768')\r
-                                                       v = '';\r
-\r
-                                               break;\r
-\r
-                                       case 'multiple':\r
-                                       case 'compact':\r
-                                       case 'noshade':\r
-                                       case 'nowrap':\r
-                                               if (v === 65535)\r
-                                                       return n;\r
-\r
-                                               return dv;\r
-\r
-                                       case 'shape':\r
-                                               v = v.toLowerCase();\r
-                                               break;\r
-\r
-                                       default:\r
-                                               // IE has odd anonymous function for event attributes\r
-                                               if (n.indexOf('on') === 0 && v)\r
-                                                       v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v);\r
-                               }\r
-                       }\r
-\r
-                       return (v !== undefined && v !== null && v !== '') ? '' + v : dv;\r
-               },\r
-\r
-               getPos : function(n, ro) {\r
-                       var t = this, x = 0, y = 0, e, d = t.doc, r;\r
-\r
-                       n = t.get(n);\r
-                       ro = ro || d.body;\r
-\r
-                       if (n) {\r
-                               // Use getBoundingClientRect if it exists since it's faster than looping offset nodes\r
-                               if (n.getBoundingClientRect) {\r
-                                       n = n.getBoundingClientRect();\r
-                                       e = t.boxModel ? d.documentElement : d.body;\r
-\r
-                                       // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit\r
-                                       // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position\r
-                                       x = n.left + (d.documentElement.scrollLeft || d.body.scrollLeft) - e.clientTop;\r
-                                       y = n.top + (d.documentElement.scrollTop || d.body.scrollTop) - e.clientLeft;\r
-\r
-                                       return {x : x, y : y};\r
-                               }\r
-\r
-                               r = n;\r
-                               while (r && r != ro && r.nodeType) {\r
-                                       x += r.offsetLeft || 0;\r
-                                       y += r.offsetTop || 0;\r
-                                       r = r.offsetParent;\r
-                               }\r
-\r
-                               r = n.parentNode;\r
-                               while (r && r != ro && r.nodeType) {\r
-                                       x -= r.scrollLeft || 0;\r
-                                       y -= r.scrollTop || 0;\r
-                                       r = r.parentNode;\r
-                               }\r
-                       }\r
-\r
-                       return {x : x, y : y};\r
-               },\r
-\r
-               parseStyle : function(st) {\r
-                       return this.styles.parse(st);\r
-               },\r
-\r
-               serializeStyle : function(o, name) {\r
-                       return this.styles.serialize(o, name);\r
-               },\r
-\r
-               loadCSS : function(u) {\r
-                       var t = this, d = t.doc, head;\r
-\r
-                       if (!u)\r
-                               u = '';\r
-\r
-                       head = t.select('head')[0];\r
-\r
-                       each(u.split(','), function(u) {\r
-                               var link;\r
-\r
-                               if (t.files[u])\r
-                                       return;\r
-\r
-                               t.files[u] = true;\r
-                               link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});\r
-\r
-                               // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug\r
-                               // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading\r
-                               // It's ugly but it seems to work fine.\r
-                               if (isIE && d.documentMode && d.recalc) {\r
-                                       link.onload = function() {\r
-                                               if (d.recalc)\r
-                                                       d.recalc();\r
-\r
-                                               link.onload = null;\r
-                                       };\r
-                               }\r
-\r
-                               head.appendChild(link);\r
-                       });\r
-               },\r
-\r
-               addClass : function(e, c) {\r
-                       return this.run(e, function(e) {\r
-                               var o;\r
-\r
-                               if (!c)\r
-                                       return 0;\r
-\r
-                               if (this.hasClass(e, c))\r
-                                       return e.className;\r
-\r
-                               o = this.removeClass(e, c);\r
-\r
-                               return e.className = (o != '' ? (o + ' ') : '') + c;\r
-                       });\r
-               },\r
-\r
-               removeClass : function(e, c) {\r
-                       var t = this, re;\r
-\r
-                       return t.run(e, function(e) {\r
-                               var v;\r
-\r
-                               if (t.hasClass(e, c)) {\r
-                                       if (!re)\r
-                                               re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");\r
-\r
-                                       v = e.className.replace(re, ' ');\r
-                                       v = tinymce.trim(v != ' ' ? v : '');\r
-\r
-                                       e.className = v;\r
-\r
-                                       // Empty class attr\r
-                                       if (!v) {\r
-                                               e.removeAttribute('class');\r
-                                               e.removeAttribute('className');\r
-                                       }\r
-\r
-                                       return v;\r
-                               }\r
-\r
-                               return e.className;\r
-                       });\r
-               },\r
-\r
-               hasClass : function(n, c) {\r
-                       n = this.get(n);\r
-\r
-                       if (!n || !c)\r
-                               return false;\r
-\r
-                       return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;\r
-               },\r
-\r
-               show : function(e) {\r
-                       return this.setStyle(e, 'display', 'block');\r
-               },\r
-\r
-               hide : function(e) {\r
-                       return this.setStyle(e, 'display', 'none');\r
-               },\r
-\r
-               isHidden : function(e) {\r
-                       e = this.get(e);\r
-\r
-                       return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';\r
-               },\r
-\r
-               uniqueId : function(p) {\r
-                       return (!p ? 'mce_' : p) + (this.counter++);\r
-               },\r
-\r
-               setHTML : function(element, html) {\r
-                       var self = this;\r
-\r
-                       return self.run(element, function(element) {\r
-                               if (isIE) {\r
-                                       // Remove all child nodes, IE keeps empty text nodes in DOM\r
-                                       while (element.firstChild)\r
-                                               element.removeChild(element.firstChild);\r
-\r
-                                       try {\r
-                                               // IE will remove comments from the beginning\r
-                                               // unless you padd the contents with something\r
-                                               element.innerHTML = '<br />' + html;\r
-                                               element.removeChild(element.firstChild);\r
-                                       } catch (ex) {\r
-                                               // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p\r
-                                               // This seems to fix this problem\r
-\r
-                                               // Create new div with HTML contents and a BR infront to keep comments\r
-                                               element = self.create('div');\r
-                                               element.innerHTML = '<br />' + html;\r
-\r
-                                               // Add all children from div to target\r
-                                               each (element.childNodes, function(node, i) {\r
-                                                       // Skip br element\r
-                                                       if (i)\r
-                                                               element.appendChild(node);\r
-                                               });\r
-                                       }\r
-                               } else\r
-                                       element.innerHTML = html;\r
-\r
-                               return html;\r
-                       });\r
-               },\r
-\r
-               getOuterHTML : function(elm) {\r
-                       var doc, self = this;\r
-\r
-                       elm = self.get(elm);\r
-\r
-                       if (!elm)\r
-                               return null;\r
-\r
-                       if (elm.nodeType === 1 && self.hasOuterHTML)\r
-                               return elm.outerHTML;\r
-\r
-                       doc = (elm.ownerDocument || self.doc).createElement("body");\r
-                       doc.appendChild(elm.cloneNode(true));\r
-\r
-                       return doc.innerHTML;\r
-               },\r
-\r
-               setOuterHTML : function(e, h, d) {\r
-                       var t = this;\r
-\r
-                       function setHTML(e, h, d) {\r
-                               var n, tp;\r
-\r
-                               tp = d.createElement("body");\r
-                               tp.innerHTML = h;\r
-\r
-                               n = tp.lastChild;\r
-                               while (n) {\r
-                                       t.insertAfter(n.cloneNode(true), e);\r
-                                       n = n.previousSibling;\r
-                               }\r
-\r
-                               t.remove(e);\r
-                       };\r
-\r
-                       return this.run(e, function(e) {\r
-                               e = t.get(e);\r
-\r
-                               // Only set HTML on elements\r
-                               if (e.nodeType == 1) {\r
-                                       d = d || e.ownerDocument || t.doc;\r
-\r
-                                       if (isIE) {\r
-                                               try {\r
-                                                       // Try outerHTML for IE it sometimes produces an unknown runtime error\r
-                                                       if (isIE && e.nodeType == 1)\r
-                                                               e.outerHTML = h;\r
-                                                       else\r
-                                                               setHTML(e, h, d);\r
-                                               } catch (ex) {\r
-                                                       // Fix for unknown runtime error\r
-                                                       setHTML(e, h, d);\r
-                                               }\r
-                                       } else\r
-                                               setHTML(e, h, d);\r
-                               }\r
-                       });\r
-               },\r
-\r
-               decode : Entities.decode,\r
-\r
-               encode : Entities.encodeAllRaw,\r
-\r
-               insertAfter : function(node, reference_node) {\r
-                       reference_node = this.get(reference_node);\r
-\r
-                       return this.run(node, function(node) {\r
-                               var parent, nextSibling;\r
-\r
-                               parent = reference_node.parentNode;\r
-                               nextSibling = reference_node.nextSibling;\r
-\r
-                               if (nextSibling)\r
-                                       parent.insertBefore(node, nextSibling);\r
-                               else\r
-                                       parent.appendChild(node);\r
-\r
-                               return node;\r
-                       });\r
-               },\r
-\r
-               isBlock : function(node) {\r
-                       var type = node.nodeType;\r
-\r
-                       // If it's a node then check the type and use the nodeName\r
-                       if (type)\r
-                               return !!(type === 1 && blockElementsMap[node.nodeName]);\r
-\r
-                       return !!blockElementsMap[node];\r
-               },\r
-\r
-               replace : function(n, o, k) {\r
-                       var t = this;\r
-\r
-                       if (is(o, 'array'))\r
-                               n = n.cloneNode(true);\r
-\r
-                       return t.run(o, function(o) {\r
-                               if (k) {\r
-                                       each(tinymce.grep(o.childNodes), function(c) {\r
-                                               n.appendChild(c);\r
-                                       });\r
-                               }\r
-\r
-                               return o.parentNode.replaceChild(n, o);\r
-                       });\r
-               },\r
-\r
-               rename : function(elm, name) {\r
-                       var t = this, newElm;\r
-\r
-                       if (elm.nodeName != name.toUpperCase()) {\r
-                               // Rename block element\r
-                               newElm = t.create(name);\r
-\r
-                               // Copy attribs to new block\r
-                               each(t.getAttribs(elm), function(attr_node) {\r
-                                       t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));\r
-                               });\r
-\r
-                               // Replace block\r
-                               t.replace(newElm, elm, 1);\r
-                       }\r
-\r
-                       return newElm || elm;\r
-               },\r
-\r
-               findCommonAncestor : function(a, b) {\r
-                       var ps = a, pe;\r
-\r
-                       while (ps) {\r
-                               pe = b;\r
-\r
-                               while (pe && ps != pe)\r
-                                       pe = pe.parentNode;\r
-\r
-                               if (ps == pe)\r
-                                       break;\r
-\r
-                               ps = ps.parentNode;\r
-                       }\r
-\r
-                       if (!ps && a.ownerDocument)\r
-                               return a.ownerDocument.documentElement;\r
-\r
-                       return ps;\r
-               },\r
-\r
-               toHex : function(s) {\r
-                       var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);\r
-\r
-                       function hex(s) {\r
-                               s = parseInt(s).toString(16);\r
-\r
-                               return s.length > 1 ? s : '0' + s; // 0 -> 00\r
-                       };\r
-\r
-                       if (c) {\r
-                               s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);\r
-\r
-                               return s;\r
-                       }\r
-\r
-                       return s;\r
-               },\r
-\r
-               getClasses : function() {\r
-                       var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;\r
-\r
-                       if (t.classes)\r
-                               return t.classes;\r
-\r
-                       function addClasses(s) {\r
-                               // IE style imports\r
-                               each(s.imports, function(r) {\r
-                                       addClasses(r);\r
-                               });\r
-\r
-                               each(s.cssRules || s.rules, function(r) {\r
-                                       // Real type or fake it on IE\r
-                                       switch (r.type || 1) {\r
-                                               // Rule\r
-                                               case 1:\r
-                                                       if (r.selectorText) {\r
-                                                               each(r.selectorText.split(','), function(v) {\r
-                                                                       v = v.replace(/^\s*|\s*$|^\s\./g, "");\r
-\r
-                                                                       // Is internal or it doesn't contain a class\r
-                                                                       if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))\r
-                                                                               return;\r
-\r
-                                                                       // Remove everything but class name\r
-                                                                       ov = v;\r
-                                                                       v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v);\r
-\r
-                                                                       // Filter classes\r
-                                                                       if (f && !(v = f(v, ov)))\r
-                                                                               return;\r
-\r
-                                                                       if (!lo[v]) {\r
-                                                                               cl.push({'class' : v});\r
-                                                                               lo[v] = 1;\r
-                                                                       }\r
-                                                               });\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               // Import\r
-                                               case 3:\r
-                                                       addClasses(r.styleSheet);\r
-                                                       break;\r
-                                       }\r
-                               });\r
-                       };\r
-\r
-                       try {\r
-                               each(t.doc.styleSheets, addClasses);\r
-                       } catch (ex) {\r
-                               // Ignore\r
-                       }\r
-\r
-                       if (cl.length > 0)\r
-                               t.classes = cl;\r
-\r
-                       return cl;\r
-               },\r
-\r
-               run : function(e, f, s) {\r
-                       var t = this, o;\r
-\r
-                       if (t.doc && typeof(e) === 'string')\r
-                               e = t.get(e);\r
-\r
-                       if (!e)\r
-                               return false;\r
-\r
-                       s = s || this;\r
-                       if (!e.nodeType && (e.length || e.length === 0)) {\r
-                               o = [];\r
-\r
-                               each(e, function(e, i) {\r
-                                       if (e) {\r
-                                               if (typeof(e) == 'string')\r
-                                                       e = t.doc.getElementById(e);\r
-\r
-                                               o.push(f.call(s, e, i));\r
-                                       }\r
-                               });\r
-\r
-                               return o;\r
-                       }\r
-\r
-                       return f.call(s, e);\r
-               },\r
-\r
-               getAttribs : function(n) {\r
-                       var o;\r
-\r
-                       n = this.get(n);\r
-\r
-                       if (!n)\r
-                               return [];\r
-\r
-                       if (isIE) {\r
-                               o = [];\r
-\r
-                               // Object will throw exception in IE\r
-                               if (n.nodeName == 'OBJECT')\r
-                                       return n.attributes;\r
-\r
-                               // IE doesn't keep the selected attribute if you clone option elements\r
-                               if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))\r
-                                       o.push({specified : 1, nodeName : 'selected'});\r
-\r
-                               // It's crazy that this is faster in IE but it's because it returns all attributes all the time\r
-                               n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {\r
-                                       o.push({specified : 1, nodeName : a});\r
-                               });\r
-\r
-                               return o;\r
-                       }\r
-\r
-                       return n.attributes;\r
-               },\r
-\r
-               isEmpty : function(node, elements) {\r
-                       var self = this, i, attributes, type, walker, name;\r
-\r
-                       node = node.firstChild;\r
-                       if (node) {\r
-                               walker = new tinymce.dom.TreeWalker(node);\r
-                               elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;\r
-\r
-                               do {\r
-                                       type = node.nodeType;\r
-\r
-                                       if (type === 1) {\r
-                                               // Ignore bogus elements\r
-                                               if (node.getAttribute('data-mce-bogus'))\r
-                                                       continue;\r
-\r
-                                               // Keep empty elements like <img />\r
-                                               if (elements && elements[node.nodeName.toLowerCase()])\r
-                                                       return false;\r
-\r
-                                               // Keep elements with data attributes or name attribute like <a name="1"></a>\r
-                                               attributes = self.getAttribs(node);\r
-                                               i = node.attributes.length;\r
-                                               while (i--) {\r
-                                                       name = node.attributes[i].nodeName;\r
-                                                       if (name === "name" || name.indexOf('data-') === 0)\r
-                                                               return false;\r
-                                               }\r
-                                       }\r
-\r
-                                       // Keep non whitespace text nodes\r
-                                       if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue)))\r
-                                               return false;\r
-                               } while (node = walker.next());\r
-                       }\r
-\r
-                       return true;\r
-               },\r
-\r
-               destroy : function(s) {\r
-                       var t = this;\r
-\r
-                       if (t.events)\r
-                               t.events.destroy();\r
-\r
-                       t.win = t.doc = t.root = t.events = null;\r
-\r
-                       // Manual destroy then remove unload handler\r
-                       if (!s)\r
-                               tinymce.removeUnload(t.destroy);\r
-               },\r
-\r
-               createRng : function() {\r
-                       var d = this.doc;\r
-\r
-                       return d.createRange ? d.createRange() : new tinymce.dom.Range(this);\r
-               },\r
-\r
-               nodeIndex : function(node, normalized) {\r
-                       var idx = 0, lastNodeType, lastNode, nodeType;\r
-\r
-                       if (node) {\r
-                               for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {\r
-                                       nodeType = node.nodeType;\r
-\r
-                                       // Normalize text nodes\r
-                                       if (normalized && nodeType == 3) {\r
-                                               if (nodeType == lastNodeType || !node.nodeValue.length)\r
-                                                       continue;\r
-                                       }\r
-                                       idx++;\r
-                                       lastNodeType = nodeType;\r
-                               }\r
-                       }\r
-\r
-                       return idx;\r
-               },\r
-\r
-               split : function(pe, e, re) {\r
-                       var t = this, r = t.createRng(), bef, aft, pa;\r
-\r
-                       // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense\r
-                       // but we don't want that in our code since it serves no purpose for the end user\r
-                       // For example if this is chopped:\r
-                       //   <p>text 1<span><b>CHOP</b></span>text 2</p>\r
-                       // would produce:\r
-                       //   <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>\r
-                       // this function will then trim of empty edges and produce:\r
-                       //   <p>text 1</p><b>CHOP</b><p>text 2</p>\r
-                       function trim(node) {\r
-                               var i, children = node.childNodes, type = node.nodeType;\r
-\r
-                               if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark')\r
-                                       return;\r
-\r
-                               for (i = children.length - 1; i >= 0; i--)\r
-                                       trim(children[i]);\r
-\r
-                               if (type != 9) {\r
-                                       // Keep non whitespace text nodes\r
-                                       if (type == 3 && node.nodeValue.length > 0) {\r
-                                               // If parent element isn't a block or there isn't any useful contents for example "<p>   </p>"\r
-                                               if (!t.isBlock(node.parentNode) || tinymce.trim(node.nodeValue).length > 0)\r
-                                                       return;\r
-                                       } else if (type == 1) {\r
-                                               // If the only child is a bookmark then move it up\r
-                                               children = node.childNodes;\r
-                                               if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('data-mce-type') == 'bookmark')\r
-                                                       node.parentNode.insertBefore(children[0], node);\r
-\r
-                                               // Keep non empty elements or img, hr etc\r
-                                               if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))\r
-                                                       return;\r
-                                       }\r
-\r
-                                       t.remove(node);\r
-                               }\r
-\r
-                               return node;\r
-                       };\r
-\r
-                       if (pe && e) {\r
-                               // Get before chunk\r
-                               r.setStart(pe.parentNode, t.nodeIndex(pe));\r
-                               r.setEnd(e.parentNode, t.nodeIndex(e));\r
-                               bef = r.extractContents();\r
-\r
-                               // Get after chunk\r
-                               r = t.createRng();\r
-                               r.setStart(e.parentNode, t.nodeIndex(e) + 1);\r
-                               r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);\r
-                               aft = r.extractContents();\r
-\r
-                               // Insert before chunk\r
-                               pa = pe.parentNode;\r
-                               pa.insertBefore(trim(bef), pe);\r
-\r
-                               // Insert middle chunk\r
-                               if (re)\r
-                                       pa.replaceChild(re, e);\r
-                               else\r
-                                       pa.insertBefore(e, pe);\r
-\r
-                               // Insert after chunk\r
-                               pa.insertBefore(trim(aft), pe);\r
-                               t.remove(pe);\r
-\r
-                               return re || e;\r
-                       }\r
-               },\r
-\r
-               bind : function(target, name, func, scope) {\r
-                       var t = this;\r
-\r
-                       if (!t.events)\r
-                               t.events = new tinymce.dom.EventUtils();\r
-\r
-                       return t.events.add(target, name, func, scope || this);\r
-               },\r
-\r
-               unbind : function(target, name, func) {\r
-                       var t = this;\r
-\r
-                       if (!t.events)\r
-                               t.events = new tinymce.dom.EventUtils();\r
-\r
-                       return t.events.remove(target, name, func);\r
-               },\r
-\r
-\r
-               _findSib : function(node, selector, name) {\r
-                       var t = this, f = selector;\r
-\r
-                       if (node) {\r
-                               // If expression make a function of it using is\r
-                               if (is(f, 'string')) {\r
-                                       f = function(node) {\r
-                                               return t.is(node, selector);\r
-                                       };\r
-                               }\r
-\r
-                               // Loop all siblings\r
-                               for (node = node[name]; node; node = node[name]) {\r
-                                       if (f(node))\r
-                                               return node;\r
-                               }\r
-                       }\r
-\r
-                       return null;\r
-               },\r
-\r
-               _isRes : function(c) {\r
-                       // Is live resizble element\r
-                       return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);\r
-               }\r
-\r
-               /*\r
-               walk : function(n, f, s) {\r
-                       var d = this.doc, w;\r
-\r
-                       if (d.createTreeWalker) {\r
-                               w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
-\r
-                               while ((n = w.nextNode()) != null)\r
-                                       f.call(s || this, n);\r
-                       } else\r
-                               tinymce.walk(n, f, 'childNodes', s);\r
-               }\r
-               */\r
-\r
-               /*\r
-               toRGB : function(s) {\r
-                       var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);\r
-\r
-                       if (c) {\r
-                               // #FFF -> #FFFFFF\r
-                               if (!is(c[3]))\r
-                                       c[3] = c[2] = c[1];\r
-\r
-                               return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";\r
-                       }\r
-\r
-                       return s;\r
-               }\r
-               */\r
-       });\r
-\r
-       tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});\r
-})(tinymce);\r
-\r
-(function(ns) {\r
-       // Range constructor\r
-       function Range(dom) {\r
-               var t = this,\r
-                       doc = dom.doc,\r
-                       EXTRACT = 0,\r
-                       CLONE = 1,\r
-                       DELETE = 2,\r
-                       TRUE = true,\r
-                       FALSE = false,\r
-                       START_OFFSET = 'startOffset',\r
-                       START_CONTAINER = 'startContainer',\r
-                       END_CONTAINER = 'endContainer',\r
-                       END_OFFSET = 'endOffset',\r
-                       extend = tinymce.extend,\r
-                       nodeIndex = dom.nodeIndex;\r
-\r
-               extend(t, {\r
-                       // Inital states\r
-                       startContainer : doc,\r
-                       startOffset : 0,\r
-                       endContainer : doc,\r
-                       endOffset : 0,\r
-                       collapsed : TRUE,\r
-                       commonAncestorContainer : doc,\r
-\r
-                       // Range constants\r
-                       START_TO_START : 0,\r
-                       START_TO_END : 1,\r
-                       END_TO_END : 2,\r
-                       END_TO_START : 3,\r
-\r
-                       // Public methods\r
-                       setStart : setStart,\r
-                       setEnd : setEnd,\r
-                       setStartBefore : setStartBefore,\r
-                       setStartAfter : setStartAfter,\r
-                       setEndBefore : setEndBefore,\r
-                       setEndAfter : setEndAfter,\r
-                       collapse : collapse,\r
-                       selectNode : selectNode,\r
-                       selectNodeContents : selectNodeContents,\r
-                       compareBoundaryPoints : compareBoundaryPoints,\r
-                       deleteContents : deleteContents,\r
-                       extractContents : extractContents,\r
-                       cloneContents : cloneContents,\r
-                       insertNode : insertNode,\r
-                       surroundContents : surroundContents,\r
-                       cloneRange : cloneRange\r
-               });\r
-\r
-               function setStart(n, o) {\r
-                       _setEndPoint(TRUE, n, o);\r
-               };\r
-\r
-               function setEnd(n, o) {\r
-                       _setEndPoint(FALSE, n, o);\r
-               };\r
-\r
-               function setStartBefore(n) {\r
-                       setStart(n.parentNode, nodeIndex(n));\r
-               };\r
-\r
-               function setStartAfter(n) {\r
-                       setStart(n.parentNode, nodeIndex(n) + 1);\r
-               };\r
-\r
-               function setEndBefore(n) {\r
-                       setEnd(n.parentNode, nodeIndex(n));\r
-               };\r
-\r
-               function setEndAfter(n) {\r
-                       setEnd(n.parentNode, nodeIndex(n) + 1);\r
-               };\r
-\r
-               function collapse(ts) {\r
-                       if (ts) {\r
-                               t[END_CONTAINER] = t[START_CONTAINER];\r
-                               t[END_OFFSET] = t[START_OFFSET];\r
-                       } else {\r
-                               t[START_CONTAINER] = t[END_CONTAINER];\r
-                               t[START_OFFSET] = t[END_OFFSET];\r
-                       }\r
-\r
-                       t.collapsed = TRUE;\r
-               };\r
-\r
-               function selectNode(n) {\r
-                       setStartBefore(n);\r
-                       setEndAfter(n);\r
-               };\r
-\r
-               function selectNodeContents(n) {\r
-                       setStart(n, 0);\r
-                       setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);\r
-               };\r
-\r
-               function compareBoundaryPoints(h, r) {\r
-                       var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET],\r
-                       rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset;\r
-\r
-                       // Check START_TO_START\r
-                       if (h === 0)\r
-                               return _compareBoundaryPoints(sc, so, rsc, rso);\r
-       \r
-                       // Check START_TO_END\r
-                       if (h === 1)\r
-                               return _compareBoundaryPoints(ec, eo, rsc, rso);\r
-       \r
-                       // Check END_TO_END\r
-                       if (h === 2)\r
-                               return _compareBoundaryPoints(ec, eo, rec, reo);\r
-       \r
-                       // Check END_TO_START\r
-                       if (h === 3) \r
-                               return _compareBoundaryPoints(sc, so, rec, reo);\r
-               };\r
-\r
-               function deleteContents() {\r
-                       _traverse(DELETE);\r
-               };\r
-\r
-               function extractContents() {\r
-                       return _traverse(EXTRACT);\r
-               };\r
-\r
-               function cloneContents() {\r
-                       return _traverse(CLONE);\r
-               };\r
-\r
-               function insertNode(n) {\r
-                       var startContainer = this[START_CONTAINER],\r
-                               startOffset = this[START_OFFSET], nn, o;\r
-\r
-                       // Node is TEXT_NODE or CDATA\r
-                       if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {\r
-                               if (!startOffset) {\r
-                                       // At the start of text\r
-                                       startContainer.parentNode.insertBefore(n, startContainer);\r
-                               } else if (startOffset >= startContainer.nodeValue.length) {\r
-                                       // At the end of text\r
-                                       dom.insertAfter(n, startContainer);\r
-                               } else {\r
-                                       // Middle, need to split\r
-                                       nn = startContainer.splitText(startOffset);\r
-                                       startContainer.parentNode.insertBefore(n, nn);\r
-                               }\r
-                       } else {\r
-                               // Insert element node\r
-                               if (startContainer.childNodes.length > 0)\r
-                                       o = startContainer.childNodes[startOffset];\r
-\r
-                               if (o)\r
-                                       startContainer.insertBefore(n, o);\r
-                               else\r
-                                       startContainer.appendChild(n);\r
-                       }\r
-               };\r
-\r
-               function surroundContents(n) {\r
-                       var f = t.extractContents();\r
-\r
-                       t.insertNode(n);\r
-                       n.appendChild(f);\r
-                       t.selectNode(n);\r
-               };\r
-\r
-               function cloneRange() {\r
-                       return extend(new Range(dom), {\r
-                               startContainer : t[START_CONTAINER],\r
-                               startOffset : t[START_OFFSET],\r
-                               endContainer : t[END_CONTAINER],\r
-                               endOffset : t[END_OFFSET],\r
-                               collapsed : t.collapsed,\r
-                               commonAncestorContainer : t.commonAncestorContainer\r
-                       });\r
-               };\r
-\r
-               // Private methods\r
-\r
-               function _getSelectedNode(container, offset) {\r
-                       var child;\r
-\r
-                       if (container.nodeType == 3 /* TEXT_NODE */)\r
-                               return container;\r
-\r
-                       if (offset < 0)\r
-                               return container;\r
-\r
-                       child = container.firstChild;\r
-                       while (child && offset > 0) {\r
-                               --offset;\r
-                               child = child.nextSibling;\r
-                       }\r
-\r
-                       if (child)\r
-                               return child;\r
-\r
-                       return container;\r
-               };\r
-\r
-               function _isCollapsed() {\r
-                       return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);\r
-               };\r
-\r
-               function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {\r
-                       var c, offsetC, n, cmnRoot, childA, childB;\r
-                       \r
-                       // In the first case the boundary-points have the same container. A is before B\r
-                       // if its offset is less than the offset of B, A is equal to B if its offset is\r
-                       // equal to the offset of B, and A is after B if its offset is greater than the\r
-                       // offset of B.\r
-                       if (containerA == containerB) {\r
-                               if (offsetA == offsetB)\r
-                                       return 0; // equal\r
-\r
-                               if (offsetA < offsetB)\r
-                                       return -1; // before\r
-\r
-                               return 1; // after\r
-                       }\r
-\r
-                       // In the second case a child node C of the container of A is an ancestor\r
-                       // container of B. In this case, A is before B if the offset of A is less than or\r
-                       // equal to the index of the child node C and A is after B otherwise.\r
-                       c = containerB;\r
-                       while (c && c.parentNode != containerA)\r
-                               c = c.parentNode;\r
-\r
-                       if (c) {\r
-                               offsetC = 0;\r
-                               n = containerA.firstChild;\r
-\r
-                               while (n != c && offsetC < offsetA) {\r
-                                       offsetC++;\r
-                                       n = n.nextSibling;\r
-                               }\r
-\r
-                               if (offsetA <= offsetC)\r
-                                       return -1; // before\r
-\r
-                               return 1; // after\r
-                       }\r
-\r
-                       // In the third case a child node C of the container of B is an ancestor container\r
-                       // of A. In this case, A is before B if the index of the child node C is less than\r
-                       // the offset of B and A is after B otherwise.\r
-                       c = containerA;\r
-                       while (c && c.parentNode != containerB) {\r
-                               c = c.parentNode;\r
-                       }\r
-\r
-                       if (c) {\r
-                               offsetC = 0;\r
-                               n = containerB.firstChild;\r
-\r
-                               while (n != c && offsetC < offsetB) {\r
-                                       offsetC++;\r
-                                       n = n.nextSibling;\r
-                               }\r
-\r
-                               if (offsetC < offsetB)\r
-                                       return -1; // before\r
-\r
-                               return 1; // after\r
-                       }\r
-\r
-                       // In the fourth case, none of three other cases hold: the containers of A and B\r
-                       // are siblings or descendants of sibling nodes. In this case, A is before B if\r
-                       // the container of A is before the container of B in a pre-order traversal of the\r
-                       // Ranges' context tree and A is after B otherwise.\r
-                       cmnRoot = dom.findCommonAncestor(containerA, containerB);\r
-                       childA = containerA;\r
-\r
-                       while (childA && childA.parentNode != cmnRoot)\r
-                               childA = childA.parentNode;\r
-\r
-                       if (!childA)\r
-                               childA = cmnRoot;\r
-\r
-                       childB = containerB;\r
-                       while (childB && childB.parentNode != cmnRoot)\r
-                               childB = childB.parentNode;\r
-\r
-                       if (!childB)\r
-                               childB = cmnRoot;\r
-\r
-                       if (childA == childB)\r
-                               return 0; // equal\r
-\r
-                       n = cmnRoot.firstChild;\r
-                       while (n) {\r
-                               if (n == childA)\r
-                                       return -1; // before\r
-\r
-                               if (n == childB)\r
-                                       return 1; // after\r
-\r
-                               n = n.nextSibling;\r
-                       }\r
-               };\r
-\r
-               function _setEndPoint(st, n, o) {\r
-                       var ec, sc;\r
-\r
-                       if (st) {\r
-                               t[START_CONTAINER] = n;\r
-                               t[START_OFFSET] = o;\r
-                       } else {\r
-                               t[END_CONTAINER] = n;\r
-                               t[END_OFFSET] = o;\r
-                       }\r
-\r
-                       // If one boundary-point of a Range is set to have a root container\r
-                       // other than the current one for the Range, the Range is collapsed to\r
-                       // the new position. This enforces the restriction that both boundary-\r
-                       // points of a Range must have the same root container.\r
-                       ec = t[END_CONTAINER];\r
-                       while (ec.parentNode)\r
-                               ec = ec.parentNode;\r
-\r
-                       sc = t[START_CONTAINER];\r
-                       while (sc.parentNode)\r
-                               sc = sc.parentNode;\r
-\r
-                       if (sc == ec) {\r
-                               // The start position of a Range is guaranteed to never be after the\r
-                               // end position. To enforce this restriction, if the start is set to\r
-                               // be at a position after the end, the Range is collapsed to that\r
-                               // position.\r
-                               if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)\r
-                                       t.collapse(st);\r
-                       } else\r
-                               t.collapse(st);\r
-\r
-                       t.collapsed = _isCollapsed();\r
-                       t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);\r
-               };\r
-\r
-               function _traverse(how) {\r
-                       var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;\r
-\r
-                       if (t[START_CONTAINER] == t[END_CONTAINER])\r
-                               return _traverseSameContainer(how);\r
-\r
-                       for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
-                               if (p == t[START_CONTAINER])\r
-                                       return _traverseCommonStartContainer(c, how);\r
-\r
-                               ++endContainerDepth;\r
-                       }\r
-\r
-                       for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
-                               if (p == t[END_CONTAINER])\r
-                                       return _traverseCommonEndContainer(c, how);\r
-\r
-                               ++startContainerDepth;\r
-                       }\r
-\r
-                       depthDiff = startContainerDepth - endContainerDepth;\r
-\r
-                       startNode = t[START_CONTAINER];\r
-                       while (depthDiff > 0) {\r
-                               startNode = startNode.parentNode;\r
-                               depthDiff--;\r
-                       }\r
-\r
-                       endNode = t[END_CONTAINER];\r
-                       while (depthDiff < 0) {\r
-                               endNode = endNode.parentNode;\r
-                               depthDiff++;\r
-                       }\r
-\r
-                       // ascend the ancestor hierarchy until we have a common parent.\r
-                       for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {\r
-                               startNode = sp;\r
-                               endNode = ep;\r
-                       }\r
-\r
-                       return _traverseCommonAncestors(startNode, endNode, how);\r
-               };\r
-\r
-                function _traverseSameContainer(how) {\r
-                       var frag, s, sub, n, cnt, sibling, xferNode;\r
-\r
-                       if (how != DELETE)\r
-                               frag = doc.createDocumentFragment();\r
-\r
-                       // If selection is empty, just return the fragment\r
-                       if (t[START_OFFSET] == t[END_OFFSET])\r
-                               return frag;\r
-\r
-                       // Text node needs special case handling\r
-                       if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {\r
-                               // get the substring\r
-                               s = t[START_CONTAINER].nodeValue;\r
-                               sub = s.substring(t[START_OFFSET], t[END_OFFSET]);\r
-\r
-                               // set the original text node to its new value\r
-                               if (how != CLONE) {\r
-                                       t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);\r
-\r
-                                       // Nothing is partially selected, so collapse to start point\r
-                                       t.collapse(TRUE);\r
-                               }\r
-\r
-                               if (how == DELETE)\r
-                                       return;\r
-\r
-                               frag.appendChild(doc.createTextNode(sub));\r
-                               return frag;\r
-                       }\r
-\r
-                       // Copy nodes between the start/end offsets.\r
-                       n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);\r
-                       cnt = t[END_OFFSET] - t[START_OFFSET];\r
-\r
-                       while (cnt > 0) {\r
-                               sibling = n.nextSibling;\r
-                               xferNode = _traverseFullySelected(n, how);\r
-\r
-                               if (frag)\r
-                                       frag.appendChild( xferNode );\r
-\r
-                               --cnt;\r
-                               n = sibling;\r
-                       }\r
-\r
-                       // Nothing is partially selected, so collapse to start point\r
-                       if (how != CLONE)\r
-                               t.collapse(TRUE);\r
-\r
-                       return frag;\r
-               };\r
-\r
-               function _traverseCommonStartContainer(endAncestor, how) {\r
-                       var frag, n, endIdx, cnt, sibling, xferNode;\r
-\r
-                       if (how != DELETE)\r
-                               frag = doc.createDocumentFragment();\r
-\r
-                       n = _traverseRightBoundary(endAncestor, how);\r
-\r
-                       if (frag)\r
-                               frag.appendChild(n);\r
-\r
-                       endIdx = nodeIndex(endAncestor);\r
-                       cnt = endIdx - t[START_OFFSET];\r
-\r
-                       if (cnt <= 0) {\r
-                               // Collapse to just before the endAncestor, which\r
-                               // is partially selected.\r
-                               if (how != CLONE) {\r
-                                       t.setEndBefore(endAncestor);\r
-                                       t.collapse(FALSE);\r
-                               }\r
-\r
-                               return frag;\r
-                       }\r
-\r
-                       n = endAncestor.previousSibling;\r
-                       while (cnt > 0) {\r
-                               sibling = n.previousSibling;\r
-                               xferNode = _traverseFullySelected(n, how);\r
-\r
-                               if (frag)\r
-                                       frag.insertBefore(xferNode, frag.firstChild);\r
-\r
-                               --cnt;\r
-                               n = sibling;\r
-                       }\r
-\r
-                       // Collapse to just before the endAncestor, which\r
-                       // is partially selected.\r
-                       if (how != CLONE) {\r
-                               t.setEndBefore(endAncestor);\r
-                               t.collapse(FALSE);\r
-                       }\r
-\r
-                       return frag;\r
-               };\r
-\r
-               function _traverseCommonEndContainer(startAncestor, how) {\r
-                       var frag, startIdx, n, cnt, sibling, xferNode;\r
-\r
-                       if (how != DELETE)\r
-                               frag = doc.createDocumentFragment();\r
-\r
-                       n = _traverseLeftBoundary(startAncestor, how);\r
-                       if (frag)\r
-                               frag.appendChild(n);\r
-\r
-                       startIdx = nodeIndex(startAncestor);\r
-                       ++startIdx; // Because we already traversed it\r
-\r
-                       cnt = t[END_OFFSET] - startIdx;\r
-                       n = startAncestor.nextSibling;\r
-                       while (cnt > 0) {\r
-                               sibling = n.nextSibling;\r
-                               xferNode = _traverseFullySelected(n, how);\r
-\r
-                               if (frag)\r
-                                       frag.appendChild(xferNode);\r
-\r
-                               --cnt;\r
-                               n = sibling;\r
-                       }\r
-\r
-                       if (how != CLONE) {\r
-                               t.setStartAfter(startAncestor);\r
-                               t.collapse(TRUE);\r
-                       }\r
-\r
-                       return frag;\r
-               };\r
-\r
-               function _traverseCommonAncestors(startAncestor, endAncestor, how) {\r
-                       var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;\r
-\r
-                       if (how != DELETE)\r
-                               frag = doc.createDocumentFragment();\r
-\r
-                       n = _traverseLeftBoundary(startAncestor, how);\r
-                       if (frag)\r
-                               frag.appendChild(n);\r
-\r
-                       commonParent = startAncestor.parentNode;\r
-                       startOffset = nodeIndex(startAncestor);\r
-                       endOffset = nodeIndex(endAncestor);\r
-                       ++startOffset;\r
-\r
-                       cnt = endOffset - startOffset;\r
-                       sibling = startAncestor.nextSibling;\r
-\r
-                       while (cnt > 0) {\r
-                               nextSibling = sibling.nextSibling;\r
-                               n = _traverseFullySelected(sibling, how);\r
-\r
-                               if (frag)\r
-                                       frag.appendChild(n);\r
-\r
-                               sibling = nextSibling;\r
-                               --cnt;\r
-                       }\r
-\r
-                       n = _traverseRightBoundary(endAncestor, how);\r
-\r
-                       if (frag)\r
-                               frag.appendChild(n);\r
-\r
-                       if (how != CLONE) {\r
-                               t.setStartAfter(startAncestor);\r
-                               t.collapse(TRUE);\r
-                       }\r
-\r
-                       return frag;\r
-               };\r
-\r
-               function _traverseRightBoundary(root, how) {\r
-                       var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];\r
-\r
-                       if (next == root)\r
-                               return _traverseNode(next, isFullySelected, FALSE, how);\r
-\r
-                       parent = next.parentNode;\r
-                       clonedParent = _traverseNode(parent, FALSE, FALSE, how);\r
-\r
-                       while (parent) {\r
-                               while (next) {\r
-                                       prevSibling = next.previousSibling;\r
-                                       clonedChild = _traverseNode(next, isFullySelected, FALSE, how);\r
-\r
-                                       if (how != DELETE)\r
-                                               clonedParent.insertBefore(clonedChild, clonedParent.firstChild);\r
-\r
-                                       isFullySelected = TRUE;\r
-                                       next = prevSibling;\r
-                               }\r
-\r
-                               if (parent == root)\r
-                                       return clonedParent;\r
-\r
-                               next = parent.previousSibling;\r
-                               parent = parent.parentNode;\r
-\r
-                               clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);\r
-\r
-                               if (how != DELETE)\r
-                                       clonedGrandParent.appendChild(clonedParent);\r
-\r
-                               clonedParent = clonedGrandParent;\r
-                       }\r
-               };\r
-\r
-               function _traverseLeftBoundary(root, how) {\r
-                       var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;\r
-\r
-                       if (next == root)\r
-                               return _traverseNode(next, isFullySelected, TRUE, how);\r
-\r
-                       parent = next.parentNode;\r
-                       clonedParent = _traverseNode(parent, FALSE, TRUE, how);\r
-\r
-                       while (parent) {\r
-                               while (next) {\r
-                                       nextSibling = next.nextSibling;\r
-                                       clonedChild = _traverseNode(next, isFullySelected, TRUE, how);\r
-\r
-                                       if (how != DELETE)\r
-                                               clonedParent.appendChild(clonedChild);\r
-\r
-                                       isFullySelected = TRUE;\r
-                                       next = nextSibling;\r
-                               }\r
-\r
-                               if (parent == root)\r
-                                       return clonedParent;\r
-\r
-                               next = parent.nextSibling;\r
-                               parent = parent.parentNode;\r
-\r
-                               clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);\r
-\r
-                               if (how != DELETE)\r
-                                       clonedGrandParent.appendChild(clonedParent);\r
-\r
-                               clonedParent = clonedGrandParent;\r
-                       }\r
-               };\r
-\r
-               function _traverseNode(n, isFullySelected, isLeft, how) {\r
-                       var txtValue, newNodeValue, oldNodeValue, offset, newNode;\r
-\r
-                       if (isFullySelected)\r
-                               return _traverseFullySelected(n, how);\r
-\r
-                       if (n.nodeType == 3 /* TEXT_NODE */) {\r
-                               txtValue = n.nodeValue;\r
-\r
-                               if (isLeft) {\r
-                                       offset = t[START_OFFSET];\r
-                                       newNodeValue = txtValue.substring(offset);\r
-                                       oldNodeValue = txtValue.substring(0, offset);\r
-                               } else {\r
-                                       offset = t[END_OFFSET];\r
-                                       newNodeValue = txtValue.substring(0, offset);\r
-                                       oldNodeValue = txtValue.substring(offset);\r
-                               }\r
-\r
-                               if (how != CLONE)\r
-                                       n.nodeValue = oldNodeValue;\r
-\r
-                               if (how == DELETE)\r
-                                       return;\r
-\r
-                               newNode = n.cloneNode(FALSE);\r
-                               newNode.nodeValue = newNodeValue;\r
-\r
-                               return newNode;\r
-                       }\r
-\r
-                       if (how == DELETE)\r
-                               return;\r
-\r
-                       return n.cloneNode(FALSE);\r
-               };\r
-\r
-               function _traverseFullySelected(n, how) {\r
-                       if (how != DELETE)\r
-                               return how == CLONE ? n.cloneNode(TRUE) : n;\r
-\r
-                       n.parentNode.removeChild(n);\r
-               };\r
-       };\r
-\r
-       ns.Range = Range;\r
-})(tinymce.dom);\r
-\r
-(function() {\r
-       function Selection(selection) {\r
-               var self = this, dom = selection.dom, TRUE = true, FALSE = false;\r
-\r
-               function getPosition(rng, start) {\r
-                       var checkRng, startIndex = 0, endIndex, inside,\r
-                               children, child, offset, index, position = -1, parent;\r
-\r
-                       // Setup test range, collapse it and get the parent\r
-                       checkRng = rng.duplicate();\r
-                       checkRng.collapse(start);\r
-                       parent = checkRng.parentElement();\r
-\r
-                       // Check if the selection is within the right document\r
-                       if (parent.ownerDocument !== selection.dom.doc)\r
-                               return;\r
-\r
-                       // IE will report non editable elements as it's parent so look for an editable one\r
-                       while (parent.contentEditable === "false") {\r
-                               parent = parent.parentNode;\r
-                       }\r
-\r
-                       // If parent doesn't have any children then return that we are inside the element\r
-                       if (!parent.hasChildNodes()) {\r
-                               return {node : parent, inside : 1};\r
-                       }\r
-\r
-                       // Setup node list and endIndex\r
-                       children = parent.children;\r
-                       endIndex = children.length - 1;\r
-\r
-                       // Perform a binary search for the position\r
-                       while (startIndex <= endIndex) {\r
-                               index = Math.floor((startIndex + endIndex) / 2);\r
-\r
-                               // Move selection to node and compare the ranges\r
-                               child = children[index];\r
-                               checkRng.moveToElementText(child);\r
-                               position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng);\r
-\r
-                               // Before/after or an exact match\r
-                               if (position > 0) {\r
-                                       endIndex = index - 1;\r
-                               } else if (position < 0) {\r
-                                       startIndex = index + 1;\r
-                               } else {\r
-                                       return {node : child};\r
-                               }\r
-                       }\r
-\r
-                       // Check if child position is before or we didn't find a position\r
-                       if (position < 0) {\r
-                               // No element child was found use the parent element and the offset inside that\r
-                               if (!child) {\r
-                                       checkRng.moveToElementText(parent);\r
-                                       checkRng.collapse(true);\r
-                                       child = parent;\r
-                                       inside = true;\r
-                               } else\r
-                                       checkRng.collapse(false);\r
-\r
-                               checkRng.setEndPoint(start ? 'EndToStart' : 'EndToEnd', rng);\r
-\r
-                               // Fix for edge case: <div style="width: 100px; height:100px;"><table>..</table>ab|c</div>\r
-                               if (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) > 0) {\r
-                                       checkRng = rng.duplicate();\r
-                                       checkRng.collapse(start);\r
-\r
-                                       offset = -1;\r
-                                       while (parent == checkRng.parentElement()) {\r
-                                               if (checkRng.move('character', -1) == 0)\r
-                                                       break;\r
-\r
-                                               offset++;\r
-                                       }\r
-                               }\r
-\r
-                               offset = offset || checkRng.text.replace('\r\n', ' ').length;\r
-                       } else {\r
-                               // Child position is after the selection endpoint\r
-                               checkRng.collapse(true);\r
-                               checkRng.setEndPoint(start ? 'StartToStart' : 'StartToEnd', rng);\r
-\r
-                               // Get the length of the text to find where the endpoint is relative to it's container\r
-                               offset = checkRng.text.replace('\r\n', ' ').length;\r
-                       }\r
-\r
-                       return {node : child, position : position, offset : offset, inside : inside};\r
-               };\r
-\r
-               // Returns a W3C DOM compatible range object by using the IE Range API\r
-               function getRange() {\r
-                       var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark, fail;\r
-\r
-                       // If selection is outside the current document just return an empty range\r
-                       element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();\r
-                       if (element.ownerDocument != dom.doc)\r
-                               return domRange;\r
-\r
-                       collapsed = selection.isCollapsed();\r
-\r
-                       // Handle control selection\r
-                       if (ieRange.item) {\r
-                               domRange.setStart(element.parentNode, dom.nodeIndex(element));\r
-                               domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);\r
-\r
-                               return domRange;\r
-                       }\r
-\r
-                       function findEndPoint(start) {\r
-                               var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue;\r
-\r
-                               container = endPoint.node;\r
-                               offset = endPoint.offset;\r
-\r
-                               if (endPoint.inside && !container.hasChildNodes()) {\r
-                                       domRange[start ? 'setStart' : 'setEnd'](container, 0);\r
-                                       return;\r
-                               }\r
-\r
-                               if (offset === undef) {\r
-                                       domRange[start ? 'setStartBefore' : 'setEndAfter'](container);\r
-                                       return;\r
-                               }\r
-\r
-                               if (endPoint.position < 0) {\r
-                                       sibling = endPoint.inside ? container.firstChild : container.nextSibling;\r
-\r
-                                       if (!sibling) {\r
-                                               domRange[start ? 'setStartAfter' : 'setEndAfter'](container);\r
-                                               return;\r
-                                       }\r
-\r
-                                       if (!offset) {\r
-                                               if (sibling.nodeType == 3)\r
-                                                       domRange[start ? 'setStart' : 'setEnd'](sibling, 0);\r
-                                               else\r
-                                                       domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling);\r
-\r
-                                               return;\r
-                                       }\r
-\r
-                                       // Find the text node and offset\r
-                                       while (sibling) {\r
-                                               nodeValue = sibling.nodeValue;\r
-                                               textNodeOffset += nodeValue.length;\r
-\r
-                                               // We are at or passed the position we where looking for\r
-                                               if (textNodeOffset >= offset) {\r
-                                                       container = sibling;\r
-                                                       textNodeOffset -= offset;\r
-                                                       textNodeOffset = nodeValue.length - textNodeOffset;\r
-                                                       break;\r
-                                               }\r
-\r
-                                               sibling = sibling.nextSibling;\r
-                                       }\r
-                               } else {\r
-                                       // Find the text node and offset\r
-                                       sibling = container.previousSibling;\r
-\r
-                                       if (!sibling)\r
-                                               return domRange[start ? 'setStartBefore' : 'setEndBefore'](container);\r
-\r
-                                       // If there isn't any text to loop then use the first position\r
-                                       if (!offset) {\r
-                                               if (container.nodeType == 3)\r
-                                                       domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length);\r
-                                               else\r
-                                                       domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling);\r
-\r
-                                               return;\r
-                                       }\r
-\r
-                                       while (sibling) {\r
-                                               textNodeOffset += sibling.nodeValue.length;\r
-\r
-                                               // We are at or passed the position we where looking for\r
-                                               if (textNodeOffset >= offset) {\r
-                                                       container = sibling;\r
-                                                       textNodeOffset -= offset;\r
-                                                       break;\r
-                                               }\r
-\r
-                                               sibling = sibling.previousSibling;\r
-                                       }\r
-                               }\r
-\r
-                               domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset);\r
-                       };\r
-\r
-                       try {\r
-                               // Find start point\r
-                               findEndPoint(true);\r
-\r
-                               // Find end point if needed\r
-                               if (!collapsed)\r
-                                       findEndPoint();\r
-                       } catch (ex) {\r
-                               // IE has a nasty bug where text nodes might throw "invalid argument" when you\r
-                               // access the nodeValue or other properties of text nodes. This seems to happend when\r
-                               // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it.\r
-                               if (ex.number == -2147024809) {\r
-                                       // Get the current selection\r
-                                       bookmark = self.getBookmark(2);\r
-\r
-                                       // Get start element\r
-                                       tmpRange = ieRange.duplicate();\r
-                                       tmpRange.collapse(true);\r
-                                       element = tmpRange.parentElement();\r
-\r
-                                       // Get end element\r
-                                       if (!collapsed) {\r
-                                               tmpRange = ieRange.duplicate();\r
-                                               tmpRange.collapse(false);\r
-                                               element2 = tmpRange.parentElement();\r
-                                               element2.innerHTML = element2.innerHTML;\r
-                                       }\r
-\r
-                                       // Remove the broken elements\r
-                                       element.innerHTML = element.innerHTML;\r
-\r
-                                       // Restore the selection\r
-                                       self.moveToBookmark(bookmark);\r
-\r
-                                       // Since the range has moved we need to re-get it\r
-                                       ieRange = selection.getRng();\r
-\r
-                                       // Find start point\r
-                                       findEndPoint(true);\r
-\r
-                                       // Find end point if needed\r
-                                       if (!collapsed)\r
-                                               findEndPoint();\r
-                               } else\r
-                                       throw ex; // Throw other errors\r
-                       }\r
-\r
-                       return domRange;\r
-               };\r
-\r
-               this.getBookmark = function(type) {\r
-                       var rng = selection.getRng(), start, end, bookmark = {};\r
-\r
-                       function getIndexes(node) {\r
-                               var node, parent, root, children, i, indexes = [];\r
-\r
-                               parent = node.parentNode;\r
-                               root = dom.getRoot().parentNode;\r
-\r
-                               while (parent != root) {\r
-                                       children = parent.children;\r
-\r
-                                       i = children.length;\r
-                                       while (i--) {\r
-                                               if (node === children[i]) {\r
-                                                       indexes.push(i);\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-\r
-                                       node = parent;\r
-                                       parent = parent.parentNode;\r
-                               }\r
-\r
-                               return indexes;\r
-                       };\r
-\r
-                       function getBookmarkEndPoint(start) {\r
-                               var position;\r
-\r
-                               position = getPosition(rng, start);\r
-                               if (position) {\r
-                                       return {\r
-                                               position : position.position,\r
-                                               offset : position.offset,\r
-                                               indexes : getIndexes(position.node),\r
-                                               inside : position.inside\r
-                                       };\r
-                               }\r
-                       };\r
-\r
-                       // Non ubstructive bookmark\r
-                       if (type === 2) {\r
-                               // Handle text selection\r
-                               if (!rng.item) {\r
-                                       bookmark.start = getBookmarkEndPoint(true);\r
-\r
-                                       if (!selection.isCollapsed())\r
-                                               bookmark.end = getBookmarkEndPoint();\r
-                               } else\r
-                                       bookmark.start = {ctrl : true, indexes : getIndexes(rng.item(0))};\r
-                       }\r
-\r
-                       return bookmark;\r
-               };\r
-\r
-               this.moveToBookmark = function(bookmark) {\r
-                       var rng, body = dom.doc.body;\r
-\r
-                       function resolveIndexes(indexes) {\r
-                               var node, i, idx, children;\r
-\r
-                               node = dom.getRoot();\r
-                               for (i = indexes.length - 1; i >= 0; i--) {\r
-                                       children = node.children;\r
-                                       idx = indexes[i];\r
-\r
-                                       if (idx <= children.length - 1) {\r
-                                               node = children[idx];\r
-                                       }\r
-                               }\r
-\r
-                               return node;\r
-                       };\r
-                       \r
-                       function setBookmarkEndPoint(start) {\r
-                               var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef;\r
-\r
-                               if (endPoint) {\r
-                                       moveLeft = endPoint.position > 0;\r
-\r
-                                       moveRng = body.createTextRange();\r
-                                       moveRng.moveToElementText(resolveIndexes(endPoint.indexes));\r
-\r
-                                       offset = endPoint.offset;\r
-                                       if (offset !== undef) {\r
-                                               moveRng.collapse(endPoint.inside || moveLeft);\r
-                                               moveRng.moveStart('character', moveLeft ? -offset : offset);\r
-                                       } else\r
-                                               moveRng.collapse(start);\r
-\r
-                                       rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng);\r
-\r
-                                       if (start)\r
-                                               rng.collapse(true);\r
-                               }\r
-                       };\r
-\r
-                       if (bookmark.start) {\r
-                               if (bookmark.start.ctrl) {\r
-                                       rng = body.createControlRange();\r
-                                       rng.addElement(resolveIndexes(bookmark.start.indexes));\r
-                                       rng.select();\r
-                               } else {\r
-                                       rng = body.createTextRange();\r
-                                       setBookmarkEndPoint(true);\r
-                                       setBookmarkEndPoint();\r
-                                       rng.select();\r
-                               }\r
-                       }\r
-               };\r
-\r
-               this.addRange = function(rng) {\r
-                       var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;\r
-\r
-                       function setEndPoint(start) {\r
-                               var container, offset, marker, tmpRng, nodes;\r
-\r
-                               marker = dom.create('a');\r
-                               container = start ? startContainer : endContainer;\r
-                               offset = start ? startOffset : endOffset;\r
-                               tmpRng = ieRng.duplicate();\r
-\r
-                               if (container == doc || container == doc.documentElement) {\r
-                                       container = body;\r
-                                       offset = 0;\r
-                               }\r
-\r
-                               if (container.nodeType == 3) {\r
-                                       container.parentNode.insertBefore(marker, container);\r
-                                       tmpRng.moveToElementText(marker);\r
-                                       tmpRng.moveStart('character', offset);\r
-                                       dom.remove(marker);\r
-                                       ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
-                               } else {\r
-                                       nodes = container.childNodes;\r
-\r
-                                       if (nodes.length) {\r
-                                               if (offset >= nodes.length) {\r
-                                                       dom.insertAfter(marker, nodes[nodes.length - 1]);\r
-                                               } else {\r
-                                                       container.insertBefore(marker, nodes[offset]);\r
-                                               }\r
-\r
-                                               tmpRng.moveToElementText(marker);\r
-                                       } else {\r
-                                               // Empty node selection for example <div>|</div>\r
-                                               marker = doc.createTextNode('\uFEFF');\r
-                                               container.appendChild(marker);\r
-                                               tmpRng.moveToElementText(marker.parentNode);\r
-                                               tmpRng.collapse(TRUE);\r
-                                       }\r
-\r
-                                       ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
-                                       dom.remove(marker);\r
-                               }\r
-                       }\r
-\r
-                       // Setup some shorter versions\r
-                       startContainer = rng.startContainer;\r
-                       startOffset = rng.startOffset;\r
-                       endContainer = rng.endContainer;\r
-                       endOffset = rng.endOffset;\r
-                       ieRng = body.createTextRange();\r
-\r
-                       // If single element selection then try making a control selection out of it\r
-                       if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {\r
-                               if (startOffset == endOffset - 1) {\r
-                                       try {\r
-                                               ctrlRng = body.createControlRange();\r
-                                               ctrlRng.addElement(startContainer.childNodes[startOffset]);\r
-                                               ctrlRng.select();\r
-                                               return;\r
-                                       } catch (ex) {\r
-                                               // Ignore\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       // Set start/end point of selection\r
-                       setEndPoint(true);\r
-                       setEndPoint();\r
-\r
-                       // Select the new range and scroll it into view\r
-                       ieRng.select();\r
-               };\r
-\r
-               // Expose range method\r
-               this.getRangeAt = getRange;\r
-       };\r
-\r
-       // Expose the selection object\r
-       tinymce.dom.TridentSelection = Selection;\r
-})();\r
-\r
-\r
-/*\r
- * Sizzle CSS Selector Engine - v1.0\r
- *  Copyright 2009, The Dojo Foundation\r
- *  Released under the MIT, BSD, and GPL Licenses.\r
- *  More information: http://sizzlejs.com/\r
- */\r
-(function(){\r
-\r
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,\r
-       done = 0,\r
-       toString = Object.prototype.toString,\r
-       hasDuplicate = false,\r
-       baseHasDuplicate = true;\r
-\r
-// Here we check if the JavaScript engine is using some sort of\r
-// optimization where it does not always call our comparision\r
-// function. If that is the case, discard the hasDuplicate value.\r
-//   Thus far that includes Google Chrome.\r
-[0, 0].sort(function(){\r
-       baseHasDuplicate = false;\r
-       return 0;\r
-});\r
-\r
-var Sizzle = function(selector, context, results, seed) {\r
-       results = results || [];\r
-       context = context || document;\r
-\r
-       var origContext = context;\r
-\r
-       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {\r
-               return [];\r
-       }\r
-       \r
-       if ( !selector || typeof selector !== "string" ) {\r
-               return results;\r
-       }\r
-\r
-       var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),\r
-               soFar = selector, ret, cur, pop, i;\r
-       \r
-       // Reset the position of the chunker regexp (start from head)\r
-       do {\r
-               chunker.exec("");\r
-               m = chunker.exec(soFar);\r
-\r
-               if ( m ) {\r
-                       soFar = m[3];\r
-               \r
-                       parts.push( m[1] );\r
-               \r
-                       if ( m[2] ) {\r
-                               extra = m[3];\r
-                               break;\r
-                       }\r
-               }\r
-       } while ( m );\r
-\r
-       if ( parts.length > 1 && origPOS.exec( selector ) ) {\r
-               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\r
-                       set = posProcess( parts[0] + parts[1], context );\r
-               } else {\r
-                       set = Expr.relative[ parts[0] ] ?\r
-                               [ context ] :\r
-                               Sizzle( parts.shift(), context );\r
-\r
-                       while ( parts.length ) {\r
-                               selector = parts.shift();\r
-\r
-                               if ( Expr.relative[ selector ] ) {\r
-                                       selector += parts.shift();\r
-                               }\r
-                               \r
-                               set = posProcess( selector, set );\r
-                       }\r
-               }\r
-       } else {\r
-               // Take a shortcut and set the context if the root selector is an ID\r
-               // (but not if it'll be faster if the inner selector is an ID)\r
-               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\r
-                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\r
-                       ret = Sizzle.find( parts.shift(), context, contextXML );\r
-                       context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];\r
-               }\r
-\r
-               if ( context ) {\r
-                       ret = seed ?\r
-                               { expr: parts.pop(), set: makeArray(seed) } :\r
-                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );\r
-                       set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;\r
-\r
-                       if ( parts.length > 0 ) {\r
-                               checkSet = makeArray(set);\r
-                       } else {\r
-                               prune = false;\r
-                       }\r
-\r
-                       while ( parts.length ) {\r
-                               cur = parts.pop();\r
-                               pop = cur;\r
-\r
-                               if ( !Expr.relative[ cur ] ) {\r
-                                       cur = "";\r
-                               } else {\r
-                                       pop = parts.pop();\r
-                               }\r
-\r
-                               if ( pop == null ) {\r
-                                       pop = context;\r
-                               }\r
-\r
-                               Expr.relative[ cur ]( checkSet, pop, contextXML );\r
-                       }\r
-               } else {\r
-                       checkSet = parts = [];\r
-               }\r
-       }\r
-\r
-       if ( !checkSet ) {\r
-               checkSet = set;\r
-       }\r
-\r
-       if ( !checkSet ) {\r
-               Sizzle.error( cur || selector );\r
-       }\r
-\r
-       if ( toString.call(checkSet) === "[object Array]" ) {\r
-               if ( !prune ) {\r
-                       results.push.apply( results, checkSet );\r
-               } else if ( context && context.nodeType === 1 ) {\r
-                       for ( i = 0; checkSet[i] != null; i++ ) {\r
-                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\r
-                                       results.push( set[i] );\r
-                               }\r
-                       }\r
-               } else {\r
-                       for ( i = 0; checkSet[i] != null; i++ ) {\r
-                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {\r
-                                       results.push( set[i] );\r
-                               }\r
-                       }\r
-               }\r
-       } else {\r
-               makeArray( checkSet, results );\r
-       }\r
-\r
-       if ( extra ) {\r
-               Sizzle( extra, origContext, results, seed );\r
-               Sizzle.uniqueSort( results );\r
-       }\r
-\r
-       return results;\r
-};\r
-\r
-Sizzle.uniqueSort = function(results){\r
-       if ( sortOrder ) {\r
-               hasDuplicate = baseHasDuplicate;\r
-               results.sort(sortOrder);\r
-\r
-               if ( hasDuplicate ) {\r
-                       for ( var i = 1; i < results.length; i++ ) {\r
-                               if ( results[i] === results[i-1] ) {\r
-                                       results.splice(i--, 1);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       return results;\r
-};\r
-\r
-Sizzle.matches = function(expr, set){\r
-       return Sizzle(expr, null, null, set);\r
-};\r
-\r
-Sizzle.find = function(expr, context, isXML){\r
-       var set;\r
-\r
-       if ( !expr ) {\r
-               return [];\r
-       }\r
-\r
-       for ( var i = 0, l = Expr.order.length; i < l; i++ ) {\r
-               var type = Expr.order[i], match;\r
-               \r
-               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\r
-                       var left = match[1];\r
-                       match.splice(1,1);\r
-\r
-                       if ( left.substr( left.length - 1 ) !== "\\" ) {\r
-                               match[1] = (match[1] || "").replace(/\\/g, "");\r
-                               set = Expr.find[ type ]( match, context, isXML );\r
-                               if ( set != null ) {\r
-                                       expr = expr.replace( Expr.match[ type ], "" );\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       if ( !set ) {\r
-               set = context.getElementsByTagName("*");\r
-       }\r
-\r
-       return {set: set, expr: expr};\r
-};\r
-\r
-Sizzle.filter = function(expr, set, inplace, not){\r
-       var old = expr, result = [], curLoop = set, match, anyFound,\r
-               isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);\r
-\r
-       while ( expr && set.length ) {\r
-               for ( var type in Expr.filter ) {\r
-                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\r
-                               var filter = Expr.filter[ type ], found, item, left = match[1];\r
-                               anyFound = false;\r
-\r
-                               match.splice(1,1);\r
-\r
-                               if ( left.substr( left.length - 1 ) === "\\" ) {\r
-                                       continue;\r
-                               }\r
-\r
-                               if ( curLoop === result ) {\r
-                                       result = [];\r
-                               }\r
-\r
-                               if ( Expr.preFilter[ type ] ) {\r
-                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\r
-\r
-                                       if ( !match ) {\r
-                                               anyFound = found = true;\r
-                                       } else if ( match === true ) {\r
-                                               continue;\r
-                                       }\r
-                               }\r
-\r
-                               if ( match ) {\r
-                                       for ( var i = 0; (item = curLoop[i]) != null; i++ ) {\r
-                                               if ( item ) {\r
-                                                       found = filter( item, match, i, curLoop );\r
-                                                       var pass = not ^ !!found;\r
-\r
-                                                       if ( inplace && found != null ) {\r
-                                                               if ( pass ) {\r
-                                                                       anyFound = true;\r
-                                                               } else {\r
-                                                                       curLoop[i] = false;\r
-                                                               }\r
-                                                       } else if ( pass ) {\r
-                                                               result.push( item );\r
-                                                               anyFound = true;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               if ( found !== undefined ) {\r
-                                       if ( !inplace ) {\r
-                                               curLoop = result;\r
-                                       }\r
-\r
-                                       expr = expr.replace( Expr.match[ type ], "" );\r
-\r
-                                       if ( !anyFound ) {\r
-                                               return [];\r
-                                       }\r
-\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               // Improper expression\r
-               if ( expr === old ) {\r
-                       if ( anyFound == null ) {\r
-                               Sizzle.error( expr );\r
-                       } else {\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               old = expr;\r
-       }\r
-\r
-       return curLoop;\r
-};\r
-\r
-Sizzle.error = function( msg ) {\r
-       throw "Syntax error, unrecognized expression: " + msg;\r
-};\r
-\r
-var Expr = Sizzle.selectors = {\r
-       order: [ "ID", "NAME", "TAG" ],\r
-       match: {\r
-               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,\r
-               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,\r
-               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,\r
-               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,\r
-               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,\r
-               CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,\r
-               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,\r
-               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/\r
-       },\r
-       leftMatch: {},\r
-       attrMap: {\r
-               "class": "className",\r
-               "for": "htmlFor"\r
-       },\r
-       attrHandle: {\r
-               href: function(elem){\r
-                       return elem.getAttribute("href");\r
-               }\r
-       },\r
-       relative: {\r
-               "+": function(checkSet, part){\r
-                       var isPartStr = typeof part === "string",\r
-                               isTag = isPartStr && !/\W/.test(part),\r
-                               isPartStrNotTag = isPartStr && !isTag;\r
-\r
-                       if ( isTag ) {\r
-                               part = part.toLowerCase();\r
-                       }\r
-\r
-                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\r
-                               if ( (elem = checkSet[i]) ) {\r
-                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\r
-\r
-                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\r
-                                               elem || false :\r
-                                               elem === part;\r
-                               }\r
-                       }\r
-\r
-                       if ( isPartStrNotTag ) {\r
-                               Sizzle.filter( part, checkSet, true );\r
-                       }\r
-               },\r
-               ">": function(checkSet, part){\r
-                       var isPartStr = typeof part === "string",\r
-                               elem, i = 0, l = checkSet.length;\r
-\r
-                       if ( isPartStr && !/\W/.test(part) ) {\r
-                               part = part.toLowerCase();\r
-\r
-                               for ( ; i < l; i++ ) {\r
-                                       elem = checkSet[i];\r
-                                       if ( elem ) {\r
-                                               var parent = elem.parentNode;\r
-                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\r
-                                       }\r
-                               }\r
-                       } else {\r
-                               for ( ; i < l; i++ ) {\r
-                                       elem = checkSet[i];\r
-                                       if ( elem ) {\r
-                                               checkSet[i] = isPartStr ?\r
-                                                       elem.parentNode :\r
-                                                       elem.parentNode === part;\r
-                                       }\r
-                               }\r
-\r
-                               if ( isPartStr ) {\r
-                                       Sizzle.filter( part, checkSet, true );\r
-                               }\r
-                       }\r
-               },\r
-               "": function(checkSet, part, isXML){\r
-                       var doneName = done++, checkFn = dirCheck, nodeCheck;\r
-\r
-                       if ( typeof part === "string" && !/\W/.test(part) ) {\r
-                               part = part.toLowerCase();\r
-                               nodeCheck = part;\r
-                               checkFn = dirNodeCheck;\r
-                       }\r
-\r
-                       checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);\r
-               },\r
-               "~": function(checkSet, part, isXML){\r
-                       var doneName = done++, checkFn = dirCheck, nodeCheck;\r
-\r
-                       if ( typeof part === "string" && !/\W/.test(part) ) {\r
-                               part = part.toLowerCase();\r
-                               nodeCheck = part;\r
-                               checkFn = dirNodeCheck;\r
-                       }\r
-\r
-                       checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);\r
-               }\r
-       },\r
-       find: {\r
-               ID: function(match, context, isXML){\r
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {\r
-                               var m = context.getElementById(match[1]);\r
-                               return m ? [m] : [];\r
-                       }\r
-               },\r
-               NAME: function(match, context){\r
-                       if ( typeof context.getElementsByName !== "undefined" ) {\r
-                               var ret = [], results = context.getElementsByName(match[1]);\r
-\r
-                               for ( var i = 0, l = results.length; i < l; i++ ) {\r
-                                       if ( results[i].getAttribute("name") === match[1] ) {\r
-                                               ret.push( results[i] );\r
-                                       }\r
-                               }\r
-\r
-                               return ret.length === 0 ? null : ret;\r
-                       }\r
-               },\r
-               TAG: function(match, context){\r
-                       return context.getElementsByTagName(match[1]);\r
-               }\r
-       },\r
-       preFilter: {\r
-               CLASS: function(match, curLoop, inplace, result, not, isXML){\r
-                       match = " " + match[1].replace(/\\/g, "") + " ";\r
-\r
-                       if ( isXML ) {\r
-                               return match;\r
-                       }\r
-\r
-                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\r
-                               if ( elem ) {\r
-                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {\r
-                                               if ( !inplace ) {\r
-                                                       result.push( elem );\r
-                                               }\r
-                                       } else if ( inplace ) {\r
-                                               curLoop[i] = false;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       return false;\r
-               },\r
-               ID: function(match){\r
-                       return match[1].replace(/\\/g, "");\r
-               },\r
-               TAG: function(match, curLoop){\r
-                       return match[1].toLowerCase();\r
-               },\r
-               CHILD: function(match){\r
-                       if ( match[1] === "nth" ) {\r
-                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\r
-                               var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(\r
-                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||\r
-                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);\r
-\r
-                               // calculate the numbers (first)n+(last) including if they are negative\r
-                               match[2] = (test[1] + (test[2] || 1)) - 0;\r
-                               match[3] = test[3] - 0;\r
-                       }\r
-\r
-                       // TODO: Move to normal caching system\r
-                       match[0] = done++;\r
-\r
-                       return match;\r
-               },\r
-               ATTR: function(match, curLoop, inplace, result, not, isXML){\r
-                       var name = match[1].replace(/\\/g, "");\r
-                       \r
-                       if ( !isXML && Expr.attrMap[name] ) {\r
-                               match[1] = Expr.attrMap[name];\r
-                       }\r
-\r
-                       if ( match[2] === "~=" ) {\r
-                               match[4] = " " + match[4] + " ";\r
-                       }\r
-\r
-                       return match;\r
-               },\r
-               PSEUDO: function(match, curLoop, inplace, result, not){\r
-                       if ( match[1] === "not" ) {\r
-                               // If we're dealing with a complex expression, or a simple one\r
-                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {\r
-                                       match[3] = Sizzle(match[3], null, null, curLoop);\r
-                               } else {\r
-                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\r
-                                       if ( !inplace ) {\r
-                                               result.push.apply( result, ret );\r
-                                       }\r
-                                       return false;\r
-                               }\r
-                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\r
-                               return true;\r
-                       }\r
-                       \r
-                       return match;\r
-               },\r
-               POS: function(match){\r
-                       match.unshift( true );\r
-                       return match;\r
-               }\r
-       },\r
-       filters: {\r
-               enabled: function(elem){\r
-                       return elem.disabled === false && elem.type !== "hidden";\r
-               },\r
-               disabled: function(elem){\r
-                       return elem.disabled === true;\r
-               },\r
-               checked: function(elem){\r
-                       return elem.checked === true;\r
-               },\r
-               selected: function(elem){\r
-                       // Accessing this property makes selected-by-default\r
-                       // options in Safari work properly\r
-                       elem.parentNode.selectedIndex;\r
-                       return elem.selected === true;\r
-               },\r
-               parent: function(elem){\r
-                       return !!elem.firstChild;\r
-               },\r
-               empty: function(elem){\r
-                       return !elem.firstChild;\r
-               },\r
-               has: function(elem, i, match){\r
-                       return !!Sizzle( match[3], elem ).length;\r
-               },\r
-               header: function(elem){\r
-                       return (/h\d/i).test( elem.nodeName );\r
-               },\r
-               text: function(elem){\r
-                       return "text" === elem.type;\r
-               },\r
-               radio: function(elem){\r
-                       return "radio" === elem.type;\r
-               },\r
-               checkbox: function(elem){\r
-                       return "checkbox" === elem.type;\r
-               },\r
-               file: function(elem){\r
-                       return "file" === elem.type;\r
-               },\r
-               password: function(elem){\r
-                       return "password" === elem.type;\r
-               },\r
-               submit: function(elem){\r
-                       return "submit" === elem.type;\r
-               },\r
-               image: function(elem){\r
-                       return "image" === elem.type;\r
-               },\r
-               reset: function(elem){\r
-                       return "reset" === elem.type;\r
-               },\r
-               button: function(elem){\r
-                       return "button" === elem.type || elem.nodeName.toLowerCase() === "button";\r
-               },\r
-               input: function(elem){\r
-                       return (/input|select|textarea|button/i).test(elem.nodeName);\r
-               }\r
-       },\r
-       setFilters: {\r
-               first: function(elem, i){\r
-                       return i === 0;\r
-               },\r
-               last: function(elem, i, match, array){\r
-                       return i === array.length - 1;\r
-               },\r
-               even: function(elem, i){\r
-                       return i % 2 === 0;\r
-               },\r
-               odd: function(elem, i){\r
-                       return i % 2 === 1;\r
-               },\r
-               lt: function(elem, i, match){\r
-                       return i < match[3] - 0;\r
-               },\r
-               gt: function(elem, i, match){\r
-                       return i > match[3] - 0;\r
-               },\r
-               nth: function(elem, i, match){\r
-                       return match[3] - 0 === i;\r
-               },\r
-               eq: function(elem, i, match){\r
-                       return match[3] - 0 === i;\r
-               }\r
-       },\r
-       filter: {\r
-               PSEUDO: function(elem, match, i, array){\r
-                       var name = match[1], filter = Expr.filters[ name ];\r
-\r
-                       if ( filter ) {\r
-                               return filter( elem, i, match, array );\r
-                       } else if ( name === "contains" ) {\r
-                               return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;\r
-                       } else if ( name === "not" ) {\r
-                               var not = match[3];\r
-\r
-                               for ( var j = 0, l = not.length; j < l; j++ ) {\r
-                                       if ( not[j] === elem ) {\r
-                                               return false;\r
-                                       }\r
-                               }\r
-\r
-                               return true;\r
-                       } else {\r
-                               Sizzle.error( "Syntax error, unrecognized expression: " + name );\r
-                       }\r
-               },\r
-               CHILD: function(elem, match){\r
-                       var type = match[1], node = elem;\r
-                       switch (type) {\r
-                               case 'only':\r
-                               case 'first':\r
-                                       while ( (node = node.previousSibling) )  {\r
-                                               if ( node.nodeType === 1 ) { \r
-                                                       return false; \r
-                                               }\r
-                                       }\r
-                                       if ( type === "first" ) { \r
-                                               return true; \r
-                                       }\r
-                                       node = elem;\r
-                               case 'last':\r
-                                       while ( (node = node.nextSibling) )      {\r
-                                               if ( node.nodeType === 1 ) { \r
-                                                       return false; \r
-                                               }\r
-                                       }\r
-                                       return true;\r
-                               case 'nth':\r
-                                       var first = match[2], last = match[3];\r
-\r
-                                       if ( first === 1 && last === 0 ) {\r
-                                               return true;\r
-                                       }\r
-                                       \r
-                                       var doneName = match[0],\r
-                                               parent = elem.parentNode;\r
-       \r
-                                       if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {\r
-                                               var count = 0;\r
-                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {\r
-                                                       if ( node.nodeType === 1 ) {\r
-                                                               node.nodeIndex = ++count;\r
-                                                       }\r
-                                               } \r
-                                               parent.sizcache = doneName;\r
-                                       }\r
-                                       \r
-                                       var diff = elem.nodeIndex - last;\r
-                                       if ( first === 0 ) {\r
-                                               return diff === 0;\r
-                                       } else {\r
-                                               return ( diff % first === 0 && diff / first >= 0 );\r
-                                       }\r
-                       }\r
-               },\r
-               ID: function(elem, match){\r
-                       return elem.nodeType === 1 && elem.getAttribute("id") === match;\r
-               },\r
-               TAG: function(elem, match){\r
-                       return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;\r
-               },\r
-               CLASS: function(elem, match){\r
-                       return (" " + (elem.className || elem.getAttribute("class")) + " ")\r
-                               .indexOf( match ) > -1;\r
-               },\r
-               ATTR: function(elem, match){\r
-                       var name = match[1],\r
-                               result = Expr.attrHandle[ name ] ?\r
-                                       Expr.attrHandle[ name ]( elem ) :\r
-                                       elem[ name ] != null ?\r
-                                               elem[ name ] :\r
-                                               elem.getAttribute( name ),\r
-                               value = result + "",\r
-                               type = match[2],\r
-                               check = match[4];\r
-\r
-                       return result == null ?\r
-                               type === "!=" :\r
-                               type === "=" ?\r
-                               value === check :\r
-                               type === "*=" ?\r
-                               value.indexOf(check) >= 0 :\r
-                               type === "~=" ?\r
-                               (" " + value + " ").indexOf(check) >= 0 :\r
-                               !check ?\r
-                               value && result !== false :\r
-                               type === "!=" ?\r
-                               value !== check :\r
-                               type === "^=" ?\r
-                               value.indexOf(check) === 0 :\r
-                               type === "$=" ?\r
-                               value.substr(value.length - check.length) === check :\r
-                               type === "|=" ?\r
-                               value === check || value.substr(0, check.length + 1) === check + "-" :\r
-                               false;\r
-               },\r
-               POS: function(elem, match, i, array){\r
-                       var name = match[2], filter = Expr.setFilters[ name ];\r
-\r
-                       if ( filter ) {\r
-                               return filter( elem, i, match, array );\r
-                       }\r
-               }\r
-       }\r
-};\r
-\r
-var origPOS = Expr.match.POS,\r
-       fescape = function(all, num){\r
-               return "\\" + (num - 0 + 1);\r
-       };\r
-\r
-for ( var type in Expr.match ) {\r
-       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );\r
-       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );\r
-}\r
-\r
-var makeArray = function(array, results) {\r
-       array = Array.prototype.slice.call( array, 0 );\r
-\r
-       if ( results ) {\r
-               results.push.apply( results, array );\r
-               return results;\r
-       }\r
-       \r
-       return array;\r
-};\r
-\r
-// Perform a simple check to determine if the browser is capable of\r
-// converting a NodeList to an array using builtin methods.\r
-// Also verifies that the returned array holds DOM nodes\r
-// (which is not the case in the Blackberry browser)\r
-try {\r
-       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\r
-\r
-// Provide a fallback method if it does not work\r
-} catch(e){\r
-       makeArray = function(array, results) {\r
-               var ret = results || [], i = 0;\r
-\r
-               if ( toString.call(array) === "[object Array]" ) {\r
-                       Array.prototype.push.apply( ret, array );\r
-               } else {\r
-                       if ( typeof array.length === "number" ) {\r
-                               for ( var l = array.length; i < l; i++ ) {\r
-                                       ret.push( array[i] );\r
-                               }\r
-                       } else {\r
-                               for ( ; array[i]; i++ ) {\r
-                                       ret.push( array[i] );\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return ret;\r
-       };\r
-}\r
-\r
-var sortOrder;\r
-\r
-if ( document.documentElement.compareDocumentPosition ) {\r
-       sortOrder = function( a, b ) {\r
-               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\r
-                       if ( a == b ) {\r
-                               hasDuplicate = true;\r
-                       }\r
-                       return a.compareDocumentPosition ? -1 : 1;\r
-               }\r
-\r
-               var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;\r
-               if ( ret === 0 ) {\r
-                       hasDuplicate = true;\r
-               }\r
-               return ret;\r
-       };\r
-} else if ( "sourceIndex" in document.documentElement ) {\r
-       sortOrder = function( a, b ) {\r
-               if ( !a.sourceIndex || !b.sourceIndex ) {\r
-                       if ( a == b ) {\r
-                               hasDuplicate = true;\r
-                       }\r
-                       return a.sourceIndex ? -1 : 1;\r
-               }\r
-\r
-               var ret = a.sourceIndex - b.sourceIndex;\r
-               if ( ret === 0 ) {\r
-                       hasDuplicate = true;\r
-               }\r
-               return ret;\r
-       };\r
-} else if ( document.createRange ) {\r
-       sortOrder = function( a, b ) {\r
-               if ( !a.ownerDocument || !b.ownerDocument ) {\r
-                       if ( a == b ) {\r
-                               hasDuplicate = true;\r
-                       }\r
-                       return a.ownerDocument ? -1 : 1;\r
-               }\r
-\r
-               var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();\r
-               aRange.setStart(a, 0);\r
-               aRange.setEnd(a, 0);\r
-               bRange.setStart(b, 0);\r
-               bRange.setEnd(b, 0);\r
-               var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);\r
-               if ( ret === 0 ) {\r
-                       hasDuplicate = true;\r
-               }\r
-               return ret;\r
-       };\r
-}\r
-\r
-// Utility function for retreiving the text value of an array of DOM nodes\r
-Sizzle.getText = function( elems ) {\r
-       var ret = "", elem;\r
-\r
-       for ( var i = 0; elems[i]; i++ ) {\r
-               elem = elems[i];\r
-\r
-               // Get the text from text nodes and CDATA nodes\r
-               if ( elem.nodeType === 3 || elem.nodeType === 4 ) {\r
-                       ret += elem.nodeValue;\r
-\r
-               // Traverse everything else, except comment nodes\r
-               } else if ( elem.nodeType !== 8 ) {\r
-                       ret += Sizzle.getText( elem.childNodes );\r
-               }\r
-       }\r
-\r
-       return ret;\r
-};\r
-\r
-// Check to see if the browser returns elements by name when\r
-// querying by getElementById (and provide a workaround)\r
-(function(){\r
-       // We're going to inject a fake input element with a specified name\r
-       var form = document.createElement("div"),\r
-               id = "script" + (new Date()).getTime();\r
-       form.innerHTML = "<a name='" + id + "'/>";\r
-\r
-       // Inject it into the root element, check its status, and remove it quickly\r
-       var root = document.documentElement;\r
-       root.insertBefore( form, root.firstChild );\r
-\r
-       // The workaround has to do additional checks after a getElementById\r
-       // Which slows things down for other browsers (hence the branching)\r
-       if ( document.getElementById( id ) ) {\r
-               Expr.find.ID = function(match, context, isXML){\r
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {\r
-                               var m = context.getElementById(match[1]);\r
-                               return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];\r
-                       }\r
-               };\r
-\r
-               Expr.filter.ID = function(elem, match){\r
-                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");\r
-                       return elem.nodeType === 1 && node && node.nodeValue === match;\r
-               };\r
-       }\r
-\r
-       root.removeChild( form );\r
-       root = form = null; // release memory in IE\r
-})();\r
-\r
-(function(){\r
-       // Check to see if the browser returns only elements\r
-       // when doing getElementsByTagName("*")\r
-\r
-       // Create a fake element\r
-       var div = document.createElement("div");\r
-       div.appendChild( document.createComment("") );\r
-\r
-       // Make sure no comments are found\r
-       if ( div.getElementsByTagName("*").length > 0 ) {\r
-               Expr.find.TAG = function(match, context){\r
-                       var results = context.getElementsByTagName(match[1]);\r
-\r
-                       // Filter out possible comments\r
-                       if ( match[1] === "*" ) {\r
-                               var tmp = [];\r
-\r
-                               for ( var i = 0; results[i]; i++ ) {\r
-                                       if ( results[i].nodeType === 1 ) {\r
-                                               tmp.push( results[i] );\r
-                                       }\r
-                               }\r
-\r
-                               results = tmp;\r
-                       }\r
-\r
-                       return results;\r
-               };\r
-       }\r
-\r
-       // Check to see if an attribute returns normalized href attributes\r
-       div.innerHTML = "<a href='#'></a>";\r
-       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&\r
-                       div.firstChild.getAttribute("href") !== "#" ) {\r
-               Expr.attrHandle.href = function(elem){\r
-                       return elem.getAttribute("href", 2);\r
-               };\r
-       }\r
-\r
-       div = null; // release memory in IE\r
-})();\r
-\r
-if ( document.querySelectorAll ) {\r
-       (function(){\r
-               var oldSizzle = Sizzle, div = document.createElement("div");\r
-               div.innerHTML = "<p class='TEST'></p>";\r
-\r
-               // Safari can't handle uppercase or unicode characters when\r
-               // in quirks mode.\r
-               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {\r
-                       return;\r
-               }\r
-       \r
-               Sizzle = function(query, context, extra, seed){\r
-                       context = context || document;\r
-\r
-                       // Only use querySelectorAll on non-XML documents\r
-                       // (ID selectors don't work in non-HTML documents)\r
-                       if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {\r
-                               try {\r
-                                       return makeArray( context.querySelectorAll(query), extra );\r
-                               } catch(e){}\r
-                       }\r
-               \r
-                       return oldSizzle(query, context, extra, seed);\r
-               };\r
-\r
-               for ( var prop in oldSizzle ) {\r
-                       Sizzle[ prop ] = oldSizzle[ prop ];\r
-               }\r
-\r
-               div = null; // release memory in IE\r
-       })();\r
-}\r
-\r
-(function(){\r
-       var div = document.createElement("div");\r
-\r
-       div.innerHTML = "<div class='test e'></div><div class='test'></div>";\r
-\r
-       // Opera can't find a second classname (in 9.6)\r
-       // Also, make sure that getElementsByClassName actually exists\r
-       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {\r
-               return;\r
-       }\r
-\r
-       // Safari caches class attributes, doesn't catch changes (in 3.2)\r
-       div.lastChild.className = "e";\r
-\r
-       if ( div.getElementsByClassName("e").length === 1 ) {\r
-               return;\r
-       }\r
-       \r
-       Expr.order.splice(1, 0, "CLASS");\r
-       Expr.find.CLASS = function(match, context, isXML) {\r
-               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {\r
-                       return context.getElementsByClassName(match[1]);\r
-               }\r
-       };\r
-\r
-       div = null; // release memory in IE\r
-})();\r
-\r
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\r
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {\r
-               var elem = checkSet[i];\r
-               if ( elem ) {\r
-                       elem = elem[dir];\r
-                       var match = false;\r
-\r
-                       while ( elem ) {\r
-                               if ( elem.sizcache === doneName ) {\r
-                                       match = checkSet[elem.sizset];\r
-                                       break;\r
-                               }\r
-\r
-                               if ( elem.nodeType === 1 && !isXML ){\r
-                                       elem.sizcache = doneName;\r
-                                       elem.sizset = i;\r
-                               }\r
-\r
-                               if ( elem.nodeName.toLowerCase() === cur ) {\r
-                                       match = elem;\r
-                                       break;\r
-                               }\r
-\r
-                               elem = elem[dir];\r
-                       }\r
-\r
-                       checkSet[i] = match;\r
-               }\r
-       }\r
-}\r
-\r
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\r
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {\r
-               var elem = checkSet[i];\r
-               if ( elem ) {\r
-                       elem = elem[dir];\r
-                       var match = false;\r
-\r
-                       while ( elem ) {\r
-                               if ( elem.sizcache === doneName ) {\r
-                                       match = checkSet[elem.sizset];\r
-                                       break;\r
-                               }\r
-\r
-                               if ( elem.nodeType === 1 ) {\r
-                                       if ( !isXML ) {\r
-                                               elem.sizcache = doneName;\r
-                                               elem.sizset = i;\r
-                                       }\r
-                                       if ( typeof cur !== "string" ) {\r
-                                               if ( elem === cur ) {\r
-                                                       match = true;\r
-                                                       break;\r
-                                               }\r
-\r
-                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\r
-                                               match = elem;\r
-                                               break;\r
-                                       }\r
-                               }\r
-\r
-                               elem = elem[dir];\r
-                       }\r
-\r
-                       checkSet[i] = match;\r
-               }\r
-       }\r
-}\r
-\r
-Sizzle.contains = document.compareDocumentPosition ? function(a, b){\r
-       return !!(a.compareDocumentPosition(b) & 16);\r
-} : function(a, b){\r
-       return a !== b && (a.contains ? a.contains(b) : true);\r
-};\r
-\r
-Sizzle.isXML = function(elem){\r
-       // documentElement is verified for cases where it doesn't yet exist\r
-       // (such as loading iframes in IE - #4833) \r
-       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\r
-       return documentElement ? documentElement.nodeName !== "HTML" : false;\r
-};\r
-\r
-var posProcess = function(selector, context){\r
-       var tmpSet = [], later = "", match,\r
-               root = context.nodeType ? [context] : context;\r
-\r
-       // Position selectors must be done after the filter\r
-       // And so must :not(positional) so we move all PSEUDOs to the end\r
-       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {\r
-               later += match[0];\r
-               selector = selector.replace( Expr.match.PSEUDO, "" );\r
-       }\r
-\r
-       selector = Expr.relative[selector] ? selector + "*" : selector;\r
-\r
-       for ( var i = 0, l = root.length; i < l; i++ ) {\r
-               Sizzle( selector, root[i], tmpSet );\r
-       }\r
-\r
-       return Sizzle.filter( later, tmpSet );\r
-};\r
-\r
-// EXPOSE\r
-\r
-window.tinymce.dom.Sizzle = Sizzle;\r
-\r
-})();\r
-\r
-\r
-(function(tinymce) {\r
-       // Shorten names\r
-       var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;\r
-\r
-       tinymce.create('tinymce.dom.EventUtils', {\r
-               EventUtils : function() {\r
-                       this.inits = [];\r
-                       this.events = [];\r
-               },\r
-\r
-               add : function(o, n, f, s) {\r
-                       var cb, t = this, el = t.events, r;\r
-\r
-                       if (n instanceof Array) {\r
-                               r = [];\r
-\r
-                               each(n, function(n) {\r
-                                       r.push(t.add(o, n, f, s));\r
-                               });\r
-\r
-                               return r;\r
-                       }\r
-\r
-                       // Handle array\r
-                       if (o && o.hasOwnProperty && o instanceof Array) {\r
-                               r = [];\r
-\r
-                               each(o, function(o) {\r
-                                       o = DOM.get(o);\r
-                                       r.push(t.add(o, n, f, s));\r
-                               });\r
-\r
-                               return r;\r
-                       }\r
-\r
-                       o = DOM.get(o);\r
-\r
-                       if (!o)\r
-                               return;\r
-\r
-                       // Setup event callback\r
-                       cb = function(e) {\r
-                               // Is all events disabled\r
-                               if (t.disabled)\r
-                                       return;\r
-\r
-                               e = e || window.event;\r
-\r
-                               // Patch in target, preventDefault and stopPropagation in IE it's W3C valid\r
-                               if (e && isIE) {\r
-                                       if (!e.target)\r
-                                               e.target = e.srcElement;\r
-\r
-                                       // Patch in preventDefault, stopPropagation methods for W3C compatibility\r
-                                       tinymce.extend(e, t._stoppers);\r
-                               }\r
-\r
-                               if (!s)\r
-                                       return f(e);\r
-\r
-                               return f.call(s, e);\r
-                       };\r
-\r
-                       if (n == 'unload') {\r
-                               tinymce.unloads.unshift({func : cb});\r
-                               return cb;\r
-                       }\r
-\r
-                       if (n == 'init') {\r
-                               if (t.domLoaded)\r
-                                       cb();\r
-                               else\r
-                                       t.inits.push(cb);\r
-\r
-                               return cb;\r
-                       }\r
-\r
-                       // Store away listener reference\r
-                       el.push({\r
-                               obj : o,\r
-                               name : n,\r
-                               func : f,\r
-                               cfunc : cb,\r
-                               scope : s\r
-                       });\r
-\r
-                       t._add(o, n, cb);\r
-\r
-                       return f;\r
-               },\r
-\r
-               remove : function(o, n, f) {\r
-                       var t = this, a = t.events, s = false, r;\r
-\r
-                       // Handle array\r
-                       if (o && o.hasOwnProperty && o instanceof Array) {\r
-                               r = [];\r
-\r
-                               each(o, function(o) {\r
-                                       o = DOM.get(o);\r
-                                       r.push(t.remove(o, n, f));\r
-                               });\r
-\r
-                               return r;\r
-                       }\r
-\r
-                       o = DOM.get(o);\r
-\r
-                       each(a, function(e, i) {\r
-                               if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {\r
-                                       a.splice(i, 1);\r
-                                       t._remove(o, n, e.cfunc);\r
-                                       s = true;\r
-                                       return false;\r
-                               }\r
-                       });\r
-\r
-                       return s;\r
-               },\r
-\r
-               clear : function(o) {\r
-                       var t = this, a = t.events, i, e;\r
-\r
-                       if (o) {\r
-                               o = DOM.get(o);\r
-\r
-                               for (i = a.length - 1; i >= 0; i--) {\r
-                                       e = a[i];\r
-\r
-                                       if (e.obj === o) {\r
-                                               t._remove(e.obj, e.name, e.cfunc);\r
-                                               e.obj = e.cfunc = null;\r
-                                               a.splice(i, 1);\r
-                                       }\r
-                               }\r
-                       }\r
-               },\r
-\r
-               cancel : function(e) {\r
-                       if (!e)\r
-                               return false;\r
-\r
-                       this.stop(e);\r
-\r
-                       return this.prevent(e);\r
-               },\r
-\r
-               stop : function(e) {\r
-                       if (e.stopPropagation)\r
-                               e.stopPropagation();\r
-                       else\r
-                               e.cancelBubble = true;\r
-\r
-                       return false;\r
-               },\r
-\r
-               prevent : function(e) {\r
-                       if (e.preventDefault)\r
-                               e.preventDefault();\r
-                       else\r
-                               e.returnValue = false;\r
-\r
-                       return false;\r
-               },\r
-\r
-               destroy : function() {\r
-                       var t = this;\r
-\r
-                       each(t.events, function(e, i) {\r
-                               t._remove(e.obj, e.name, e.cfunc);\r
-                               e.obj = e.cfunc = null;\r
-                       });\r
-\r
-                       t.events = [];\r
-                       t = null;\r
-               },\r
-\r
-               _add : function(o, n, f) {\r
-                       if (o.attachEvent)\r
-                               o.attachEvent('on' + n, f);\r
-                       else if (o.addEventListener)\r
-                               o.addEventListener(n, f, false);\r
-                       else\r
-                               o['on' + n] = f;\r
-               },\r
-\r
-               _remove : function(o, n, f) {\r
-                       if (o) {\r
-                               try {\r
-                                       if (o.detachEvent)\r
-                                               o.detachEvent('on' + n, f);\r
-                                       else if (o.removeEventListener)\r
-                                               o.removeEventListener(n, f, false);\r
-                                       else\r
-                                               o['on' + n] = null;\r
-                               } catch (ex) {\r
-                                       // Might fail with permission denined on IE so we just ignore that\r
-                               }\r
-                       }\r
-               },\r
-\r
-               _pageInit : function(win) {\r
-                       var t = this;\r
-\r
-                       // Keep it from running more than once\r
-                       if (t.domLoaded)\r
-                               return;\r
-\r
-                       t.domLoaded = true;\r
-\r
-                       each(t.inits, function(c) {\r
-                               c();\r
-                       });\r
-\r
-                       t.inits = [];\r
-               },\r
-\r
-               _wait : function(win) {\r
-                       var t = this, doc = win.document;\r
-\r
-                       // No need since the document is already loaded\r
-                       if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {\r
-                               t.domLoaded = 1;\r
-                               return;\r
-                       }\r
-\r
-                       // Use IE method\r
-                       if (doc.attachEvent) {\r
-                               doc.attachEvent("onreadystatechange", function() {\r
-                                       if (doc.readyState === "complete") {\r
-                                               doc.detachEvent("onreadystatechange", arguments.callee);\r
-                                               t._pageInit(win);\r
-                                       }\r
-                               });\r
-\r
-                               if (doc.documentElement.doScroll && win == win.top) {\r
-                                       (function() {\r
-                                               if (t.domLoaded)\r
-                                                       return;\r
-\r
-                                               try {\r
-                                                       // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author.\r
-                                                       // http://javascript.nwbox.com/IEContentLoaded/\r
-                                                       doc.documentElement.doScroll("left");\r
-                                               } catch (ex) {\r
-                                                       setTimeout(arguments.callee, 0);\r
-                                                       return;\r
-                                               }\r
-\r
-                                               t._pageInit(win);\r
-                                       })();\r
-                               }\r
-                       } else if (doc.addEventListener) {\r
-                               t._add(win, 'DOMContentLoaded', function() {\r
-                                       t._pageInit(win);\r
-                               });\r
-                       }\r
-\r
-                       t._add(win, 'load', function() {\r
-                               t._pageInit(win);\r
-                       });\r
-               },\r
-\r
-               _stoppers : {\r
-                       preventDefault : function() {\r
-                               this.returnValue = false;\r
-                       },\r
-\r
-                       stopPropagation : function() {\r
-                               this.cancelBubble = true;\r
-                       }\r
-               }\r
-       });\r
-\r
-       Event = tinymce.dom.Event = new tinymce.dom.EventUtils();\r
-\r
-       // Dispatch DOM content loaded event for IE and Safari\r
-       Event._wait(window);\r
-\r
-       tinymce.addUnload(function() {\r
-               Event.destroy();\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       tinymce.dom.Element = function(id, settings) {\r
-               var t = this, dom, el;\r
-\r
-               t.settings = settings = settings || {};\r
-               t.id = id;\r
-               t.dom = dom = settings.dom || tinymce.DOM;\r
-\r
-               // Only IE leaks DOM references, this is a lot faster\r
-               if (!tinymce.isIE)\r
-                       el = dom.get(t.id);\r
-\r
-               tinymce.each(\r
-                               ('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + \r
-                               'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + \r
-                               'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + \r
-                               'isHidden,setHTML,get').split(/,/)\r
-                       , function(k) {\r
-                               t[k] = function() {\r
-                                       var a = [id], i;\r
-\r
-                                       for (i = 0; i < arguments.length; i++)\r
-                                               a.push(arguments[i]);\r
-\r
-                                       a = dom[k].apply(dom, a);\r
-                                       t.update(k);\r
-\r
-                                       return a;\r
-                               };\r
-               });\r
-\r
-               tinymce.extend(t, {\r
-                       on : function(n, f, s) {\r
-                               return tinymce.dom.Event.add(t.id, n, f, s);\r
-                       },\r
-\r
-                       getXY : function() {\r
-                               return {\r
-                                       x : parseInt(t.getStyle('left')),\r
-                                       y : parseInt(t.getStyle('top'))\r
-                               };\r
-                       },\r
-\r
-                       getSize : function() {\r
-                               var n = dom.get(t.id);\r
-\r
-                               return {\r
-                                       w : parseInt(t.getStyle('width') || n.clientWidth),\r
-                                       h : parseInt(t.getStyle('height') || n.clientHeight)\r
-                               };\r
-                       },\r
-\r
-                       moveTo : function(x, y) {\r
-                               t.setStyles({left : x, top : y});\r
-                       },\r
-\r
-                       moveBy : function(x, y) {\r
-                               var p = t.getXY();\r
-\r
-                               t.moveTo(p.x + x, p.y + y);\r
-                       },\r
-\r
-                       resizeTo : function(w, h) {\r
-                               t.setStyles({width : w, height : h});\r
-                       },\r
-\r
-                       resizeBy : function(w, h) {\r
-                               var s = t.getSize();\r
-\r
-                               t.resizeTo(s.w + w, s.h + h);\r
-                       },\r
-\r
-                       update : function(k) {\r
-                               var b;\r
-\r
-                               if (tinymce.isIE6 && settings.blocker) {\r
-                                       k = k || '';\r
-\r
-                                       // Ignore getters\r
-                                       if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)\r
-                                               return;\r
-\r
-                                       // Remove blocker on remove\r
-                                       if (k == 'remove') {\r
-                                               dom.remove(t.blocker);\r
-                                               return;\r
-                                       }\r
-\r
-                                       if (!t.blocker) {\r
-                                               t.blocker = dom.uniqueId();\r
-                                               b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});\r
-                                               dom.setStyle(b, 'opacity', 0);\r
-                                       } else\r
-                                               b = dom.get(t.blocker);\r
-\r
-                                       dom.setStyles(b, {\r
-                                               left : t.getStyle('left', 1),\r
-                                               top : t.getStyle('top', 1),\r
-                                               width : t.getStyle('width', 1),\r
-                                               height : t.getStyle('height', 1),\r
-                                               display : t.getStyle('display', 1),\r
-                                               zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1\r
-                                       });\r
-                               }\r
-                       }\r
-               });\r
-       };\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       function trimNl(s) {\r
-               return s.replace(/[\n\r]+/g, '');\r
-       };\r
-\r
-       // Shorten names\r
-       var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.dom.Selection', {\r
-               Selection : function(dom, win, serializer) {\r
-                       var t = this;\r
-\r
-                       t.dom = dom;\r
-                       t.win = win;\r
-                       t.serializer = serializer;\r
-\r
-                       // Add events\r
-                       each([\r
-                               'onBeforeSetContent',\r
-\r
-                               'onBeforeGetContent',\r
-\r
-                               'onSetContent',\r
-\r
-                               'onGetContent'\r
-                       ], function(e) {\r
-                               t[e] = new tinymce.util.Dispatcher(t);\r
-                       });\r
-\r
-                       // No W3C Range support\r
-                       if (!t.win.getSelection)\r
-                               t.tridentSel = new tinymce.dom.TridentSelection(t);\r
-\r
-                       if (tinymce.isIE && dom.boxModel)\r
-                               this._fixIESelection();\r
-\r
-                       // Prevent leaks\r
-                       tinymce.addUnload(t.destroy, t);\r
-               },\r
-\r
-               getContent : function(s) {\r
-                       var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;\r
-\r
-                       s = s || {};\r
-                       wb = wa = '';\r
-                       s.get = true;\r
-                       s.format = s.format || 'html';\r
-                       s.forced_root_block = '';\r
-                       t.onBeforeGetContent.dispatch(t, s);\r
-\r
-                       if (s.format == 'text')\r
-                               return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));\r
-\r
-                       if (r.cloneContents) {\r
-                               n = r.cloneContents();\r
-\r
-                               if (n)\r
-                                       e.appendChild(n);\r
-                       } else if (is(r.item) || is(r.htmlText))\r
-                               e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
-                       else\r
-                               e.innerHTML = r.toString();\r
-\r
-                       // Keep whitespace before and after\r
-                       if (/^\s/.test(e.innerHTML))\r
-                               wb = ' ';\r
-\r
-                       if (/\s+$/.test(e.innerHTML))\r
-                               wa = ' ';\r
-\r
-                       s.getInner = true;\r
-\r
-                       s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;\r
-                       t.onGetContent.dispatch(t, s);\r
-\r
-                       return s.content;\r
-               },\r
-\r
-               setContent : function(content, args) {\r
-                       var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp;\r
-\r
-                       args = args || {format : 'html'};\r
-                       args.set = true;\r
-                       content = args.content = content;\r
-\r
-                       // Dispatch before set content event\r
-                       if (!args.no_events)\r
-                               self.onBeforeSetContent.dispatch(self, args);\r
-\r
-                       content = args.content;\r
-\r
-                       if (rng.insertNode) {\r
-                               // Make caret marker since insertNode places the caret in the beginning of text after insert\r
-                               content += '<span id="__caret">_</span>';\r
-\r
-                               // Delete and insert new node\r
-                               if (rng.startContainer == doc && rng.endContainer == doc) {\r
-                                       // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents\r
-                                       doc.body.innerHTML = content;\r
-                               } else {\r
-                                       rng.deleteContents();\r
-\r
-                                       if (doc.body.childNodes.length == 0) {\r
-                                               doc.body.innerHTML = content;\r
-                                       } else {\r
-                                               // createContextualFragment doesn't exists in IE 9 DOMRanges\r
-                                               if (rng.createContextualFragment) {\r
-                                                       rng.insertNode(rng.createContextualFragment(content));\r
-                                               } else {\r
-                                                       // Fake createContextualFragment call in IE 9\r
-                                                       frag = doc.createDocumentFragment();\r
-                                                       temp = doc.createElement('div');\r
-\r
-                                                       frag.appendChild(temp);\r
-                                                       temp.outerHTML = content;\r
-\r
-                                                       rng.insertNode(frag);\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // Move to caret marker\r
-                               caretNode = self.dom.get('__caret');\r
-\r
-                               // Make sure we wrap it compleatly, Opera fails with a simple select call\r
-                               rng = doc.createRange();\r
-                               rng.setStartBefore(caretNode);\r
-                               rng.setEndBefore(caretNode);\r
-                               self.setRng(rng);\r
-\r
-                               // Remove the caret position\r
-                               self.dom.remove('__caret');\r
-\r
-                               try {\r
-                                       self.setRng(rng);\r
-                               } catch (ex) {\r
-                                       // Might fail on Opera for some odd reason\r
-                               }\r
-                       } else {\r
-                               if (rng.item) {\r
-                                       // Delete content and get caret text selection\r
-                                       doc.execCommand('Delete', false, null);\r
-                                       rng = self.getRng();\r
-                               }\r
-\r
-                               rng.pasteHTML(content);\r
-                       }\r
-\r
-                       // Dispatch set content event\r
-                       if (!args.no_events)\r
-                               self.onSetContent.dispatch(self, args);\r
-               },\r
-\r
-               getStart : function() {\r
-                       var rng = this.getRng(), startElement, parentElement, checkRng, node;\r
-\r
-                       if (rng.duplicate || rng.item) {\r
-                               // Control selection, return first item\r
-                               if (rng.item)\r
-                                       return rng.item(0);\r
-\r
-                               // Get start element\r
-                               checkRng = rng.duplicate();\r
-                               checkRng.collapse(1);\r
-                               startElement = checkRng.parentElement();\r
-\r
-                               // Check if range parent is inside the start element, then return the inner parent element\r
-                               // This will fix issues when a single element is selected, IE would otherwise return the wrong start element\r
-                               parentElement = node = rng.parentElement();\r
-                               while (node = node.parentNode) {\r
-                                       if (node == startElement) {\r
-                                               startElement = parentElement;\r
-                                               break;\r
-                                       }\r
-                               }\r
-\r
-                               return startElement;\r
-                       } else {\r
-                               startElement = rng.startContainer;\r
-\r
-                               if (startElement.nodeType == 1 && startElement.hasChildNodes())\r
-                                       startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];\r
-\r
-                               if (startElement && startElement.nodeType == 3)\r
-                                       return startElement.parentNode;\r
-\r
-                               return startElement;\r
-                       }\r
-               },\r
-\r
-               getEnd : function() {\r
-                       var t = this, r = t.getRng(), e, eo;\r
-\r
-                       if (r.duplicate || r.item) {\r
-                               if (r.item)\r
-                                       return r.item(0);\r
-\r
-                               r = r.duplicate();\r
-                               r.collapse(0);\r
-                               e = r.parentElement();\r
-\r
-                               if (e && e.nodeName == 'BODY')\r
-                                       return e.lastChild || e;\r
-\r
-                               return e;\r
-                       } else {\r
-                               e = r.endContainer;\r
-                               eo = r.endOffset;\r
-\r
-                               if (e.nodeType == 1 && e.hasChildNodes())\r
-                                       e = e.childNodes[eo > 0 ? eo - 1 : eo];\r
-\r
-                               if (e && e.nodeType == 3)\r
-                                       return e.parentNode;\r
-\r
-                               return e;\r
-                       }\r
-               },\r
-\r
-               getBookmark : function(type, normalized) {\r
-                       var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;\r
-\r
-                       function findIndex(name, element) {\r
-                               var index = 0;\r
-\r
-                               each(dom.select(name), function(node, i) {\r
-                                       if (node == element)\r
-                                               index = i;\r
-                               });\r
-\r
-                               return index;\r
-                       };\r
-\r
-                       if (type == 2) {\r
-                               function getLocation() {\r
-                                       var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};\r
-\r
-                                       function getPoint(rng, start) {\r
-                                               var container = rng[start ? 'startContainer' : 'endContainer'],\r
-                                                       offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;\r
-\r
-                                               if (container.nodeType == 3) {\r
-                                                       if (normalized) {\r
-                                                               for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)\r
-                                                                       offset += node.nodeValue.length;\r
-                                                       }\r
-\r
-                                                       point.push(offset);\r
-                                               } else {\r
-                                                       childNodes = container.childNodes;\r
-\r
-                                                       if (offset >= childNodes.length && childNodes.length) {\r
-                                                               after = 1;\r
-                                                               offset = Math.max(0, childNodes.length - 1);\r
-                                                       }\r
-\r
-                                                       point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);\r
-                                               }\r
-\r
-                                               for (; container && container != root; container = container.parentNode)\r
-                                                       point.push(t.dom.nodeIndex(container, normalized));\r
-\r
-                                               return point;\r
-                                       };\r
-\r
-                                       bookmark.start = getPoint(rng, true);\r
-\r
-                                       if (!t.isCollapsed())\r
-                                               bookmark.end = getPoint(rng);\r
-\r
-                                       return bookmark;\r
-                               };\r
-\r
-                               if (t.tridentSel)\r
-                                       return t.tridentSel.getBookmark(type);\r
-\r
-                               return getLocation();\r
-                       }\r
-\r
-                       // Handle simple range\r
-                       if (type)\r
-                               return {rng : t.getRng()};\r
-\r
-                       rng = t.getRng();\r
-                       id = dom.uniqueId();\r
-                       collapsed = tinyMCE.activeEditor.selection.isCollapsed();\r
-                       styles = 'overflow:hidden;line-height:0px';\r
-\r
-                       // Explorer method\r
-                       if (rng.duplicate || rng.item) {\r
-                               // Text selection\r
-                               if (!rng.item) {\r
-                                       rng2 = rng.duplicate();\r
-\r
-                                       try {\r
-                                               // Insert start marker\r
-                                               rng.collapse();\r
-                                               rng.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');\r
-\r
-                                               // Insert end marker\r
-                                               if (!collapsed) {\r
-                                                       rng2.collapse(false);\r
-\r
-                                                       // Detect the empty space after block elements in IE and move the end back one character <p></p>] becomes <p>]</p>\r
-                                                       rng.moveToElementText(rng2.parentElement());\r
-                                                       if (rng.compareEndPoints('StartToEnd', rng2) == 0)\r
-                                                               rng2.move('character', -1);\r
-\r
-                                                       rng2.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');\r
-                                               }\r
-                                       } catch (ex) {\r
-                                               // IE might throw unspecified error so lets ignore it\r
-                                               return null;\r
-                                       }\r
-                               } else {\r
-                                       // Control selection\r
-                                       element = rng.item(0);\r
-                                       name = element.nodeName;\r
-\r
-                                       return {name : name, index : findIndex(name, element)};\r
-                               }\r
-                       } else {\r
-                               element = t.getNode();\r
-                               name = element.nodeName;\r
-                               if (name == 'IMG')\r
-                                       return {name : name, index : findIndex(name, element)};\r
-\r
-                               // W3C method\r
-                               rng2 = rng.cloneRange();\r
-\r
-                               // Insert end marker\r
-                               if (!collapsed) {\r
-                                       rng2.collapse(false);\r
-                                       rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr));\r
-                               }\r
-\r
-                               rng.collapse(true);\r
-                               rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr));\r
-                       }\r
-\r
-                       t.moveToBookmark({id : id, keep : 1});\r
-\r
-                       return {id : id};\r
-               },\r
-\r
-               moveToBookmark : function(bookmark) {\r
-                       var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;\r
-\r
-                       if (bookmark) {\r
-                               if (bookmark.start) {\r
-                                       rng = dom.createRng();\r
-                                       root = dom.getRoot();\r
-\r
-                                       function setEndPoint(start) {\r
-                                               var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;\r
-\r
-                                               if (point) {\r
-                                                       offset = point[0];\r
-\r
-                                                       // Find container node\r
-                                                       for (node = root, i = point.length - 1; i >= 1; i--) {\r
-                                                               children = node.childNodes;\r
-\r
-                                                               if (point[i] > children.length - 1)\r
-                                                                       return;\r
-\r
-                                                               node = children[point[i]];\r
-                                                       }\r
-\r
-                                                       // Move text offset to best suitable location\r
-                                                       if (node.nodeType === 3)\r
-                                                               offset = Math.min(point[0], node.nodeValue.length);\r
-\r
-                                                       // Move element offset to best suitable location\r
-                                                       if (node.nodeType === 1)\r
-                                                               offset = Math.min(point[0], node.childNodes.length);\r
-\r
-                                                       // Set offset within container node\r
-                                                       if (start)\r
-                                                               rng.setStart(node, offset);\r
-                                                       else\r
-                                                               rng.setEnd(node, offset);\r
-                                               }\r
-\r
-                                               return true;\r
-                                       };\r
-\r
-                                       if (t.tridentSel)\r
-                                               return t.tridentSel.moveToBookmark(bookmark);\r
-\r
-                                       if (setEndPoint(true) && setEndPoint()) {\r
-                                               t.setRng(rng);\r
-                                       }\r
-                               } else if (bookmark.id) {\r
-                                       function restoreEndPoint(suffix) {\r
-                                               var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;\r
-\r
-                                               if (marker) {\r
-                                                       node = marker.parentNode;\r
-\r
-                                                       if (suffix == 'start') {\r
-                                                               if (!keep) {\r
-                                                                       idx = dom.nodeIndex(marker);\r
-                                                               } else {\r
-                                                                       node = marker.firstChild;\r
-                                                                       idx = 1;\r
-                                                               }\r
-\r
-                                                               startContainer = endContainer = node;\r
-                                                               startOffset = endOffset = idx;\r
-                                                       } else {\r
-                                                               if (!keep) {\r
-                                                                       idx = dom.nodeIndex(marker);\r
-                                                               } else {\r
-                                                                       node = marker.firstChild;\r
-                                                                       idx = 1;\r
-                                                               }\r
-\r
-                                                               endContainer = node;\r
-                                                               endOffset = idx;\r
-                                                       }\r
-\r
-                                                       if (!keep) {\r
-                                                               prev = marker.previousSibling;\r
-                                                               next = marker.nextSibling;\r
-\r
-                                                               // Remove all marker text nodes\r
-                                                               each(tinymce.grep(marker.childNodes), function(node) {\r
-                                                                       if (node.nodeType == 3)\r
-                                                                               node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');\r
-                                                               });\r
-\r
-                                                               // Remove marker but keep children if for example contents where inserted into the marker\r
-                                                               // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature\r
-                                                               while (marker = dom.get(bookmark.id + '_' + suffix))\r
-                                                                       dom.remove(marker, 1);\r
-\r
-                                                               // If siblings are text nodes then merge them unless it's Opera since it some how removes the node\r
-                                                               // and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact\r
-                                                               if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {\r
-                                                                       idx = prev.nodeValue.length;\r
-                                                                       prev.appendData(next.nodeValue);\r
-                                                                       dom.remove(next);\r
-\r
-                                                                       if (suffix == 'start') {\r
-                                                                               startContainer = endContainer = prev;\r
-                                                                               startOffset = endOffset = idx;\r
-                                                                       } else {\r
-                                                                               endContainer = prev;\r
-                                                                               endOffset = idx;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       };\r
-\r
-                                       function addBogus(node) {\r
-                                               // Adds a bogus BR element for empty block elements or just a space on IE since it renders BR elements incorrectly\r
-                                               if (dom.isBlock(node) && !node.innerHTML)\r
-                                                       node.innerHTML = !isIE ? '<br data-mce-bogus="1" />' : ' ';\r
-\r
-                                               return node;\r
-                                       };\r
-\r
-                                       // Restore start/end points\r
-                                       restoreEndPoint('start');\r
-                                       restoreEndPoint('end');\r
-\r
-                                       if (startContainer) {\r
-                                               rng = dom.createRng();\r
-                                               rng.setStart(addBogus(startContainer), startOffset);\r
-                                               rng.setEnd(addBogus(endContainer), endOffset);\r
-                                               t.setRng(rng);\r
-                                       }\r
-                               } else if (bookmark.name) {\r
-                                       t.select(dom.select(bookmark.name)[bookmark.index]);\r
-                               } else if (bookmark.rng)\r
-                                       t.setRng(bookmark.rng);\r
-                       }\r
-               },\r
-\r
-               select : function(node, content) {\r
-                       var t = this, dom = t.dom, rng = dom.createRng(), idx;\r
-\r
-                       if (node) {\r
-                               idx = dom.nodeIndex(node);\r
-                               rng.setStart(node.parentNode, idx);\r
-                               rng.setEnd(node.parentNode, idx + 1);\r
-\r
-                               // Find first/last text node or BR element\r
-                               if (content) {\r
-                                       function setPoint(node, start) {\r
-                                               var walker = new tinymce.dom.TreeWalker(node, node);\r
-\r
-                                               do {\r
-                                                       // Text node\r
-                                                       if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
-                                                               if (start)\r
-                                                                       rng.setStart(node, 0);\r
-                                                               else\r
-                                                                       rng.setEnd(node, node.nodeValue.length);\r
-\r
-                                                               return;\r
-                                                       }\r
-\r
-                                                       // BR element\r
-                                                       if (node.nodeName == 'BR') {\r
-                                                               if (start)\r
-                                                                       rng.setStartBefore(node);\r
-                                                               else\r
-                                                                       rng.setEndBefore(node);\r
-\r
-                                                               return;\r
-                                                       }\r
-                                               } while (node = (start ? walker.next() : walker.prev()));\r
-                                       };\r
-\r
-                                       setPoint(node, 1);\r
-                                       setPoint(node);\r
-                               }\r
-\r
-                               t.setRng(rng);\r
-                       }\r
-\r
-                       return node;\r
-               },\r
-\r
-               isCollapsed : function() {\r
-                       var t = this, r = t.getRng(), s = t.getSel();\r
-\r
-                       if (!r || r.item)\r
-                               return false;\r
-\r
-                       if (r.compareEndPoints)\r
-                               return r.compareEndPoints('StartToEnd', r) === 0;\r
-\r
-                       return !s || r.collapsed;\r
-               },\r
-\r
-               collapse : function(to_start) {\r
-                       var self = this, rng = self.getRng(), node;\r
-\r
-                       // Control range on IE\r
-                       if (rng.item) {\r
-                               node = rng.item(0);\r
-                               rng = self.win.document.body.createTextRange();\r
-                               rng.moveToElementText(node);\r
-                       }\r
-\r
-                       rng.collapse(!!to_start);\r
-                       self.setRng(rng);\r
-               },\r
-\r
-               getSel : function() {\r
-                       var t = this, w = this.win;\r
-\r
-                       return w.getSelection ? w.getSelection() : w.document.selection;\r
-               },\r
-\r
-               getRng : function(w3c) {\r
-                       var t = this, s, r, elm, doc = t.win.document;\r
-\r
-                       // Found tridentSel object then we need to use that one\r
-                       if (w3c && t.tridentSel)\r
-                               return t.tridentSel.getRangeAt(0);\r
-\r
-                       try {\r
-                               if (s = t.getSel())\r
-                                       r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());\r
-                       } catch (ex) {\r
-                               // IE throws unspecified error here if TinyMCE is placed in a frame/iframe\r
-                       }\r
-\r
-                       // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet\r
-                       if (tinymce.isIE && r && r.setStart && doc.selection.createRange().item) {\r
-                               elm = doc.selection.createRange().item(0);\r
-                               r = doc.createRange();\r
-                               r.setStartBefore(elm);\r
-                               r.setEndAfter(elm);\r
-                       }\r
-\r
-                       // No range found then create an empty one\r
-                       // This can occur when the editor is placed in a hidden container element on Gecko\r
-                       // Or on IE when there was an exception\r
-                       if (!r)\r
-                               r = doc.createRange ? doc.createRange() : doc.body.createTextRange();\r
-\r
-                       if (t.selectedRange && t.explicitRange) {\r
-                               if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {\r
-                                       // Safari, Opera and Chrome only ever select text which causes the range to change.\r
-                                       // This lets us use the originally set range if the selection hasn't been changed by the user.\r
-                                       r = t.explicitRange;\r
-                               } else {\r
-                                       t.selectedRange = null;\r
-                                       t.explicitRange = null;\r
-                               }\r
-                       }\r
-\r
-                       return r;\r
-               },\r
-\r
-               setRng : function(r) {\r
-                       var s, t = this;\r
-                       \r
-                       if (!t.tridentSel) {\r
-                               s = t.getSel();\r
-\r
-                               if (s) {\r
-                                       t.explicitRange = r;\r
-\r
-                                       try {\r
-                                               s.removeAllRanges();\r
-                                       } catch (ex) {\r
-                                               // IE9 might throw errors here don't know why\r
-                                       }\r
-\r
-                                       s.addRange(r);\r
-                                       t.selectedRange = s.getRangeAt(0);\r
-                               }\r
-                       } else {\r
-                               // Is W3C Range\r
-                               if (r.cloneRange) {\r
-                                       t.tridentSel.addRange(r);\r
-                                       return;\r
-                               }\r
-\r
-                               // Is IE specific range\r
-                               try {\r
-                                       r.select();\r
-                               } catch (ex) {\r
-                                       // Needed for some odd IE bug #1843306\r
-                               }\r
-                       }\r
-               },\r
-\r
-               setNode : function(n) {\r
-                       var t = this;\r
-\r
-                       t.setContent(t.dom.getOuterHTML(n));\r
-\r
-                       return n;\r
-               },\r
-\r
-               getNode : function() {\r
-                       var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer;\r
-\r
-                       // Range maybe lost after the editor is made visible again\r
-                       if (!rng)\r
-                               return t.dom.getRoot();\r
-\r
-                       if (rng.setStart) {\r
-                               elm = rng.commonAncestorContainer;\r
-\r
-                               // Handle selection a image or other control like element such as anchors\r
-                               if (!rng.collapsed) {\r
-                                       if (rng.startContainer == rng.endContainer) {\r
-                                               if (rng.endOffset - rng.startOffset < 2) {\r
-                                                       if (rng.startContainer.hasChildNodes())\r
-                                                               elm = rng.startContainer.childNodes[rng.startOffset];\r
-                                               }\r
-                                       }\r
-\r
-                                       // If the anchor node is a element instead of a text node then return this element\r
-                                       //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) \r
-                                       //      return sel.anchorNode.childNodes[sel.anchorOffset];\r
-\r
-                                       // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent.\r
-                                       // This happens when you double click an underlined word in FireFox.\r
-                                       if (start.nodeType === 3 && end.nodeType === 3) {\r
-                                               function skipEmptyTextNodes(n, forwards) {\r
-                                                       var orig = n;\r
-                                                       while (n && n.nodeType === 3 && n.length === 0) {\r
-                                                               n = forwards ? n.nextSibling : n.previousSibling;\r
-                                                       }\r
-                                                       return n || orig;\r
-                                               }\r
-                                               if (start.length === rng.startOffset) {\r
-                                                       start = skipEmptyTextNodes(start.nextSibling, true);\r
-                                               } else {\r
-                                                       start = start.parentNode;\r
-                                               }\r
-                                               if (rng.endOffset === 0) {\r
-                                                       end = skipEmptyTextNodes(end.previousSibling, false);\r
-                                               } else {\r
-                                                       end = end.parentNode;\r
-                                               }\r
-\r
-                                               if (start && start === end)\r
-                                                       return start;\r
-                                       }\r
-                               }\r
-\r
-                               if (elm && elm.nodeType == 3)\r
-                                       return elm.parentNode;\r
-\r
-                               return elm;\r
-                       }\r
-\r
-                       return rng.item ? rng.item(0) : rng.parentElement();\r
-               },\r
-\r
-               getSelectedBlocks : function(st, en) {\r
-                       var t = this, dom = t.dom, sb, eb, n, bl = [];\r
-\r
-                       sb = dom.getParent(st || t.getStart(), dom.isBlock);\r
-                       eb = dom.getParent(en || t.getEnd(), dom.isBlock);\r
-\r
-                       if (sb)\r
-                               bl.push(sb);\r
-\r
-                       if (sb && eb && sb != eb) {\r
-                               n = sb;\r
-\r
-                               while ((n = n.nextSibling) && n != eb) {\r
-                                       if (dom.isBlock(n))\r
-                                               bl.push(n);\r
-                               }\r
-                       }\r
-\r
-                       if (eb && sb != eb)\r
-                               bl.push(eb);\r
-\r
-                       return bl;\r
-               },\r
-\r
-               destroy : function(s) {\r
-                       var t = this;\r
-\r
-                       t.win = null;\r
-\r
-                       // Manual destroy then remove unload handler\r
-                       if (!s)\r
-                               tinymce.removeUnload(t.destroy);\r
-               },\r
-\r
-               // IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode\r
-               _fixIESelection : function() {\r
-                       var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm;\r
-\r
-                       // Make HTML element unselectable since we are going to handle selection by hand\r
-                       doc.documentElement.unselectable = true;\r
-\r
-                       // Return range from point or null if it failed\r
-                       function rngFromPoint(x, y) {\r
-                               var rng = body.createTextRange();\r
-\r
-                               try {\r
-                                       rng.moveToPoint(x, y);\r
-                               } catch (ex) {\r
-                                       // IE sometimes throws and exception, so lets just ignore it\r
-                                       rng = null;\r
-                               }\r
-\r
-                               return rng;\r
-                       };\r
-\r
-                       // Fires while the selection is changing\r
-                       function selectionChange(e) {\r
-                               var pointRng;\r
-\r
-                               // Check if the button is down or not\r
-                               if (e.button) {\r
-                                       // Create range from mouse position\r
-                                       pointRng = rngFromPoint(e.x, e.y);\r
-\r
-                                       if (pointRng) {\r
-                                               // Check if pointRange is before/after selection then change the endPoint\r
-                                               if (pointRng.compareEndPoints('StartToStart', startRng) > 0)\r
-                                                       pointRng.setEndPoint('StartToStart', startRng);\r
-                                               else\r
-                                                       pointRng.setEndPoint('EndToEnd', startRng);\r
-\r
-                                               pointRng.select();\r
-                                       }\r
-                               } else\r
-                                       endSelection();\r
-                       }\r
-\r
-                       // Removes listeners\r
-                       function endSelection() {\r
-                               var rng = doc.selection.createRange();\r
-\r
-                               // If the range is collapsed then use the last start range\r
-                               if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0)\r
-                                       startRng.select();\r
-\r
-                               dom.unbind(doc, 'mouseup', endSelection);\r
-                               dom.unbind(doc, 'mousemove', selectionChange);\r
-                               startRng = started = 0;\r
-                       };\r
-\r
-                       // Detect when user selects outside BODY\r
-                       dom.bind(doc, ['mousedown', 'contextmenu'], function(e) {\r
-                               if (e.target.nodeName === 'HTML') {\r
-                                       if (started)\r
-                                               endSelection();\r
-\r
-                                       // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML\r
-                                       htmlElm = doc.documentElement;\r
-                                       if (htmlElm.scrollHeight > htmlElm.clientHeight)\r
-                                               return;\r
-\r
-                                       started = 1;\r
-                                       // Setup start position\r
-                                       startRng = rngFromPoint(e.x, e.y);\r
-                                       if (startRng) {\r
-                                               // Listen for selection change events\r
-                                               dom.bind(doc, 'mouseup', endSelection);\r
-                                               dom.bind(doc, 'mousemove', selectionChange);\r
-\r
-                                               dom.win.focus();\r
-                                               startRng.select();\r
-                                       }\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       tinymce.dom.Serializer = function(settings, dom, schema) {\r
-               var onPreProcess, onPostProcess, isIE = tinymce.isIE, each = tinymce.each, htmlParser;\r
-\r
-               // Support the old apply_source_formatting option\r
-               if (!settings.apply_source_formatting)\r
-                       settings.indent = false;\r
-\r
-               settings.remove_trailing_brs = true;\r
-\r
-               // Default DOM and Schema if they are undefined\r
-               dom = dom || tinymce.DOM;\r
-               schema = schema || new tinymce.html.Schema(settings);\r
-               settings.entity_encoding = settings.entity_encoding || 'named';\r
-\r
-               onPreProcess = new tinymce.util.Dispatcher(self);\r
-\r
-               onPostProcess = new tinymce.util.Dispatcher(self);\r
-\r
-               htmlParser = new tinymce.html.DomParser(settings, schema);\r
-\r
-               // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed\r
-               htmlParser.addAttributeFilter('src,href,style', function(nodes, name) {\r
-                       var i = nodes.length, node, value, internalName = 'data-mce-' + name, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef;\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-\r
-                               value = node.attributes.map[internalName];\r
-                               if (value !== undef) {\r
-                                       // Set external name to internal value and remove internal\r
-                                       node.attr(name, value.length > 0 ? value : null);\r
-                                       node.attr(internalName, null);\r
-                               } else {\r
-                                       // No internal attribute found then convert the value we have in the DOM\r
-                                       value = node.attributes.map[name];\r
-\r
-                                       if (name === "style")\r
-                                               value = dom.serializeStyle(dom.parseStyle(value), node.name);\r
-                                       else if (urlConverter)\r
-                                               value = urlConverter.call(urlConverterScope, value, name, node.name);\r
-\r
-                                       node.attr(name, value.length > 0 ? value : null);\r
-                               }\r
-                       }\r
-               });\r
-\r
-               // Remove internal classes mceItem<..>\r
-               htmlParser.addAttributeFilter('class', function(nodes, name) {\r
-                       var i = nodes.length, node, value;\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-                               value = node.attr('class').replace(/\s*mce(Item\w+|Selected)\s*/g, '');\r
-                               node.attr('class', value.length > 0 ? value : null);\r
-                       }\r
-               });\r
-\r
-               // Remove bookmark elements\r
-               htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) {\r
-                       var i = nodes.length, node;\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-\r
-                               if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup)\r
-                                       node.remove();\r
-                       }\r
-               });\r
-\r
-               // Force script into CDATA sections and remove the mce- prefix also add comments around styles\r
-               htmlParser.addNodeFilter('script,style', function(nodes, name) {\r
-                       var i = nodes.length, node, value;\r
-\r
-                       function trim(value) {\r
-                               return value.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n')\r
-                                               .replace(/^[\r\n]*|[\r\n]*$/g, '')\r
-                                               .replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g, '')\r
-                                               .replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g, '');\r
-                       };\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-                               value = node.firstChild ? node.firstChild.value : '';\r
-\r
-                               if (name === "script") {\r
-                                       // Remove mce- prefix from script elements\r
-                                       node.attr('type', (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''));\r
-\r
-                                       if (value.length > 0)\r
-                                               node.firstChild.value = '// <![CDATA[\n' + trim(value) + '\n// ]]>';\r
-                               } else {\r
-                                       if (value.length > 0)\r
-                                               node.firstChild.value = '<!--\n' + trim(value) + '\n-->';\r
-                               }\r
-                       }\r
-               });\r
-\r
-               // Convert comments to cdata and handle protected comments\r
-               htmlParser.addNodeFilter('#comment', function(nodes, name) {\r
-                       var i = nodes.length, node;\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-\r
-                               if (node.value.indexOf('[CDATA[') === 0) {\r
-                                       node.name = '#cdata';\r
-                                       node.type = 4;\r
-                                       node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, '');\r
-                               } else if (node.value.indexOf('mce:protected ') === 0) {\r
-                                       node.name = "#text";\r
-                                       node.type = 3;\r
-                                       node.raw = true;\r
-                                       node.value = unescape(node.value).substr(14);\r
-                               }\r
-                       }\r
-               });\r
-\r
-               htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) {\r
-                       var i = nodes.length, node;\r
-\r
-                       while (i--) {\r
-                               node = nodes[i];\r
-                               if (node.type === 7)\r
-                                       node.remove();\r
-                               else if (node.type === 1) {\r
-                                       if (name === "input" && !("type" in node.attributes.map))\r
-                                               node.attr('type', 'text');\r
-                               }\r
-                       }\r
-               });\r
-\r
-               // Fix list elements, TODO: Replace this later\r
-               if (settings.fix_list_elements) {\r
-                       htmlParser.addNodeFilter('ul,ol', function(nodes, name) {\r
-                               var i = nodes.length, node, parentNode;\r
-\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-                                       parentNode = node.parent;\r
-\r
-                                       if (parentNode.name === 'ul' || parentNode.name === 'ol') {\r
-                                               if (node.prev && node.prev.name === 'li') {\r
-                                                       node.prev.append(node);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       });\r
-               }\r
-\r
-               // Remove internal data attributes\r
-               htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style', function(nodes, name) {\r
-                       var i = nodes.length;\r
-\r
-                       while (i--) {\r
-                               nodes[i].attr(name, null);\r
-                       }\r
-               });\r
-\r
-               // Return public methods\r
-               return {\r
-                       schema : schema,\r
-\r
-                       addNodeFilter : htmlParser.addNodeFilter,\r
-\r
-                       addAttributeFilter : htmlParser.addAttributeFilter,\r
-\r
-                       onPreProcess : onPreProcess,\r
-\r
-                       onPostProcess : onPostProcess,\r
-\r
-                       serialize : function(node, args) {\r
-                               var impl, doc, oldDoc, htmlSerializer, content;\r
-\r
-                               // Explorer won't clone contents of script and style and the\r
-                               // selected index of select elements are cleared on a clone operation.\r
-                               if (isIE && dom.select('script,style,select').length > 0) {\r
-                                       content = node.innerHTML;\r
-                                       node = node.cloneNode(false);\r
-                                       dom.setHTML(node, content);\r
-                               } else\r
-                                       node = node.cloneNode(true);\r
-\r
-                               // Nodes needs to be attached to something in WebKit/Opera\r
-                               // Older builds of Opera crashes if you attach the node to an document created dynamically\r
-                               // and since we can't feature detect a crash we need to sniff the acutal build number\r
-                               // This fix will make DOM ranges and make Sizzle happy!\r
-                               impl = node.ownerDocument.implementation;\r
-                               if (impl.createHTMLDocument) {\r
-                                       // Create an empty HTML document\r
-                                       doc = impl.createHTMLDocument("");\r
-\r
-                                       // Add the element or it's children if it's a body element to the new document\r
-                                       each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) {\r
-                                               doc.body.appendChild(doc.importNode(node, true));\r
-                                       });\r
-\r
-                                       // Grab first child or body element for serialization\r
-                                       if (node.nodeName != 'BODY')\r
-                                               node = doc.body.firstChild;\r
-                                       else\r
-                                               node = doc.body;\r
-\r
-                                       // set the new document in DOMUtils so createElement etc works\r
-                                       oldDoc = dom.doc;\r
-                                       dom.doc = doc;\r
-                               }\r
-\r
-                               args = args || {};\r
-                               args.format = args.format || 'html';\r
-\r
-                               // Pre process\r
-                               if (!args.no_events) {\r
-                                       args.node = node;\r
-                                       onPreProcess.dispatch(self, args);\r
-                               }\r
-\r
-                               // Setup serializer\r
-                               htmlSerializer = new tinymce.html.Serializer(settings, schema);\r
-\r
-                               // Parse and serialize HTML\r
-                               args.content = htmlSerializer.serialize(\r
-                                       htmlParser.parse(args.getInner ? node.innerHTML : tinymce.trim(dom.getOuterHTML(node), args), args)\r
-                               );\r
-\r
-                               // Replace all BOM characters for now until we can find a better solution\r
-                               if (!args.cleanup)\r
-                                       args.content = args.content.replace(/\uFEFF/g, '');\r
-\r
-                               // Post process\r
-                               if (!args.no_events)\r
-                                       onPostProcess.dispatch(self, args);\r
-\r
-                               // Restore the old document if it was changed\r
-                               if (oldDoc)\r
-                                       dom.doc = oldDoc;\r
-\r
-                               args.node = null;\r
-\r
-                               return args.content;\r
-                       },\r
-\r
-                       addRules : function(rules) {\r
-                               schema.addValidElements(rules);\r
-                       },\r
-\r
-                       setRules : function(rules) {\r
-                               schema.setValidElements(rules);\r
-                       }\r
-               };\r
-       };\r
-})(tinymce);\r
-(function(tinymce) {\r
-       tinymce.dom.ScriptLoader = function(settings) {\r
-               var QUEUED = 0,\r
-                       LOADING = 1,\r
-                       LOADED = 2,\r
-                       states = {},\r
-                       queue = [],\r
-                       scriptLoadedCallbacks = {},\r
-                       queueLoadedCallbacks = [],\r
-                       loading = 0,\r
-                       undefined;\r
-\r
-               function loadScript(url, callback) {\r
-                       var t = this, dom = tinymce.DOM, elm, uri, loc, id;\r
-\r
-                       // Execute callback when script is loaded\r
-                       function done() {\r
-                               dom.remove(id);\r
-\r
-                               if (elm)\r
-                                       elm.onreadystatechange = elm.onload = elm = null;\r
-\r
-                               callback();\r
-                       };\r
-                       \r
-                       function error() {\r
-                               // Report the error so it's easier for people to spot loading errors\r
-                               if (typeof(console) !== "undefined" && console.log)\r
-                                       console.log("Failed to load: " + url);\r
-\r
-                               // We can't mark it as done if there is a load error since\r
-                               // A) We don't want to produce 404 errors on the server and\r
-                               // B) the onerror event won't fire on all browsers.\r
-                               // done();\r
-                       };\r
-\r
-                       id = dom.uniqueId();\r
-\r
-                       if (tinymce.isIE6) {\r
-                               uri = new tinymce.util.URI(url);\r
-                               loc = location;\r
-\r
-                               // If script is from same domain and we\r
-                               // use IE 6 then use XHR since it's more reliable\r
-                               if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol && uri.protocol.toLowerCase() != 'file') {\r
-                                       tinymce.util.XHR.send({\r
-                                               url : tinymce._addVer(uri.getURI()),\r
-                                               success : function(content) {\r
-                                                       // Create new temp script element\r
-                                                       var script = dom.create('script', {\r
-                                                               type : 'text/javascript'\r
-                                                       });\r
-\r
-                                                       // Evaluate script in global scope\r
-                                                       script.text = content;\r
-                                                       document.getElementsByTagName('head')[0].appendChild(script);\r
-                                                       dom.remove(script);\r
-\r
-                                                       done();\r
-                                               },\r
-                                               \r
-                                               error : error\r
-                                       });\r
-\r
-                                       return;\r
-                               }\r
-                       }\r
-\r
-                       // Create new script element\r
-                       elm = dom.create('script', {\r
-                               id : id,\r
-                               type : 'text/javascript',\r
-                               src : tinymce._addVer(url)\r
-                       });\r
-\r
-                       // Add onload listener for non IE browsers since IE9\r
-                       // fires onload event before the script is parsed and executed\r
-                       if (!tinymce.isIE)\r
-                               elm.onload = done;\r
-\r
-                       // Add onerror event will get fired on some browsers but not all of them\r
-                       elm.onerror = error;\r
-\r
-                       // Opera 9.60 doesn't seem to fire the onreadystate event at correctly\r
-                       if (!tinymce.isOpera) {\r
-                               elm.onreadystatechange = function() {\r
-                                       var state = elm.readyState;\r
-\r
-                                       // Loaded state is passed on IE 6 however there\r
-                                       // are known issues with this method but we can't use\r
-                                       // XHR in a cross domain loading\r
-                                       if (state == 'complete' || state == 'loaded')\r
-                                               done();\r
-                               };\r
-                       }\r
-\r
-                       // Most browsers support this feature so we report errors\r
-                       // for those at least to help users track their missing plugins etc\r
-                       // todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option\r
-                       /*elm.onerror = function() {\r
-                               alert('Failed to load: ' + url);\r
-                       };*/\r
-\r
-                       // Add script to document\r
-                       (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\r
-               };\r
-\r
-               this.isDone = function(url) {\r
-                       return states[url] == LOADED;\r
-               };\r
-\r
-               this.markDone = function(url) {\r
-                       states[url] = LOADED;\r
-               };\r
-\r
-               this.add = this.load = function(url, callback, scope) {\r
-                       var item, state = states[url];\r
-\r
-                       // Add url to load queue\r
-                       if (state == undefined) {\r
-                               queue.push(url);\r
-                               states[url] = QUEUED;\r
-                       }\r
-\r
-                       if (callback) {\r
-                               // Store away callback for later execution\r
-                               if (!scriptLoadedCallbacks[url])\r
-                                       scriptLoadedCallbacks[url] = [];\r
-\r
-                               scriptLoadedCallbacks[url].push({\r
-                                       func : callback,\r
-                                       scope : scope || this\r
-                               });\r
-                       }\r
-               };\r
-\r
-               this.loadQueue = function(callback, scope) {\r
-                       this.loadScripts(queue, callback, scope);\r
-               };\r
-\r
-               this.loadScripts = function(scripts, callback, scope) {\r
-                       var loadScripts;\r
-\r
-                       function execScriptLoadedCallbacks(url) {\r
-                               // Execute URL callback functions\r
-                               tinymce.each(scriptLoadedCallbacks[url], function(callback) {\r
-                                       callback.func.call(callback.scope);\r
-                               });\r
-\r
-                               scriptLoadedCallbacks[url] = undefined;\r
-                       };\r
-\r
-                       queueLoadedCallbacks.push({\r
-                               func : callback,\r
-                               scope : scope || this\r
-                       });\r
-\r
-                       loadScripts = function() {\r
-                               var loadingScripts = tinymce.grep(scripts);\r
-\r
-                               // Current scripts has been handled\r
-                               scripts.length = 0;\r
-\r
-                               // Load scripts that needs to be loaded\r
-                               tinymce.each(loadingScripts, function(url) {\r
-                                       // Script is already loaded then execute script callbacks directly\r
-                                       if (states[url] == LOADED) {\r
-                                               execScriptLoadedCallbacks(url);\r
-                                               return;\r
-                                       }\r
-\r
-                                       // Is script not loading then start loading it\r
-                                       if (states[url] != LOADING) {\r
-                                               states[url] = LOADING;\r
-                                               loading++;\r
-\r
-                                               loadScript(url, function() {\r
-                                                       states[url] = LOADED;\r
-                                                       loading--;\r
-\r
-                                                       execScriptLoadedCallbacks(url);\r
-\r
-                                                       // Load more scripts if they where added by the recently loaded script\r
-                                                       loadScripts();\r
-                                               });\r
-                                       }\r
-                               });\r
-\r
-                               // No scripts are currently loading then execute all pending queue loaded callbacks\r
-                               if (!loading) {\r
-                                       tinymce.each(queueLoadedCallbacks, function(callback) {\r
-                                               callback.func.call(callback.scope);\r
-                                       });\r
-\r
-                                       queueLoadedCallbacks.length = 0;\r
-                               }\r
-                       };\r
-\r
-                       loadScripts();\r
-               };\r
-       };\r
-\r
-       // Global script loader\r
-       tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();\r
-})(tinymce);\r
-\r
-tinymce.dom.TreeWalker = function(start_node, root_node) {\r
-       var node = start_node;\r
-\r
-       function findSibling(node, start_name, sibling_name, shallow) {\r
-               var sibling, parent;\r
-\r
-               if (node) {\r
-                       // Walk into nodes if it has a start\r
-                       if (!shallow && node[start_name])\r
-                               return node[start_name];\r
-\r
-                       // Return the sibling if it has one\r
-                       if (node != root_node) {\r
-                               sibling = node[sibling_name];\r
-                               if (sibling)\r
-                                       return sibling;\r
-\r
-                               // Walk up the parents to look for siblings\r
-                               for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {\r
-                                       sibling = parent[sibling_name];\r
-                                       if (sibling)\r
-                                               return sibling;\r
-                               }\r
-                       }\r
-               }\r
-       };\r
-\r
-       this.current = function() {\r
-               return node;\r
-       };\r
-\r
-       this.next = function(shallow) {\r
-               return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));\r
-       };\r
-\r
-       this.prev = function(shallow) {\r
-               return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));\r
-       };\r
-};\r
-\r
-(function(tinymce) {\r
-       tinymce.dom.RangeUtils = function(dom) {\r
-               var INVISIBLE_CHAR = '\uFEFF';\r
-\r
-               this.walk = function(rng, callback) {\r
-                       var startContainer = rng.startContainer,\r
-                               startOffset = rng.startOffset,\r
-                               endContainer = rng.endContainer,\r
-                               endOffset = rng.endOffset,\r
-                               ancestor, startPoint,\r
-                               endPoint, node, parent, siblings, nodes;\r
-\r
-                       // Handle table cell selection the table plugin enables\r
-                       // you to fake select table cells and perform formatting actions on them\r
-                       nodes = dom.select('td.mceSelected,th.mceSelected');\r
-                       if (nodes.length > 0) {\r
-                               tinymce.each(nodes, function(node) {\r
-                                       callback([node]);\r
-                               });\r
-\r
-                               return;\r
-                       }\r
-\r
-                       function collectSiblings(node, name, end_node) {\r
-                               var siblings = [];\r
-\r
-                               for (; node && node != end_node; node = node[name])\r
-                                       siblings.push(node);\r
-\r
-                               return siblings;\r
-                       };\r
-\r
-                       function findEndPoint(node, root) {\r
-                               do {\r
-                                       if (node.parentNode == root)\r
-                                               return node;\r
-\r
-                                       node = node.parentNode;\r
-                               } while(node);\r
-                       };\r
-\r
-                       function walkBoundary(start_node, end_node, next) {\r
-                               var siblingName = next ? 'nextSibling' : 'previousSibling';\r
-\r
-                               for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {\r
-                                       parent = node.parentNode;\r
-                                       siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);\r
-\r
-                                       if (siblings.length) {\r
-                                               if (!next)\r
-                                                       siblings.reverse();\r
-\r
-                                               callback(siblings);\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       // If index based start position then resolve it\r
-                       if (startContainer.nodeType == 1 && startContainer.hasChildNodes())\r
-                               startContainer = startContainer.childNodes[startOffset];\r
-\r
-                       // If index based end position then resolve it\r
-                       if (endContainer.nodeType == 1 && endContainer.hasChildNodes())\r
-                               endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)];\r
-\r
-                       // Find common ancestor and end points\r
-                       ancestor = dom.findCommonAncestor(startContainer, endContainer);\r
-\r
-                       // Same container\r
-                       if (startContainer == endContainer)\r
-                               return callback([startContainer]);\r
-\r
-                       // Process left side\r
-                       for (node = startContainer; node; node = node.parentNode) {\r
-                               if (node == endContainer)\r
-                                       return walkBoundary(startContainer, ancestor, true);\r
-\r
-                               if (node == ancestor)\r
-                                       break;\r
-                       }\r
-\r
-                       // Process right side\r
-                       for (node = endContainer; node; node = node.parentNode) {\r
-                               if (node == startContainer)\r
-                                       return walkBoundary(endContainer, ancestor);\r
-\r
-                               if (node == ancestor)\r
-                                       break;\r
-                       }\r
-\r
-                       // Find start/end point\r
-                       startPoint = findEndPoint(startContainer, ancestor) || startContainer;\r
-                       endPoint = findEndPoint(endContainer, ancestor) || endContainer;\r
-\r
-                       // Walk left leaf\r
-                       walkBoundary(startContainer, startPoint, true);\r
-\r
-                       // Walk the middle from start to end point\r
-                       siblings = collectSiblings(\r
-                               startPoint == startContainer ? startPoint : startPoint.nextSibling,\r
-                               'nextSibling',\r
-                               endPoint == endContainer ? endPoint.nextSibling : endPoint\r
-                       );\r
-\r
-                       if (siblings.length)\r
-                               callback(siblings);\r
-\r
-                       // Walk right leaf\r
-                       walkBoundary(endContainer, endPoint);\r
-               };\r
-\r
-               /*              this.split = function(rng) {\r
-                       var startContainer = rng.startContainer,\r
-                               startOffset = rng.startOffset,\r
-                               endContainer = rng.endContainer,\r
-                               endOffset = rng.endOffset;\r
-\r
-                       function splitText(node, offset) {\r
-                               if (offset == node.nodeValue.length)\r
-                                       node.appendData(INVISIBLE_CHAR);\r
-\r
-                               node = node.splitText(offset);\r
-\r
-                               if (node.nodeValue === INVISIBLE_CHAR)\r
-                                       node.nodeValue = '';\r
-\r
-                               return node;\r
-                       };\r
-\r
-                       // Handle single text node\r
-                       if (startContainer == endContainer) {\r
-                               if (startContainer.nodeType == 3) {\r
-                                       if (startOffset != 0)\r
-                                               startContainer = endContainer = splitText(startContainer, startOffset);\r
-\r
-                                       if (endOffset - startOffset != startContainer.nodeValue.length)\r
-                                               splitText(startContainer, endOffset - startOffset);\r
-                               }\r
-                       } else {\r
-                               // Split startContainer text node if needed\r
-                               if (startContainer.nodeType == 3 && startOffset != 0) {\r
-                                       startContainer = splitText(startContainer, startOffset);\r
-                                       startOffset = 0;\r
-                               }\r
-\r
-                               // Split endContainer text node if needed\r
-                               if (endContainer.nodeType == 3 && endOffset != endContainer.nodeValue.length) {\r
-                                       endContainer = splitText(endContainer, endOffset).previousSibling;\r
-                                       endOffset = endContainer.nodeValue.length;\r
-                               }\r
-                       }\r
-\r
-                       return {\r
-                               startContainer : startContainer,\r
-                               startOffset : startOffset,\r
-                               endContainer : endContainer,\r
-                               endOffset : endOffset\r
-                       };\r
-               };\r
-*/\r
-       };\r
-\r
-       tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {\r
-               if (rng1 && rng2) {\r
-                       // Compare native IE ranges\r
-                       if (rng1.item || rng1.duplicate) {\r
-                               // Both are control ranges and the selected element matches\r
-                               if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))\r
-                                       return true;\r
-\r
-                               // Both are text ranges and the range matches\r
-                               if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))\r
-                                       return true;\r
-                       } else {\r
-                               // Compare w3c ranges\r
-                               return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;\r
-                       }\r
-               }\r
-\r
-               return false;\r
-       };\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var Event = tinymce.dom.Event, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.ui.KeyboardNavigation', {\r
-               KeyboardNavigation: function(settings, dom) {\r
-                       var t = this, root = settings.root, items = settings.items,\r
-                                       enableUpDown = settings.enableUpDown, enableLeftRight = settings.enableLeftRight || !settings.enableUpDown,\r
-                                       excludeFromTabOrder = settings.excludeFromTabOrder,\r
-                                       itemFocussed, itemBlurred, rootKeydown, rootFocussed, focussedId;\r
-\r
-                       dom = dom || tinymce.DOM;\r
-\r
-                       itemFocussed = function(evt) {\r
-                               focussedId = evt.target.id;\r
-                       };\r
-                       \r
-                       itemBlurred = function(evt) {\r
-                               dom.setAttrib(evt.target.id, 'tabindex', '-1');\r
-                       };\r
-                       \r
-                       rootFocussed = function(evt) {\r
-                               var item = dom.get(focussedId);\r
-                               dom.setAttrib(item, 'tabindex', '0');\r
-                               item.focus();\r
-                       };\r
-                       \r
-                       t.focus = function() {\r
-                               dom.get(focussedId).focus();\r
-                       };\r
-\r
-                       t.destroy = function() {\r
-                               each(items, function(item) {\r
-                                       dom.unbind(dom.get(item.id), 'focus', itemFocussed);\r
-                                       dom.unbind(dom.get(item.id), 'blur', itemBlurred);\r
-                               });\r
-\r
-                               dom.unbind(dom.get(root), 'focus', rootFocussed);\r
-                               dom.unbind(dom.get(root), 'keydown', rootKeydown);\r
-\r
-                               items = dom = root = t.focus = itemFocussed = itemBlurred = rootKeydown = rootFocussed = null;\r
-                               t.destroy = function() {};\r
-                       };\r
-                       \r
-                       t.moveFocus = function(dir, evt) {\r
-                               var idx = -1, controls = t.controls, newFocus;\r
-\r
-                               if (!focussedId)\r
-                                       return;\r
-\r
-                               each(items, function(item, index) {\r
-                                       if (item.id === focussedId) {\r
-                                               idx = index;\r
-                                               return false;\r
-                                       }\r
-                               });\r
-\r
-                               idx += dir;\r
-                               if (idx < 0) {\r
-                                       idx = items.length - 1;\r
-                               } else if (idx >= items.length) {\r
-                                       idx = 0;\r
-                               }\r
-                               \r
-                               newFocus = items[idx];\r
-                               dom.setAttrib(focussedId, 'tabindex', '-1');\r
-                               dom.setAttrib(newFocus.id, 'tabindex', '0');\r
-                               dom.get(newFocus.id).focus();\r
-\r
-                               if (settings.actOnFocus) {\r
-                                       settings.onAction(newFocus.id);\r
-                               }\r
-\r
-                               if (evt)\r
-                                       Event.cancel(evt);\r
-                       };\r
-                       \r
-                       rootKeydown = function(evt) {\r
-                               var DOM_VK_LEFT = 37, DOM_VK_RIGHT = 39, DOM_VK_UP = 38, DOM_VK_DOWN = 40, DOM_VK_ESCAPE = 27, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_SPACE = 32;\r
-                               \r
-                               switch (evt.keyCode) {\r
-                                       case DOM_VK_LEFT:\r
-                                               if (enableLeftRight) t.moveFocus(-1);\r
-                                               break;\r
-       \r
-                                       case DOM_VK_RIGHT:\r
-                                               if (enableLeftRight) t.moveFocus(1);\r
-                                               break;\r
-       \r
-                                       case DOM_VK_UP:\r
-                                               if (enableUpDown) t.moveFocus(-1);\r
-                                               break;\r
-\r
-                                       case DOM_VK_DOWN:\r
-                                               if (enableUpDown) t.moveFocus(1);\r
-                                               break;\r
-\r
-                                       case DOM_VK_ESCAPE:\r
-                                               if (settings.onCancel) {\r
-                                                       settings.onCancel();\r
-                                                       Event.cancel(evt);\r
-                                               }\r
-                                               break;\r
-\r
-                                       case DOM_VK_ENTER:\r
-                                       case DOM_VK_RETURN:\r
-                                       case DOM_VK_SPACE:\r
-                                               if (settings.onAction) {\r
-                                                       settings.onAction(focussedId);\r
-                                                       Event.cancel(evt);\r
-                                               }\r
-                                               break;\r
-                               }\r
-                       };\r
-\r
-                       // Set up state and listeners for each item.\r
-                       each(items, function(item, idx) {\r
-                               var tabindex;\r
-\r
-                               if (!item.id) {\r
-                                       item.id = dom.uniqueId('_mce_item_');\r
-                               }\r
-\r
-                               if (excludeFromTabOrder) {\r
-                                       dom.bind(item.id, 'blur', itemBlurred);\r
-                                       tabindex = '-1';\r
-                               } else {\r
-                                       tabindex = (idx === 0 ? '0' : '-1');\r
-                               }\r
-\r
-                               dom.setAttrib(item.id, 'tabindex', tabindex);\r
-                               dom.bind(dom.get(item.id), 'focus', itemFocussed);\r
-                       });\r
-                       \r
-                       // Setup initial state for root element.\r
-                       if (items[0]){\r
-                               focussedId = items[0].id;\r
-                       }\r
-\r
-                       dom.setAttrib(root, 'tabindex', '-1');\r
-                       \r
-                       // Setup listeners for root element.\r
-                       dom.bind(dom.get(root), 'focus', rootFocussed);\r
-                       dom.bind(dom.get(root), 'keydown', rootKeydown);\r
-               }\r
-       });\r
-})(tinymce);\r
-(function(tinymce) {\r
-       // Shorten class names\r
-       var DOM = tinymce.DOM, is = tinymce.is;\r
-\r
-       tinymce.create('tinymce.ui.Control', {\r
-               Control : function(id, s, editor) {\r
-                       this.id = id;\r
-                       this.settings = s = s || {};\r
-                       this.rendered = false;\r
-                       this.onRender = new tinymce.util.Dispatcher(this);\r
-                       this.classPrefix = '';\r
-                       this.scope = s.scope || this;\r
-                       this.disabled = 0;\r
-                       this.active = 0;\r
-                       this.editor = editor;\r
-               },\r
-               \r
-               setAriaProperty : function(property, value) {\r
-                       var element = DOM.get(this.id + '_aria') || DOM.get(this.id);\r
-                       if (element) {\r
-                               DOM.setAttrib(element, 'aria-' + property, !!value);\r
-                       }\r
-               },\r
-               \r
-               focus : function() {\r
-                       DOM.get(this.id).focus();\r
-               },\r
-\r
-               setDisabled : function(s) {\r
-                       if (s != this.disabled) {\r
-                               this.setAriaProperty('disabled', s);\r
-\r
-                               this.setState('Disabled', s);\r
-                               this.setState('Enabled', !s);\r
-                               this.disabled = s;\r
-                       }\r
-               },\r
-\r
-               isDisabled : function() {\r
-                       return this.disabled;\r
-               },\r
-\r
-               setActive : function(s) {\r
-                       if (s != this.active) {\r
-                               this.setState('Active', s);\r
-                               this.active = s;\r
-                               this.setAriaProperty('pressed', s);\r
-                       }\r
-               },\r
-\r
-               isActive : function() {\r
-                       return this.active;\r
-               },\r
-\r
-               setState : function(c, s) {\r
-                       var n = DOM.get(this.id);\r
-\r
-                       c = this.classPrefix + c;\r
-\r
-                       if (s)\r
-                               DOM.addClass(n, c);\r
-                       else\r
-                               DOM.removeClass(n, c);\r
-               },\r
-\r
-               isRendered : function() {\r
-                       return this.rendered;\r
-               },\r
-\r
-               renderHTML : function() {\r
-               },\r
-\r
-               renderTo : function(n) {\r
-                       DOM.setHTML(n, this.renderHTML());\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, b;\r
-\r
-                       // Set pending states\r
-                       if (is(t.disabled)) {\r
-                               b = t.disabled;\r
-                               t.disabled = -1;\r
-                               t.setDisabled(b);\r
-                       }\r
-\r
-                       if (is(t.active)) {\r
-                               b = t.active;\r
-                               t.active = -1;\r
-                               t.setActive(b);\r
-                       }\r
-               },\r
-\r
-               remove : function() {\r
-                       DOM.remove(this.id);\r
-                       this.destroy();\r
-               },\r
-\r
-               destroy : function() {\r
-                       tinymce.dom.Event.clear(this.id);\r
-               }\r
-       });\r
-})(tinymce);\r
-tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {\r
-       Container : function(id, s, editor) {\r
-               this.parent(id, s, editor);\r
-\r
-               this.controls = [];\r
-\r
-               this.lookup = {};\r
-       },\r
-\r
-       add : function(c) {\r
-               this.lookup[c.id] = c;\r
-               this.controls.push(c);\r
-\r
-               return c;\r
-       },\r
-\r
-       get : function(n) {\r
-               return this.lookup[n];\r
-       }\r
-});\r
-\r
-\r
-tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {\r
-       Separator : function(id, s) {\r
-               this.parent(id, s);\r
-               this.classPrefix = 'mceSeparator';\r
-               this.setDisabled(true);\r
-       },\r
-\r
-       renderHTML : function() {\r
-               return tinymce.DOM.createHTML('span', {'class' : this.classPrefix, role : 'separator', 'aria-orientation' : 'vertical', tabindex : '-1'});\r
-       }\r
-});\r
-\r
-(function(tinymce) {\r
-       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
-\r
-       tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {\r
-               MenuItem : function(id, s) {\r
-                       this.parent(id, s);\r
-                       this.classPrefix = 'mceMenuItem';\r
-               },\r
-\r
-               setSelected : function(s) {\r
-                       this.setState('Selected', s);\r
-                       this.setAriaProperty('checked', !!s);\r
-                       this.selected = s;\r
-               },\r
-\r
-               isSelected : function() {\r
-                       return this.selected;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this;\r
-                       \r
-                       t.parent();\r
-\r
-                       // Set pending state\r
-                       if (is(t.selected))\r
-                               t.setSelected(t.selected);\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
-\r
-       tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {\r
-               Menu : function(id, s) {\r
-                       var t = this;\r
-\r
-                       t.parent(id, s);\r
-                       t.items = {};\r
-                       t.collapsed = false;\r
-                       t.menuCount = 0;\r
-                       t.onAddItem = new tinymce.util.Dispatcher(this);\r
-               },\r
-\r
-               expand : function(d) {\r
-                       var t = this;\r
-\r
-                       if (d) {\r
-                               walk(t, function(o) {\r
-                                       if (o.expand)\r
-                                               o.expand();\r
-                               }, 'items', t);\r
-                       }\r
-\r
-                       t.collapsed = false;\r
-               },\r
-\r
-               collapse : function(d) {\r
-                       var t = this;\r
-\r
-                       if (d) {\r
-                               walk(t, function(o) {\r
-                                       if (o.collapse)\r
-                                               o.collapse();\r
-                               }, 'items', t);\r
-                       }\r
-\r
-                       t.collapsed = true;\r
-               },\r
-\r
-               isCollapsed : function() {\r
-                       return this.collapsed;\r
-               },\r
-\r
-               add : function(o) {\r
-                       if (!o.settings)\r
-                               o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);\r
-\r
-                       this.onAddItem.dispatch(this, o);\r
-\r
-                       return this.items[o.id] = o;\r
-               },\r
-\r
-               addSeparator : function() {\r
-                       return this.add({separator : true});\r
-               },\r
-\r
-               addMenu : function(o) {\r
-                       if (!o.collapse)\r
-                               o = this.createMenu(o);\r
-\r
-                       this.menuCount++;\r
-\r
-                       return this.add(o);\r
-               },\r
-\r
-               hasMenus : function() {\r
-                       return this.menuCount !== 0;\r
-               },\r
-\r
-               remove : function(o) {\r
-                       delete this.items[o.id];\r
-               },\r
-\r
-               removeAll : function() {\r
-                       var t = this;\r
-\r
-                       walk(t, function(o) {\r
-                               if (o.removeAll)\r
-                                       o.removeAll();\r
-                               else\r
-                                       o.remove();\r
-\r
-                               o.destroy();\r
-                       }, 'items', t);\r
-\r
-                       t.items = {};\r
-               },\r
-\r
-               createMenu : function(o) {\r
-                       var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);\r
-\r
-                       m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);\r
-\r
-                       return m;\r
-               }\r
-       });\r
-})(tinymce);\r
-(function(tinymce) {\r
-       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;\r
-\r
-       tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {\r
-               DropMenu : function(id, s) {\r
-                       s = s || {};\r
-                       s.container = s.container || DOM.doc.body;\r
-                       s.offset_x = s.offset_x || 0;\r
-                       s.offset_y = s.offset_y || 0;\r
-                       s.vp_offset_x = s.vp_offset_x || 0;\r
-                       s.vp_offset_y = s.vp_offset_y || 0;\r
-\r
-                       if (is(s.icons) && !s.icons)\r
-                               s['class'] += ' mceNoIcons';\r
-\r
-                       this.parent(id, s);\r
-                       this.onShowMenu = new tinymce.util.Dispatcher(this);\r
-                       this.onHideMenu = new tinymce.util.Dispatcher(this);\r
-                       this.classPrefix = 'mceMenu';\r
-               },\r
-\r
-               createMenu : function(s) {\r
-                       var t = this, cs = t.settings, m;\r
-\r
-                       s.container = s.container || cs.container;\r
-                       s.parent = t;\r
-                       s.constrain = s.constrain || cs.constrain;\r
-                       s['class'] = s['class'] || cs['class'];\r
-                       s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;\r
-                       s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;\r
-                       s.keyboard_focus = cs.keyboard_focus;\r
-                       m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);\r
-\r
-                       m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);\r
-\r
-                       return m;\r
-               },\r
-               \r
-               focus : function() {\r
-                       var t = this;\r
-                       if (t.keyboardNav) {\r
-                               t.keyboardNav.focus();\r
-                       }\r
-               },\r
-\r
-               update : function() {\r
-                       var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;\r
-\r
-                       tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;\r
-                       th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;\r
-\r
-                       if (!DOM.boxModel)\r
-                               t.element.setStyles({width : tw + 2, height : th + 2});\r
-                       else\r
-                               t.element.setStyles({width : tw, height : th});\r
-\r
-                       if (s.max_width)\r
-                               DOM.setStyle(co, 'width', tw);\r
-\r
-                       if (s.max_height) {\r
-                               DOM.setStyle(co, 'height', th);\r
-\r
-                               if (tb.clientHeight < s.max_height)\r
-                                       DOM.setStyle(co, 'overflow', 'hidden');\r
-                       }\r
-               },\r
-\r
-               showMenu : function(x, y, px) {\r
-                       var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;\r
-\r
-                       t.collapse(1);\r
-\r
-                       if (t.isMenuVisible)\r
-                               return;\r
-\r
-                       if (!t.rendered) {\r
-                               co = DOM.add(t.settings.container, t.renderNode());\r
-\r
-                               each(t.items, function(o) {\r
-                                       o.postRender();\r
-                               });\r
-\r
-                               t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
-                       } else\r
-                               co = DOM.get('menu_' + t.id);\r
-\r
-                       // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug\r
-                       if (!tinymce.isOpera)\r
-                               DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});\r
-\r
-                       DOM.show(co);\r
-                       t.update();\r
-\r
-                       x += s.offset_x || 0;\r
-                       y += s.offset_y || 0;\r
-                       vp.w -= 4;\r
-                       vp.h -= 4;\r
-\r
-                       // Move inside viewport if not submenu\r
-                       if (s.constrain) {\r
-                               w = co.clientWidth - ot;\r
-                               h = co.clientHeight - ot;\r
-                               mx = vp.x + vp.w;\r
-                               my = vp.y + vp.h;\r
-\r
-                               if ((x + s.vp_offset_x + w) > mx)\r
-                                       x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);\r
-\r
-                               if ((y + s.vp_offset_y + h) > my)\r
-                                       y = Math.max(0, (my - s.vp_offset_y) - h);\r
-                       }\r
-\r
-                       DOM.setStyles(co, {left : x , top : y});\r
-                       t.element.update();\r
-\r
-                       t.isMenuVisible = 1;\r
-                       t.mouseClickFunc = Event.add(co, 'click', function(e) {\r
-                               var m;\r
-\r
-                               e = e.target;\r
-\r
-                               if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {\r
-                                       m = t.items[e.id];\r
-\r
-                                       if (m.isDisabled())\r
-                                               return;\r
-\r
-                                       dm = t;\r
-\r
-                                       while (dm) {\r
-                                               if (dm.hideMenu)\r
-                                                       dm.hideMenu();\r
-\r
-                                               dm = dm.settings.parent;\r
-                                       }\r
-\r
-                                       if (m.settings.onclick)\r
-                                               m.settings.onclick(e);\r
-\r
-                                       return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
-                               }\r
-                       });\r
-\r
-                       if (t.hasMenus()) {\r
-                               t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {\r
-                                       var m, r, mi;\r
-\r
-                                       e = e.target;\r
-                                       if (e && (e = DOM.getParent(e, 'tr'))) {\r
-                                               m = t.items[e.id];\r
-\r
-                                               if (t.lastMenu)\r
-                                                       t.lastMenu.collapse(1);\r
-\r
-                                               if (m.isDisabled())\r
-                                                       return;\r
-\r
-                                               if (e && DOM.hasClass(e, cp + 'ItemSub')) {\r
-                                                       //p = DOM.getPos(s.container);\r
-                                                       r = DOM.getRect(e);\r
-                                                       m.showMenu((r.x + r.w - ot), r.y - ot, r.x);\r
-                                                       t.lastMenu = m;\r
-                                                       DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');\r
-                                               }\r
-                                       }\r
-                               });\r
-                       }\r
-                       \r
-                       Event.add(co, 'keydown', t._keyHandler, t);\r
-\r
-                       t.onShowMenu.dispatch(t);\r
-\r
-                       if (s.keyboard_focus) { \r
-                               t._setupKeyboardNav(); \r
-                       }\r
-               },\r
-\r
-               hideMenu : function(c) {\r
-                       var t = this, co = DOM.get('menu_' + t.id), e;\r
-\r
-                       if (!t.isMenuVisible)\r
-                               return;\r
-\r
-                       if (t.keyboardNav) t.keyboardNav.destroy();\r
-                       Event.remove(co, 'mouseover', t.mouseOverFunc);\r
-                       Event.remove(co, 'click', t.mouseClickFunc);\r
-                       Event.remove(co, 'keydown', t._keyHandler);\r
-                       DOM.hide(co);\r
-                       t.isMenuVisible = 0;\r
-\r
-                       if (!c)\r
-                               t.collapse(1);\r
-\r
-                       if (t.element)\r
-                               t.element.hide();\r
-\r
-                       if (e = DOM.get(t.id))\r
-                               DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');\r
-\r
-                       t.onHideMenu.dispatch(t);\r
-               },\r
-\r
-               add : function(o) {\r
-                       var t = this, co;\r
-\r
-                       o = t.parent(o);\r
-\r
-                       if (t.isRendered && (co = DOM.get('menu_' + t.id)))\r
-                               t._add(DOM.select('tbody', co)[0], o);\r
-\r
-                       return o;\r
-               },\r
-\r
-               collapse : function(d) {\r
-                       this.parent(d);\r
-                       this.hideMenu(1);\r
-               },\r
-\r
-               remove : function(o) {\r
-                       DOM.remove(o.id);\r
-                       this.destroy();\r
-\r
-                       return this.parent(o);\r
-               },\r
-\r
-               destroy : function() {\r
-                       var t = this, co = DOM.get('menu_' + t.id);\r
-\r
-                       if (t.keyboardNav) t.keyboardNav.destroy();\r
-                       Event.remove(co, 'mouseover', t.mouseOverFunc);\r
-                       Event.remove(DOM.select('a', co), 'focus', t.mouseOverFunc);\r
-                       Event.remove(co, 'click', t.mouseClickFunc);\r
-                       Event.remove(co, 'keydown', t._keyHandler);\r
-\r
-                       if (t.element)\r
-                               t.element.remove();\r
-\r
-                       DOM.remove(co);\r
-               },\r
-\r
-               renderNode : function() {\r
-                       var t = this, s = t.settings, n, tb, co, w;\r
-\r
-                       w = DOM.create('div', {role: 'listbox', id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000;outline:0'});\r
-                       if (t.settings.parent) {\r
-                               DOM.setAttrib(w, 'aria-parent', 'menu_' + t.settings.parent.id);\r
-                       }\r
-                       co = DOM.add(w, 'div', {role: 'presentation', id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});\r
-                       t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
-\r
-                       if (s.menu_line)\r
-                               DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});\r
-\r
-//                     n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});\r
-                       n = DOM.add(co, 'table', {role: 'presentation', id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});\r
-                       tb = DOM.add(n, 'tbody');\r
-\r
-                       each(t.items, function(o) {\r
-                               t._add(tb, o);\r
-                       });\r
-\r
-                       t.rendered = true;\r
-\r
-                       return w;\r
-               },\r
-\r
-               // Internal functions\r
-               _setupKeyboardNav : function(){\r
-                       var contextMenu, menuItems, t=this; \r
-                       contextMenu = DOM.select('#menu_' + t.id)[0];\r
-                       menuItems = DOM.select('a[role=option]', 'menu_' + t.id);\r
-                       menuItems.splice(0,0,contextMenu);\r
-                       t.keyboardNav = new tinymce.ui.KeyboardNavigation({\r
-                               root: 'menu_' + t.id,\r
-                               items: menuItems,\r
-                               onCancel: function() {\r
-                                       t.hideMenu();\r
-                               },\r
-                               enableUpDown: true\r
-                       });\r
-                       contextMenu.focus();\r
-               },\r
-\r
-               _keyHandler : function(evt) {\r
-                       var t = this, e;\r
-                       switch (evt.keyCode) {\r
-                               case 37: // Left\r
-                                       if (t.settings.parent) {\r
-                                               t.hideMenu();\r
-                                               t.settings.parent.focus();\r
-                                               Event.cancel(evt);\r
-                                       }\r
-                                       break;\r
-                               case 39: // Right\r
-                                       if (t.mouseOverFunc)\r
-                                               t.mouseOverFunc(evt);\r
-                                       break;\r
-                       }\r
-               },\r
-\r
-               _add : function(tb, o) {\r
-                       var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;\r
-\r
-                       if (s.separator) {\r
-                               ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});\r
-                               DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});\r
-\r
-                               if (n = ro.previousSibling)\r
-                                       DOM.addClass(n, 'mceLast');\r
-\r
-                               return;\r
-                       }\r
-\r
-                       n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});\r
-                       n = it = DOM.add(n, s.titleItem ? 'th' : 'td');\r
-                       n = a = DOM.add(n, 'a', {id: o.id + '_aria',  role: s.titleItem ? 'presentation' : 'option', href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});\r
-\r
-                       if (s.parent) {\r
-                               DOM.setAttrib(a, 'aria-haspopup', 'true');\r
-                               DOM.setAttrib(a, 'aria-owns', 'menu_' + o.id);\r
-                       }\r
-\r
-                       DOM.addClass(it, s['class']);\r
-//                     n = DOM.add(n, 'span', {'class' : 'item'});\r
-\r
-                       ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});\r
-\r
-                       if (s.icon_src)\r
-                               DOM.add(ic, 'img', {src : s.icon_src});\r
-\r
-                       n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);\r
-\r
-                       if (o.settings.style)\r
-                               DOM.setAttrib(n, 'style', o.settings.style);\r
-\r
-                       if (tb.childNodes.length == 1)\r
-                               DOM.addClass(ro, 'mceFirst');\r
-\r
-                       if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))\r
-                               DOM.addClass(ro, 'mceFirst');\r
-\r
-                       if (o.collapse)\r
-                               DOM.addClass(ro, cp + 'ItemSub');\r
-\r
-                       if (n = ro.previousSibling)\r
-                               DOM.removeClass(n, 'mceLast');\r
-\r
-                       DOM.addClass(ro, 'mceLast');\r
-               }\r
-       });\r
-})(tinymce);\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM;\r
-\r
-       tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {\r
-               Button : function(id, s, ed) {\r
-                       this.parent(id, s, ed);\r
-                       this.classPrefix = 'mceButton';\r
-               },\r
-\r
-               renderHTML : function() {\r
-                       var cp = this.classPrefix, s = this.settings, h, l;\r
-\r
-                       l = DOM.encode(s.label || '');\r
-                       h = '<a role="button" id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" aria-labelledby="' + this.id + '_voice" title="' + DOM.encode(s.title) + '">';\r
-                       if (s.image && !(this.editor  &&this.editor.forcedHighContrastMode) )\r
-                               h += '<img class="mceIcon" src="' + s.image + '" alt="' + DOM.encode(s.title) + '" />' + l;\r
-                       else\r
-                               h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');\r
-\r
-                       h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>'; \r
-                       h += '</a>';\r
-                       return h;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, s = t.settings;\r
-\r
-                       tinymce.dom.Event.add(t.id, 'click', function(e) {\r
-                               if (!t.isDisabled())\r
-                                       return s.onclick.call(s.scope, e);\r
-                       });\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
-\r
-       tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {\r
-               ListBox : function(id, s, ed) {\r
-                       var t = this;\r
-\r
-                       t.parent(id, s, ed);\r
-\r
-                       t.items = [];\r
-\r
-                       t.onChange = new Dispatcher(t);\r
-\r
-                       t.onPostRender = new Dispatcher(t);\r
-\r
-                       t.onAdd = new Dispatcher(t);\r
-\r
-                       t.onRenderMenu = new tinymce.util.Dispatcher(this);\r
-\r
-                       t.classPrefix = 'mceListBox';\r
-               },\r
-\r
-               select : function(va) {\r
-                       var t = this, fv, f;\r
-\r
-                       if (va == undefined)\r
-                               return t.selectByIndex(-1);\r
-\r
-                       // Is string or number make function selector\r
-                       if (va && va.call)\r
-                               f = va;\r
-                       else {\r
-                               f = function(v) {\r
-                                       return v == va;\r
-                               };\r
-                       }\r
-\r
-                       // Do we need to do something?\r
-                       if (va != t.selectedValue) {\r
-                               // Find item\r
-                               each(t.items, function(o, i) {\r
-                                       if (f(o.value)) {\r
-                                               fv = 1;\r
-                                               t.selectByIndex(i);\r
-                                               return false;\r
-                                       }\r
-                               });\r
-\r
-                               if (!fv)\r
-                                       t.selectByIndex(-1);\r
-                       }\r
-               },\r
-\r
-               selectByIndex : function(idx) {\r
-                       var t = this, e, o;\r
-\r
-                       if (idx != t.selectedIndex) {\r
-                               e = DOM.get(t.id + '_text');\r
-                               o = t.items[idx];\r
-\r
-                               if (o) {\r
-                                       t.selectedValue = o.value;\r
-                                       t.selectedIndex = idx;\r
-                                       DOM.setHTML(e, DOM.encode(o.title));\r
-                                       DOM.removeClass(e, 'mceTitle');\r
-                                       DOM.setAttrib(t.id, 'aria-valuenow', o.title);\r
-                               } else {\r
-                                       DOM.setHTML(e, DOM.encode(t.settings.title));\r
-                                       DOM.addClass(e, 'mceTitle');\r
-                                       t.selectedValue = t.selectedIndex = null;\r
-                                       DOM.setAttrib(t.id, 'aria-valuenow', t.settings.title);\r
-                               }\r
-                               e = 0;\r
-                       }\r
-               },\r
-\r
-               add : function(n, v, o) {\r
-                       var t = this;\r
-\r
-                       o = o || {};\r
-                       o = tinymce.extend(o, {\r
-                               title : n,\r
-                               value : v\r
-                       });\r
-\r
-                       t.items.push(o);\r
-                       t.onAdd.dispatch(t, o);\r
-               },\r
-\r
-               getLength : function() {\r
-                       return this.items.length;\r
-               },\r
-\r
-               renderHTML : function() {\r
-                       var h = '', t = this, s = t.settings, cp = t.classPrefix;\r
-\r
-                       h = '<span role="button" aria-haspopup="true" aria-labelledby="' + t.id +'_text" aria-describedby="' + t.id + '_voiceDesc"><table role="presentation" tabindex="0" id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';\r
-                       h += '<td>' + DOM.createHTML('span', {id: t.id + '_voiceDesc', 'class': 'voiceLabel', style:'display:none;'}, t.settings.title); \r
-                       h += DOM.createHTML('a', {id : t.id + '_text', tabindex : -1, href : 'javascript:;', 'class' : 'mceText', onclick : "return false;", onmousedown : 'return false;'}, DOM.encode(t.settings.title)) + '</td>';\r
-                       h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>') + '</td>';\r
-                       h += '</tr></tbody></table></span>';\r
-\r
-                       return h;\r
-               },\r
-\r
-               showMenu : function() {\r
-                       var t = this, p2, e = DOM.get(this.id), m;\r
-\r
-                       if (t.isDisabled() || t.items.length == 0)\r
-                               return;\r
-\r
-                       if (t.menu && t.menu.isMenuVisible)\r
-                               return t.hideMenu();\r
-\r
-                       if (!t.isMenuRendered) {\r
-                               t.renderMenu();\r
-                               t.isMenuRendered = true;\r
-                       }\r
-\r
-                       p2 = DOM.getPos(e);\r
-\r
-                       m = t.menu;\r
-                       m.settings.offset_x = p2.x;\r
-                       m.settings.offset_y = p2.y;\r
-                       m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus\r
-\r
-                       // Select in menu\r
-                       if (t.oldID)\r
-                               m.items[t.oldID].setSelected(0);\r
-\r
-                       each(t.items, function(o) {\r
-                               if (o.value === t.selectedValue) {\r
-                                       m.items[o.id].setSelected(1);\r
-                                       t.oldID = o.id;\r
-                               }\r
-                       });\r
-\r
-                       m.showMenu(0, e.clientHeight);\r
-\r
-                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                       DOM.addClass(t.id, t.classPrefix + 'Selected');\r
-\r
-                       //DOM.get(t.id + '_text').focus();\r
-               },\r
-\r
-               hideMenu : function(e) {\r
-                       var t = this;\r
-\r
-                       if (t.menu && t.menu.isMenuVisible) {\r
-                               DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
-\r
-                               // Prevent double toogles by canceling the mouse click event to the button\r
-                               if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))\r
-                                       return;\r
-\r
-                               if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
-                                       DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
-                                       Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                                       t.menu.hideMenu();\r
-                               }\r
-                       }\r
-               },\r
-\r
-               renderMenu : function() {\r
-                       var t = this, m;\r
-\r
-                       m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
-                               menu_line : 1,\r
-                               'class' : t.classPrefix + 'Menu mceNoIcons',\r
-                               max_width : 150,\r
-                               max_height : 150\r
-                       });\r
-\r
-                       m.onHideMenu.add(function() {\r
-                               t.hideMenu();\r
-                               t.focus();\r
-                       });\r
-\r
-                       m.add({\r
-                               title : t.settings.title,\r
-                               'class' : 'mceMenuItemTitle',\r
-                               onclick : function() {\r
-                                       if (t.settings.onselect('') !== false)\r
-                                               t.select(''); // Must be runned after\r
-                               }\r
-                       });\r
-\r
-                       each(t.items, function(o) {\r
-                               // No value then treat it as a title\r
-                               if (o.value === undefined) {\r
-                                       m.add({\r
-                                               title : o.title,\r
-                                               'class' : 'mceMenuItemTitle',\r
-                                               onclick : function() {\r
-                                                       if (t.settings.onselect('') !== false)\r
-                                                               t.select(''); // Must be runned after\r
-                                               }\r
-                                       });\r
-                               } else {\r
-                                       o.id = DOM.uniqueId();\r
-                                       o.onclick = function() {\r
-                                               if (t.settings.onselect(o.value) !== false)\r
-                                                       t.select(o.value); // Must be runned after\r
-                                       };\r
-\r
-                                       m.add(o);\r
-                               }\r
-                       });\r
-\r
-                       t.onRenderMenu.dispatch(t, m);\r
-                       t.menu = m;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, cp = t.classPrefix;\r
-\r
-                       Event.add(t.id, 'click', t.showMenu, t);\r
-                       Event.add(t.id, 'keydown', function(evt) {\r
-                               if (evt.keyCode == 32) { // Space\r
-                                       t.showMenu(evt);\r
-                                       Event.cancel(evt);\r
-                               }\r
-                       });\r
-                       Event.add(t.id, 'focus', function() {\r
-                               if (!t._focused) {\r
-                                       t.keyDownHandler = Event.add(t.id, 'keydown', function(e) {\r
-                                               if (e.keyCode == 40) {\r
-                                                       t.showMenu();\r
-                                                       Event.cancel(e);\r
-                                               }\r
-                                       });\r
-                                       t.keyPressHandler = Event.add(t.id, 'keypress', function(e) {\r
-                                               var v;\r
-                                               if (e.keyCode == 13) {\r
-                                                       // Fake select on enter\r
-                                                       v = t.selectedValue;\r
-                                                       t.selectedValue = null; // Needs to be null to fake change\r
-                                                       Event.cancel(e);\r
-                                                       t.settings.onselect(v);\r
-                                               }\r
-                                       });\r
-                               }\r
-\r
-                               t._focused = 1;\r
-                       });\r
-                       Event.add(t.id, 'blur', function() {\r
-                               Event.remove(t.id, 'keydown', t.keyDownHandler);\r
-                               Event.remove(t.id, 'keypress', t.keyPressHandler);\r
-                               t._focused = 0;\r
-                       });\r
-\r
-                       // Old IE doesn't have hover on all elements\r
-                       if (tinymce.isIE6 || !DOM.boxModel) {\r
-                               Event.add(t.id, 'mouseover', function() {\r
-                                       if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
-                                               DOM.addClass(t.id, cp + 'Hover');\r
-                               });\r
-\r
-                               Event.add(t.id, 'mouseout', function() {\r
-                                       if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
-                                               DOM.removeClass(t.id, cp + 'Hover');\r
-                               });\r
-                       }\r
-\r
-                       t.onPostRender.dispatch(t, DOM.get(t.id));\r
-               },\r
-\r
-               destroy : function() {\r
-                       this.parent();\r
-\r
-                       Event.clear(this.id + '_text');\r
-                       Event.clear(this.id + '_open');\r
-               }\r
-       });\r
-})(tinymce);\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
-\r
-       tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {\r
-               NativeListBox : function(id, s) {\r
-                       this.parent(id, s);\r
-                       this.classPrefix = 'mceNativeListBox';\r
-               },\r
-\r
-               setDisabled : function(s) {\r
-                       DOM.get(this.id).disabled = s;\r
-                       this.setAriaProperty('disabled', s);\r
-               },\r
-\r
-               isDisabled : function() {\r
-                       return DOM.get(this.id).disabled;\r
-               },\r
-\r
-               select : function(va) {\r
-                       var t = this, fv, f;\r
-\r
-                       if (va == undefined)\r
-                               return t.selectByIndex(-1);\r
-\r
-                       // Is string or number make function selector\r
-                       if (va && va.call)\r
-                               f = va;\r
-                       else {\r
-                               f = function(v) {\r
-                                       return v == va;\r
-                               };\r
-                       }\r
-\r
-                       // Do we need to do something?\r
-                       if (va != t.selectedValue) {\r
-                               // Find item\r
-                               each(t.items, function(o, i) {\r
-                                       if (f(o.value)) {\r
-                                               fv = 1;\r
-                                               t.selectByIndex(i);\r
-                                               return false;\r
-                                       }\r
-                               });\r
-\r
-                               if (!fv)\r
-                                       t.selectByIndex(-1);\r
-                       }\r
-               },\r
-\r
-               selectByIndex : function(idx) {\r
-                       DOM.get(this.id).selectedIndex = idx + 1;\r
-                       this.selectedValue = this.items[idx] ? this.items[idx].value : null;\r
-               },\r
-\r
-               add : function(n, v, a) {\r
-                       var o, t = this;\r
-\r
-                       a = a || {};\r
-                       a.value = v;\r
-\r
-                       if (t.isRendered())\r
-                               DOM.add(DOM.get(this.id), 'option', a, n);\r
-\r
-                       o = {\r
-                               title : n,\r
-                               value : v,\r
-                               attribs : a\r
-                       };\r
-\r
-                       t.items.push(o);\r
-                       t.onAdd.dispatch(t, o);\r
-               },\r
-\r
-               getLength : function() {\r
-                       return this.items.length;\r
-               },\r
-\r
-               renderHTML : function() {\r
-                       var h, t = this;\r
-\r
-                       h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');\r
-\r
-                       each(t.items, function(it) {\r
-                               h += DOM.createHTML('option', {value : it.value}, it.title);\r
-                       });\r
-\r
-                       h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox', 'aria-labelledby': t.id + '_aria'}, h);\r
-                       h += DOM.createHTML('span', {id : t.id + '_aria', 'style': 'display: none'}, t.settings.title);\r
-                       return h;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, ch, changeListenerAdded = true;\r
-\r
-                       t.rendered = true;\r
-\r
-                       function onChange(e) {\r
-                               var v = t.items[e.target.selectedIndex - 1];\r
-\r
-                               if (v && (v = v.value)) {\r
-                                       t.onChange.dispatch(t, v);\r
-\r
-                                       if (t.settings.onselect)\r
-                                               t.settings.onselect(v);\r
-                               }\r
-                       };\r
-\r
-                       Event.add(t.id, 'change', onChange);\r
-\r
-                       // Accessibility keyhandler\r
-                       Event.add(t.id, 'keydown', function(e) {\r
-                               var bf;\r
-\r
-                               Event.remove(t.id, 'change', ch);\r
-                               changeListenerAdded = false;\r
-\r
-                               bf = Event.add(t.id, 'blur', function() {\r
-                                       if (changeListenerAdded) return;\r
-                                       changeListenerAdded = true;\r
-                                       Event.add(t.id, 'change', onChange);\r
-                                       Event.remove(t.id, 'blur', bf);\r
-                               });\r
-\r
-                               if (e.keyCode == 13 || e.keyCode == 32) {\r
-                                       onChange(e);\r
-                                       return Event.cancel(e);\r
-                               }\r
-                       });\r
-\r
-                       t.onPostRender.dispatch(t, DOM.get(t.id));\r
-               }\r
-       });\r
-})(tinymce);\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {\r
-               MenuButton : function(id, s, ed) {\r
-                       this.parent(id, s, ed);\r
-\r
-                       this.onRenderMenu = new tinymce.util.Dispatcher(this);\r
-\r
-                       s.menu_container = s.menu_container || DOM.doc.body;\r
-               },\r
-\r
-               showMenu : function() {\r
-                       var t = this, p1, p2, e = DOM.get(t.id), m;\r
-\r
-                       if (t.isDisabled())\r
-                               return;\r
-\r
-                       if (!t.isMenuRendered) {\r
-                               t.renderMenu();\r
-                               t.isMenuRendered = true;\r
-                       }\r
-\r
-                       if (t.isMenuVisible)\r
-                               return t.hideMenu();\r
-\r
-                       p1 = DOM.getPos(t.settings.menu_container);\r
-                       p2 = DOM.getPos(e);\r
-\r
-                       m = t.menu;\r
-                       m.settings.offset_x = p2.x;\r
-                       m.settings.offset_y = p2.y;\r
-                       m.settings.vp_offset_x = p2.x;\r
-                       m.settings.vp_offset_y = p2.y;\r
-                       m.settings.keyboard_focus = t._focused;\r
-                       m.showMenu(0, e.clientHeight);\r
-\r
-                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                       t.setState('Selected', 1);\r
-\r
-                       t.isMenuVisible = 1;\r
-               },\r
-\r
-               renderMenu : function() {\r
-                       var t = this, m;\r
-\r
-                       m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
-                               menu_line : 1,\r
-                               'class' : this.classPrefix + 'Menu',\r
-                               icons : t.settings.icons\r
-                       });\r
-\r
-                       m.onHideMenu.add(function() {\r
-                               t.hideMenu();\r
-                               t.focus();\r
-                       });\r
-\r
-                       t.onRenderMenu.dispatch(t, m);\r
-                       t.menu = m;\r
-               },\r
-\r
-               hideMenu : function(e) {\r
-                       var t = this;\r
-\r
-                       // Prevent double toogles by canceling the mouse click event to the button\r
-                       if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))\r
-                               return;\r
-\r
-                       if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
-                               t.setState('Selected', 0);\r
-                               Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                               if (t.menu)\r
-                                       t.menu.hideMenu();\r
-                       }\r
-\r
-                       t.isMenuVisible = 0;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, s = t.settings;\r
-\r
-                       Event.add(t.id, 'click', function() {\r
-                               if (!t.isDisabled()) {\r
-                                       if (s.onclick)\r
-                                               s.onclick(t.value);\r
-\r
-                                       t.showMenu();\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {\r
-               SplitButton : function(id, s, ed) {\r
-                       this.parent(id, s, ed);\r
-                       this.classPrefix = 'mceSplitButton';\r
-               },\r
-\r
-               renderHTML : function() {\r
-                       var h, t = this, s = t.settings, h1;\r
-\r
-                       h = '<tbody><tr>';\r
-\r
-                       if (s.image)\r
-                               h1 = DOM.createHTML('img ', {src : s.image, role: 'presentation', 'class' : 'mceAction ' + s['class']});\r
-                       else\r
-                               h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');\r
-\r
-                       h1 += DOM.createHTML('span', {'class': 'mceVoiceLabel mceIconOnly', id: t.id + '_voice', style: 'display:none;'}, s.title);\r
-                       h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_action', tabindex: '-1', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
-       \r
-                       h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}, '<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');\r
-                       h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_open', tabindex: '-1', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
-\r
-                       h += '</tr></tbody>';\r
-                       h = DOM.createHTML('table', {id : t.id, role: 'presentation', tabindex: '0',  'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', title : s.title}, h);\r
-                       return DOM.createHTML('span', {role: 'button', 'aria-labelledby': t.id + '_voice', 'aria-haspopup': 'true'}, h);\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, s = t.settings, activate;\r
-\r
-                       if (s.onclick) {\r
-                               activate = function(evt) {\r
-                                       if (!t.isDisabled()) {\r
-                                               s.onclick(t.value);\r
-                                               Event.cancel(evt);\r
-                                       }\r
-                               };\r
-                               Event.add(t.id + '_action', 'click', activate);\r
-                               Event.add(t.id, ['click', 'keydown'], function(evt) {\r
-                                       var DOM_VK_SPACE = 32, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_UP = 38, DOM_VK_DOWN = 40;\r
-                                       if ((evt.keyCode === 32 || evt.keyCode === 13 || evt.keyCode === 14) && !evt.altKey && !evt.ctrlKey && !evt.metaKey) {\r
-                                               activate();\r
-                                               Event.cancel(evt);\r
-                                       } else if (evt.type === 'click' || evt.keyCode === DOM_VK_DOWN) {\r
-                                               t.showMenu();\r
-                                               Event.cancel(evt);\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       Event.add(t.id + '_open', 'click', function (evt) {\r
-                               t.showMenu();\r
-                               Event.cancel(evt);\r
-                       });\r
-                       Event.add([t.id, t.id + '_open'], 'focus', function() {t._focused = 1;});\r
-                       Event.add([t.id, t.id + '_open'], 'blur', function() {t._focused = 0;});\r
-\r
-                       // Old IE doesn't have hover on all elements\r
-                       if (tinymce.isIE6 || !DOM.boxModel) {\r
-                               Event.add(t.id, 'mouseover', function() {\r
-                                       if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
-                                               DOM.addClass(t.id, 'mceSplitButtonHover');\r
-                               });\r
-\r
-                               Event.add(t.id, 'mouseout', function() {\r
-                                       if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
-                                               DOM.removeClass(t.id, 'mceSplitButtonHover');\r
-                               });\r
-                       }\r
-               },\r
-\r
-               destroy : function() {\r
-                       this.parent();\r
-\r
-                       Event.clear(this.id + '_action');\r
-                       Event.clear(this.id + '_open');\r
-                       Event.clear(this.id);\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {\r
-               ColorSplitButton : function(id, s, ed) {\r
-                       var t = this;\r
-\r
-                       t.parent(id, s, ed);\r
-\r
-                       t.settings = s = tinymce.extend({\r
-                               colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',\r
-                               grid_width : 8,\r
-                               default_color : '#888888'\r
-                       }, t.settings);\r
-\r
-                       t.onShowMenu = new tinymce.util.Dispatcher(t);\r
-\r
-                       t.onHideMenu = new tinymce.util.Dispatcher(t);\r
-\r
-                       t.value = s.default_color;\r
-               },\r
-\r
-               showMenu : function() {\r
-                       var t = this, r, p, e, p2;\r
-\r
-                       if (t.isDisabled())\r
-                               return;\r
-\r
-                       if (!t.isMenuRendered) {\r
-                               t.renderMenu();\r
-                               t.isMenuRendered = true;\r
-                       }\r
-\r
-                       if (t.isMenuVisible)\r
-                               return t.hideMenu();\r
-\r
-                       e = DOM.get(t.id);\r
-                       DOM.show(t.id + '_menu');\r
-                       DOM.addClass(e, 'mceSplitButtonSelected');\r
-                       p2 = DOM.getPos(e);\r
-                       DOM.setStyles(t.id + '_menu', {\r
-                               left : p2.x,\r
-                               top : p2.y + e.clientHeight,\r
-                               zIndex : 200000\r
-                       });\r
-                       e = 0;\r
-\r
-                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                       t.onShowMenu.dispatch(t);\r
-\r
-                       if (t._focused) {\r
-                               t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {\r
-                                       if (e.keyCode == 27)\r
-                                               t.hideMenu();\r
-                               });\r
-\r
-                               DOM.select('a', t.id + '_menu')[0].focus(); // Select first link\r
-                       }\r
-\r
-                       t.isMenuVisible = 1;\r
-               },\r
-\r
-               hideMenu : function(e) {\r
-                       var t = this;\r
-\r
-                       if (t.isMenuVisible) {\r
-                               // Prevent double toogles by canceling the mouse click event to the button\r
-                               if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))\r
-                                       return;\r
-\r
-                               if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {\r
-                                       DOM.removeClass(t.id, 'mceSplitButtonSelected');\r
-                                       Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
-                                       Event.remove(t.id + '_menu', 'keydown', t._keyHandler);\r
-                                       DOM.hide(t.id + '_menu');\r
-                               }\r
-\r
-                               t.isMenuVisible = 0;\r
-                       }\r
-               },\r
-\r
-               renderMenu : function() {\r
-                       var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context;\r
-\r
-                       w = DOM.add(s.menu_container, 'div', {role: 'listbox', id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});\r
-                       m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});\r
-                       DOM.add(m, 'span', {'class' : 'mceMenuLine'});\r
-\r
-                       n = DOM.add(m, 'table', {role: 'presentation', 'class' : 'mceColorSplitMenu'});\r
-                       tb = DOM.add(n, 'tbody');\r
-\r
-                       // Generate color grid\r
-                       i = 0;\r
-                       each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {\r
-                               c = c.replace(/^#/, '');\r
-\r
-                               if (!i--) {\r
-                                       tr = DOM.add(tb, 'tr');\r
-                                       i = s.grid_width - 1;\r
-                               }\r
-\r
-                               n = DOM.add(tr, 'td');\r
-                               n = DOM.add(n, 'a', {\r
-                                       role : 'option',\r
-                                       href : 'javascript:;',\r
-                                       style : {\r
-                                               backgroundColor : '#' + c\r
-                                       },\r
-                                       'title': t.editor.getLang('colors.' + c, c),\r
-                                       'data-mce-color' : '#' + c\r
-                               });\r
-\r
-                               if (t.editor.forcedHighContrastMode) {\r
-                                       n = DOM.add(n, 'canvas', { width: 16, height: 16, 'aria-hidden': 'true' });\r
-                                       if (n.getContext && (context = n.getContext("2d"))) {\r
-                                               context.fillStyle = '#' + c;\r
-                                               context.fillRect(0, 0, 16, 16);\r
-                                       } else {\r
-                                               // No point leaving a canvas element around if it's not supported for drawing on anyway.\r
-                                               DOM.remove(n);\r
-                                       }\r
-                               }\r
-                       });\r
-\r
-                       if (s.more_colors_func) {\r
-                               n = DOM.add(tb, 'tr');\r
-                               n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});\r
-                               n = DOM.add(n, 'a', {role: 'option', id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);\r
-\r
-                               Event.add(n, 'click', function(e) {\r
-                                       s.more_colors_func.call(s.more_colors_scope || this);\r
-                                       return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
-                               });\r
-                       }\r
-\r
-                       DOM.addClass(m, 'mceColorSplitMenu');\r
-                       \r
-                       new tinymce.ui.KeyboardNavigation({\r
-                               root: t.id + '_menu',\r
-                               items: DOM.select('a', t.id + '_menu'),\r
-                               onCancel: function() {\r
-                                       t.hideMenu();\r
-                                       t.focus();\r
-                               }\r
-                       });\r
-\r
-                       // Prevent IE from scrolling and hindering click to occur #4019\r
-                       Event.add(t.id + '_menu', 'mousedown', function(e) {return Event.cancel(e);});\r
-\r
-                       Event.add(t.id + '_menu', 'click', function(e) {\r
-                               var c;\r
-\r
-                               e = DOM.getParent(e.target, 'a', tb);\r
-\r
-                               if (e && e.nodeName.toLowerCase() == 'a' && (c = e.getAttribute('data-mce-color')))\r
-                                       t.setColor(c);\r
-\r
-                               return Event.cancel(e); // Prevent IE auto save warning\r
-                       });\r
-\r
-                       return w;\r
-               },\r
-\r
-               setColor : function(c) {\r
-                       this.displayColor(c);\r
-                       this.hideMenu();\r
-                       this.settings.onselect(c);\r
-               },\r
-               \r
-               displayColor : function(c) {\r
-                       var t = this;\r
-\r
-                       DOM.setStyle(t.id + '_preview', 'backgroundColor', c);\r
-\r
-                       t.value = c;\r
-               },\r
-\r
-               postRender : function() {\r
-                       var t = this, id = t.id;\r
-\r
-                       t.parent();\r
-                       DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});\r
-                       DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);\r
-               },\r
-\r
-               destroy : function() {\r
-                       this.parent();\r
-\r
-                       Event.clear(this.id + '_menu');\r
-                       Event.clear(this.id + '_more');\r
-                       DOM.remove(this.id + '_menu');\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-// Shorten class names\r
-var dom = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event;\r
-tinymce.create('tinymce.ui.ToolbarGroup:tinymce.ui.Container', {\r
-       renderHTML : function() {\r
-               var t = this, h = [], controls = t.controls, each = tinymce.each, settings = t.settings;\r
-\r
-               h.push('<div id="' + t.id + '" role="group" aria-labelledby="' + t.id + '_voice">');\r
-               //TODO: ACC test this out - adding a role = application for getting the landmarks working well.\r
-               h.push("<span role='application'>");\r
-               h.push('<span id="' + t.id + '_voice" class="mceVoiceLabel" style="display:none;">' + dom.encode(settings.name) + '</span>');\r
-               each(controls, function(toolbar) {\r
-                       h.push(toolbar.renderHTML());\r
-               });\r
-               h.push("</span>");\r
-               h.push('</div>');\r
-\r
-               return h.join('');\r
-       },\r
-       \r
-       focus : function() {\r
-               this.keyNav.focus();\r
-       },\r
-       \r
-       postRender : function() {\r
-               var t = this, items = [];\r
-\r
-               each(t.controls, function(toolbar) {\r
-                       each (toolbar.controls, function(control) {\r
-                               if (control.id) {\r
-                                       items.push(control);\r
-                               }\r
-                       });\r
-               });\r
-\r
-               t.keyNav = new tinymce.ui.KeyboardNavigation({\r
-                       root: t.id,\r
-                       items: items,\r
-                       onCancel: function() {\r
-                               t.editor.focus();\r
-                       },\r
-                       excludeFromTabOrder: !t.settings.tab_focus_toolbar\r
-               });\r
-       },\r
-       \r
-       destroy : function() {\r
-               var self = this;\r
-\r
-               self.parent();\r
-               self.keyNav.destroy();\r
-               Event.clear(self.id);\r
-       }\r
-});\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-// Shorten class names\r
-var dom = tinymce.DOM, each = tinymce.each;\r
-tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {\r
-       renderHTML : function() {\r
-               var t = this, h = '', c, co, s = t.settings, i, pr, nx, cl;\r
-\r
-               cl = t.controls;\r
-               for (i=0; i<cl.length; i++) {\r
-                       // Get current control, prev control, next control and if the control is a list box or not\r
-                       co = cl[i];\r
-                       pr = cl[i - 1];\r
-                       nx = cl[i + 1];\r
-\r
-                       // Add toolbar start\r
-                       if (i === 0) {\r
-                               c = 'mceToolbarStart';\r
-\r
-                               if (co.Button)\r
-                                       c += ' mceToolbarStartButton';\r
-                               else if (co.SplitButton)\r
-                                       c += ' mceToolbarStartSplitButton';\r
-                               else if (co.ListBox)\r
-                                       c += ' mceToolbarStartListBox';\r
-\r
-                               h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
-                       }\r
-\r
-                       // Add toolbar end before list box and after the previous button\r
-                       // This is to fix the o2k7 editor skins\r
-                       if (pr && co.ListBox) {\r
-                               if (pr.Button || pr.SplitButton)\r
-                                       h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));\r
-                       }\r
-\r
-                       // Render control HTML\r
-\r
-                       // IE 8 quick fix, needed to propertly generate a hit area for anchors\r
-                       if (dom.stdMode)\r
-                               h += '<td style="position: relative">' + co.renderHTML() + '</td>';\r
-                       else\r
-                               h += '<td>' + co.renderHTML() + '</td>';\r
-\r
-                       // Add toolbar start after list box and before the next button\r
-                       // This is to fix the o2k7 editor skins\r
-                       if (nx && co.ListBox) {\r
-                               if (nx.Button || nx.SplitButton)\r
-                                       h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));\r
-                       }\r
-               }\r
-\r
-               c = 'mceToolbarEnd';\r
-\r
-               if (co.Button)\r
-                       c += ' mceToolbarEndButton';\r
-               else if (co.SplitButton)\r
-                       c += ' mceToolbarEndSplitButton';\r
-               else if (co.ListBox)\r
-                       c += ' mceToolbarEndListBox';\r
-\r
-               h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
-\r
-               return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || '', role: 'presentation', tabindex: '-1'}, '<tbody><tr>' + h + '</tr></tbody>');\r
-       }\r
-});\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;\r
-\r
-       tinymce.create('tinymce.AddOnManager', {\r
-               AddOnManager : function() {\r
-                       var self = this;\r
-\r
-                       self.items = [];\r
-                       self.urls = {};\r
-                       self.lookup = {};\r
-                       self.onAdd = new Dispatcher(self);\r
-               },\r
-\r
-               get : function(n) {\r
-                       if (this.lookup[n]) {\r
-                               return this.lookup[n].instance;\r
-                       } else {\r
-                               return undefined;\r
-                       }\r
-               },\r
-\r
-               dependencies : function(n) {\r
-                       var result;\r
-                       if (this.lookup[n]) {\r
-                               result = this.lookup[n].dependencies;\r
-                       }\r
-                       return result || [];\r
-               },\r
-\r
-               requireLangPack : function(n) {\r
-                       var s = tinymce.settings;\r
-\r
-                       if (s && s.language && s.language_load !== false)\r
-                               tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');\r
-               },\r
-\r
-               add : function(id, o, dependencies) {\r
-                       this.items.push(o);\r
-                       this.lookup[id] = {instance:o, dependencies:dependencies};\r
-                       this.onAdd.dispatch(this, id, o);\r
-\r
-                       return o;\r
-               },\r
-               createUrl: function(baseUrl, dep) {\r
-                       if (typeof dep === "object") {\r
-                               return dep\r
-                       } else {\r
-                               return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};\r
-                       }\r
-               },\r
-\r
-               addComponents: function(pluginName, scripts) {\r
-                       var pluginUrl = this.urls[pluginName];\r
-                       tinymce.each(scripts, function(script){\r
-                               tinymce.ScriptLoader.add(pluginUrl+"/"+script); \r
-                       });\r
-               },\r
-\r
-               load : function(n, u, cb, s) {\r
-                       var t = this, url = u;\r
-\r
-                       function loadDependencies() {\r
-                               var dependencies = t.dependencies(n);\r
-                               tinymce.each(dependencies, function(dep) {\r
-                                       var newUrl = t.createUrl(u, dep);\r
-                                       t.load(newUrl.resource, newUrl, undefined, undefined);\r
-                               });\r
-                               if (cb) {\r
-                                       if (s) {\r
-                                               cb.call(s);\r
-                                       } else {\r
-                                               cb.call(tinymce.ScriptLoader);\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (t.urls[n])\r
-                               return;\r
-                       if (typeof u === "object")\r
-                               url = u.prefix + u.resource + u.suffix;\r
-\r
-                       if (url.indexOf('/') != 0 && url.indexOf('://') == -1)\r
-                               url = tinymce.baseURL + '/' + url;\r
-\r
-                       t.urls[n] = url.substring(0, url.lastIndexOf('/'));\r
-\r
-                       if (t.lookup[n]) {\r
-                               loadDependencies();\r
-                       } else {\r
-                               tinymce.ScriptLoader.add(url, loadDependencies, s);\r
-                       }\r
-               }\r
-       });\r
-\r
-       // Create plugin and theme managers\r
-       tinymce.PluginManager = new tinymce.AddOnManager();\r
-       tinymce.ThemeManager = new tinymce.AddOnManager();\r
-}(tinymce));\r
-\r
-(function(tinymce) {\r
-       // Shorten names\r
-       var each = tinymce.each, extend = tinymce.extend,\r
-               DOM = tinymce.DOM, Event = tinymce.dom.Event,\r
-               ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
-               explode = tinymce.explode,\r
-               Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;\r
-\r
-       // Setup some URLs where the editor API is located and where the document is\r
-       tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');\r
-       if (!/[\/\\]$/.test(tinymce.documentBaseURL))\r
-               tinymce.documentBaseURL += '/';\r
-\r
-       tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);\r
-\r
-       tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);\r
-\r
-       // Add before unload listener\r
-       // This was required since IE was leaking memory if you added and removed beforeunload listeners\r
-       // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event\r
-       tinymce.onBeforeUnload = new Dispatcher(tinymce);\r
-\r
-       // Must be on window or IE will leak if the editor is placed in frame or iframe\r
-       Event.add(window, 'beforeunload', function(e) {\r
-               tinymce.onBeforeUnload.dispatch(tinymce, e);\r
-       });\r
-\r
-       tinymce.onAddEditor = new Dispatcher(tinymce);\r
-\r
-       tinymce.onRemoveEditor = new Dispatcher(tinymce);\r
-\r
-       tinymce.EditorManager = extend(tinymce, {\r
-               editors : [],\r
-\r
-               i18n : {},\r
-\r
-               activeEditor : null,\r
-\r
-               init : function(s) {\r
-                       var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;\r
-\r
-                       function execCallback(se, n, s) {\r
-                               var f = se[n];\r
-\r
-                               if (!f)\r
-                                       return;\r
-\r
-                               if (tinymce.is(f, 'string')) {\r
-                                       s = f.replace(/\.\w+$/, '');\r
-                                       s = s ? tinymce.resolve(s) : 0;\r
-                                       f = tinymce.resolve(f);\r
-                               }\r
-\r
-                               return f.apply(s || this, Array.prototype.slice.call(arguments, 2));\r
-                       };\r
-\r
-                       s = extend({\r
-                               theme : "simple",\r
-                               language : "en"\r
-                       }, s);\r
-\r
-                       t.settings = s;\r
-\r
-                       // Legacy call\r
-                       Event.add(document, 'init', function() {\r
-                               var l, co;\r
-\r
-                               execCallback(s, 'onpageload');\r
-\r
-                               switch (s.mode) {\r
-                                       case "exact":\r
-                                               l = s.elements || '';\r
-\r
-                                               if(l.length > 0) {\r
-                                                       each(explode(l), function(v) {\r
-                                                               if (DOM.get(v)) {\r
-                                                                       ed = new tinymce.Editor(v, s);\r
-                                                                       el.push(ed);\r
-                                                                       ed.render(1);\r
-                                                               } else {\r
-                                                                       each(document.forms, function(f) {\r
-                                                                               each(f.elements, function(e) {\r
-                                                                                       if (e.name === v) {\r
-                                                                                               v = 'mce_editor_' + instanceCounter++;\r
-                                                                                               DOM.setAttrib(e, 'id', v);\r
-\r
-                                                                                               ed = new tinymce.Editor(v, s);\r
-                                                                                               el.push(ed);\r
-                                                                                               ed.render(1);\r
-                                                                                       }\r
-                                                                               });\r
-                                                                       });\r
-                                                               }\r
-                                                       });\r
-                                               }\r
-                                               break;\r
-\r
-                                       case "textareas":\r
-                                       case "specific_textareas":\r
-                                               function hasClass(n, c) {\r
-                                                       return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);\r
-                                               };\r
-\r
-                                               each(DOM.select('textarea'), function(v) {\r
-                                                       if (s.editor_deselector && hasClass(v, s.editor_deselector))\r
-                                                               return;\r
-\r
-                                                       if (!s.editor_selector || hasClass(v, s.editor_selector)) {\r
-                                                               // Can we use the name\r
-                                                               e = DOM.get(v.name);\r
-                                                               if (!v.id && !e)\r
-                                                                       v.id = v.name;\r
-\r
-                                                               // Generate unique name if missing or already exists\r
-                                                               if (!v.id || t.get(v.id))\r
-                                                                       v.id = DOM.uniqueId();\r
-\r
-                                                               ed = new tinymce.Editor(v.id, s);\r
-                                                               el.push(ed);\r
-                                                               ed.render(1);\r
-                                                       }\r
-                                               });\r
-                                               break;\r
-                               }\r
-\r
-                               // Call onInit when all editors are initialized\r
-                               if (s.oninit) {\r
-                                       l = co = 0;\r
-\r
-                                       each(el, function(ed) {\r
-                                               co++;\r
-\r
-                                               if (!ed.initialized) {\r
-                                                       // Wait for it\r
-                                                       ed.onInit.add(function() {\r
-                                                               l++;\r
-\r
-                                                               // All done\r
-                                                               if (l == co)\r
-                                                                       execCallback(s, 'oninit');\r
-                                                       });\r
-                                               } else\r
-                                                       l++;\r
-\r
-                                               // All done\r
-                                               if (l == co)\r
-                                                       execCallback(s, 'oninit');                                      \r
-                                       });\r
-                               }\r
-                       });\r
-               },\r
-\r
-               get : function(id) {\r
-                       if (id === undefined)\r
-                               return this.editors;\r
-\r
-                       return this.editors[id];\r
-               },\r
-\r
-               getInstanceById : function(id) {\r
-                       return this.get(id);\r
-               },\r
-\r
-               add : function(editor) {\r
-                       var self = this, editors = self.editors;\r
-\r
-                       // Add named and index editor instance\r
-                       editors[editor.id] = editor;\r
-                       editors.push(editor);\r
-\r
-                       self._setActive(editor);\r
-                       self.onAddEditor.dispatch(self, editor);\r
-\r
-\r
-                       return editor;\r
-               },\r
-\r
-               remove : function(editor) {\r
-                       var t = this, i, editors = t.editors;\r
-\r
-                       // Not in the collection\r
-                       if (!editors[editor.id])\r
-                               return null;\r
-\r
-                       delete editors[editor.id];\r
-\r
-                       for (i = 0; i < editors.length; i++) {\r
-                               if (editors[i] == editor) {\r
-                                       editors.splice(i, 1);\r
-                                       break;\r
-                               }\r
-                       }\r
-\r
-                       // Select another editor since the active one was removed\r
-                       if (t.activeEditor == editor)\r
-                               t._setActive(editors[0]);\r
-\r
-                       editor.destroy();\r
-                       t.onRemoveEditor.dispatch(t, editor);\r
-\r
-                       return editor;\r
-               },\r
-\r
-               execCommand : function(c, u, v) {\r
-                       var t = this, ed = t.get(v), w;\r
-\r
-                       // Manager commands\r
-                       switch (c) {\r
-                               case "mceFocus":\r
-                                       ed.focus();\r
-                                       return true;\r
-\r
-                               case "mceAddEditor":\r
-                               case "mceAddControl":\r
-                                       if (!t.get(v))\r
-                                               new tinymce.Editor(v, t.settings).render();\r
-\r
-                                       return true;\r
-\r
-                               case "mceAddFrameControl":\r
-                                       w = v.window;\r
-\r
-                                       // Add tinyMCE global instance and tinymce namespace to specified window\r
-                                       w.tinyMCE = tinyMCE;\r
-                                       w.tinymce = tinymce;\r
-\r
-                                       tinymce.DOM.doc = w.document;\r
-                                       tinymce.DOM.win = w;\r
-\r
-                                       ed = new tinymce.Editor(v.element_id, v);\r
-                                       ed.render();\r
-\r
-                                       // Fix IE memory leaks\r
-                                       if (tinymce.isIE) {\r
-                                               function clr() {\r
-                                                       ed.destroy();\r
-                                                       w.detachEvent('onunload', clr);\r
-                                                       w = w.tinyMCE = w.tinymce = null; // IE leak\r
-                                               };\r
-\r
-                                               w.attachEvent('onunload', clr);\r
-                                       }\r
-\r
-                                       v.page_window = null;\r
-\r
-                                       return true;\r
-\r
-                               case "mceRemoveEditor":\r
-                               case "mceRemoveControl":\r
-                                       if (ed)\r
-                                               ed.remove();\r
-\r
-                                       return true;\r
-\r
-                               case 'mceToggleEditor':\r
-                                       if (!ed) {\r
-                                               t.execCommand('mceAddControl', 0, v);\r
-                                               return true;\r
-                                       }\r
-\r
-                                       if (ed.isHidden())\r
-                                               ed.show();\r
-                                       else\r
-                                               ed.hide();\r
-\r
-                                       return true;\r
-                       }\r
-\r
-                       // Run command on active editor\r
-                       if (t.activeEditor)\r
-                               return t.activeEditor.execCommand(c, u, v);\r
-\r
-                       return false;\r
-               },\r
-\r
-               execInstanceCommand : function(id, c, u, v) {\r
-                       var ed = this.get(id);\r
-\r
-                       if (ed)\r
-                               return ed.execCommand(c, u, v);\r
-\r
-                       return false;\r
-               },\r
-\r
-               triggerSave : function() {\r
-                       each(this.editors, function(e) {\r
-                               e.save();\r
-                       });\r
-               },\r
-\r
-               addI18n : function(p, o) {\r
-                       var lo, i18n = this.i18n;\r
-\r
-                       if (!tinymce.is(p, 'string')) {\r
-                               each(p, function(o, lc) {\r
-                                       each(o, function(o, g) {\r
-                                               each(o, function(o, k) {\r
-                                                       if (g === 'common')\r
-                                                               i18n[lc + '.' + k] = o;\r
-                                                       else\r
-                                                               i18n[lc + '.' + g + '.' + k] = o;\r
-                                               });\r
-                                       });\r
-                               });\r
-                       } else {\r
-                               each(o, function(o, k) {\r
-                                       i18n[p + '.' + k] = o;\r
-                               });\r
-                       }\r
-               },\r
-\r
-               // Private methods\r
-\r
-               _setActive : function(editor) {\r
-                       this.selectedInstance = this.activeEditor = editor;\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       // Shorten these names\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,\r
-               Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,\r
-               isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,\r
-               ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
-               inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;\r
-\r
-       tinymce.create('tinymce.Editor', {\r
-               Editor : function(id, s) {\r
-                       var t = this;\r
-\r
-                       t.id = t.editorId = id;\r
-\r
-                       t.execCommands = {};\r
-                       t.queryStateCommands = {};\r
-                       t.queryValueCommands = {};\r
-\r
-                       t.isNotDirty = false;\r
-\r
-                       t.plugins = {};\r
-\r
-                       // Add events to the editor\r
-                       each([\r
-                               'onPreInit',\r
-\r
-                               'onBeforeRenderUI',\r
-\r
-                               'onPostRender',\r
-\r
-                               'onInit',\r
-\r
-                               'onRemove',\r
-\r
-                               'onActivate',\r
-\r
-                               'onDeactivate',\r
-\r
-                               'onClick',\r
-\r
-                               'onEvent',\r
-\r
-                               'onMouseUp',\r
-\r
-                               'onMouseDown',\r
-\r
-                               'onDblClick',\r
-\r
-                               'onKeyDown',\r
-\r
-                               'onKeyUp',\r
-\r
-                               'onKeyPress',\r
-\r
-                               'onContextMenu',\r
-\r
-                               'onSubmit',\r
-\r
-                               'onReset',\r
-\r
-                               'onPaste',\r
-\r
-                               'onPreProcess',\r
-\r
-                               'onPostProcess',\r
-\r
-                               'onBeforeSetContent',\r
-\r
-                               'onBeforeGetContent',\r
-\r
-                               'onSetContent',\r
-\r
-                               'onGetContent',\r
-\r
-                               'onLoadContent',\r
-\r
-                               'onSaveContent',\r
-\r
-                               'onNodeChange',\r
-\r
-                               'onChange',\r
-\r
-                               'onBeforeExecCommand',\r
-\r
-                               'onExecCommand',\r
-\r
-                               'onUndo',\r
-\r
-                               'onRedo',\r
-\r
-                               'onVisualAid',\r
-\r
-                               'onSetProgressState'\r
-                       ], function(e) {\r
-                               t[e] = new Dispatcher(t);\r
-                       });\r
-\r
-                       t.settings = s = extend({\r
-                               id : id,\r
-                               language : 'en',\r
-                               docs_language : 'en',\r
-                               theme : 'simple',\r
-                               skin : 'default',\r
-                               delta_width : 0,\r
-                               delta_height : 0,\r
-                               popup_css : '',\r
-                               plugins : '',\r
-                               document_base_url : tinymce.documentBaseURL,\r
-                               add_form_submit_trigger : 1,\r
-                               submit_patch : 1,\r
-                               add_unload_trigger : 1,\r
-                               convert_urls : 1,\r
-                               relative_urls : 1,\r
-                               remove_script_host : 1,\r
-                               table_inline_editing : 0,\r
-                               object_resizing : 1,\r
-                               cleanup : 1,\r
-                               accessibility_focus : 1,\r
-                               custom_shortcuts : 1,\r
-                               custom_undo_redo_keyboard_shortcuts : 1,\r
-                               custom_undo_redo_restore_selection : 1,\r
-                               custom_undo_redo : 1,\r
-                               doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll\r
-                               visual_table_class : 'mceItemTable',\r
-                               visual : 1,\r
-                               font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',\r
-                               apply_source_formatting : 1,\r
-                               directionality : 'ltr',\r
-                               forced_root_block : 'p',\r
-                               hidden_input : 1,\r
-                               padd_empty_editor : 1,\r
-                               render_ui : 1,\r
-                               init_theme : 1,\r
-                               force_p_newlines : 1,\r
-                               indentation : '30px',\r
-                               keep_styles : 1,\r
-                               fix_table_elements : 1,\r
-                               inline_styles : 1,\r
-                               convert_fonts_to_spans : true,\r
-                               indent : 'simple',\r
-                               indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',\r
-                               indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',\r
-                               validate : true,\r
-                               entity_encoding : 'named',\r
-                               url_converter : t.convertURL,\r
-                               url_converter_scope : t,\r
-                               ie7_compat : true\r
-                       }, s);\r
-\r
-                       t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {\r
-                               base_uri : tinyMCE.baseURI\r
-                       });\r
-\r
-                       t.baseURI = tinymce.baseURI;\r
-\r
-                       t.contentCSS = [];\r
-\r
-                       // Call setup\r
-                       t.execCallback('setup', t);\r
-               },\r
-\r
-               render : function(nst) {\r
-                       var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;\r
-\r
-                       // Page is not loaded yet, wait for it\r
-                       if (!Event.domLoaded) {\r
-                               Event.add(document, 'init', function() {\r
-                                       t.render();\r
-                               });\r
-                               return;\r
-                       }\r
-\r
-                       tinyMCE.settings = s;\r
-\r
-                       // Element not found, then skip initialization\r
-                       if (!t.getElement())\r
-                               return;\r
-\r
-                       // Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff \r
-                       // here since the browser says it has contentEditable support but there is no visible\r
-                       // caret We will remove this check ones Apple implements full contentEditable support\r
-                       if (tinymce.isIDevice && !tinymce.isIOS5)\r
-                               return;\r
-\r
-                       // Add hidden input for non input elements inside form elements\r
-                       if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))\r
-                               DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);\r
-\r
-                       if (tinymce.WindowManager)\r
-                               t.windowManager = new tinymce.WindowManager(t);\r
-\r
-                       if (s.encoding == 'xml') {\r
-                               t.onGetContent.add(function(ed, o) {\r
-                                       if (o.save)\r
-                                               o.content = DOM.encode(o.content);\r
-                               });\r
-                       }\r
-\r
-                       if (s.add_form_submit_trigger) {\r
-                               t.onSubmit.addToTop(function() {\r
-                                       if (t.initialized) {\r
-                                               t.save();\r
-                                               t.isNotDirty = 1;\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       if (s.add_unload_trigger) {\r
-                               t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {\r
-                                       if (t.initialized && !t.destroyed && !t.isHidden())\r
-                                               t.save({format : 'raw', no_events : true});\r
-                               });\r
-                       }\r
-\r
-                       tinymce.addUnload(t.destroy, t);\r
-\r
-                       if (s.submit_patch) {\r
-                               t.onBeforeRenderUI.add(function() {\r
-                                       var n = t.getElement().form;\r
-\r
-                                       if (!n)\r
-                                               return;\r
-\r
-                                       // Already patched\r
-                                       if (n._mceOldSubmit)\r
-                                               return;\r
-\r
-                                       // Check page uses id="submit" or name="submit" for it's submit button\r
-                                       if (!n.submit.nodeType && !n.submit.length) {\r
-                                               t.formElement = n;\r
-                                               n._mceOldSubmit = n.submit;\r
-                                               n.submit = function() {\r
-                                                       // Save all instances\r
-                                                       tinymce.triggerSave();\r
-                                                       t.isNotDirty = 1;\r
-\r
-                                                       return t.formElement._mceOldSubmit(t.formElement);\r
-                                               };\r
-                                       }\r
-\r
-                                       n = null;\r
-                               });\r
-                       }\r
-\r
-                       // Load scripts\r
-                       function loadScripts() {\r
-                               if (s.language && s.language_load !== false)\r
-                                       sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
-\r
-                               if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
-                                       ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
-\r
-                               each(explode(s.plugins), function(p) {\r
-                                       if (p &&!PluginManager.urls[p]) {\r
-                                               if (p.charAt(0) == '-') {\r
-                                                       p = p.substr(1, p.length);\r
-                                                       var dependencies = PluginManager.dependencies(p);\r
-                                                       each(dependencies, function(dep) {\r
-                                                               var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'};\r
-                                                               var dep = PluginManager.createUrl(defaultSettings, dep);\r
-                                                               PluginManager.load(dep.resource, dep);\r
-                                                               \r
-                                                       });\r
-                                               } else {\r
-                                                       // Skip safari plugin, since it is removed as of 3.3b1\r
-                                                       if (p == 'safari') {\r
-                                                               return;\r
-                                                       }\r
-                                                       PluginManager.load(p, {prefix:'plugins/', resource: p, suffix:'/editor_plugin' + tinymce.suffix + '.js'});\r
-                                               }\r
-                                       }\r
-                               });\r
-\r
-                               // Init when que is loaded\r
-                               sl.loadQueue(function() {\r
-                                       if (!t.removed)\r
-                                               t.init();\r
-                               });\r
-                       };\r
-\r
-                       loadScripts();\r
-               },\r
-\r
-               init : function() {\r
-                       var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re, i, initializedPlugins = [];\r
-\r
-                       tinymce.add(t);\r
-\r
-                       s.aria_label = s.aria_label || DOM.getAttrib(e, 'aria-label', t.getLang('aria.rich_text_area'));\r
-\r
-                       if (s.theme) {\r
-                               s.theme = s.theme.replace(/-/, '');\r
-                               o = ThemeManager.get(s.theme);\r
-                               t.theme = new o();\r
-\r
-                               if (t.theme.init && s.init_theme)\r
-                                       t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));\r
-                       }\r
-                       function initPlugin(p) {\r
-                               var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;\r
-                               if (c && tinymce.inArray(initializedPlugins,p) === -1) {\r
-                                       each(PluginManager.dependencies(p), function(dep){\r
-                                               initPlugin(dep);\r
-                                       });\r
-                                       po = new c(t, u);\r
-\r
-                                       t.plugins[p] = po;\r
-\r
-                                       if (po.init) {\r
-                                               po.init(t, u);\r
-                                               initializedPlugins.push(p);\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       // Create all plugins\r
-                       each(explode(s.plugins.replace(/\-/g, '')), initPlugin);\r
-\r
-                       // Setup popup CSS path(s)\r
-                       if (s.popup_css !== false) {\r
-                               if (s.popup_css)\r
-                                       s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);\r
-                               else\r
-                                       s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");\r
-                       }\r
-\r
-                       if (s.popup_css_add)\r
-                               s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);\r
-\r
-                       t.controlManager = new tinymce.ControlManager(t);\r
-\r
-                       if (s.custom_undo_redo) {\r
-                               t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {\r
-                                       if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))\r
-                                               t.undoManager.beforeChange();\r
-                               });\r
-\r
-                               t.onExecCommand.add(function(ed, cmd, ui, val, a) {\r
-                                       if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))\r
-                                               t.undoManager.add();\r
-                               });\r
-                       }\r
-\r
-                       t.onExecCommand.add(function(ed, c) {\r
-                               // Don't refresh the select lists until caret move\r
-                               if (!/^(FontName|FontSize)$/.test(c))\r
-                                       t.nodeChanged();\r
-                       });\r
-\r
-                       // Remove ghost selections on images and tables in Gecko\r
-                       if (isGecko) {\r
-                               function repaint(a, o) {\r
-                                       if (!o || !o.initial)\r
-                                               t.execCommand('mceRepaint');\r
-                               };\r
-\r
-                               t.onUndo.add(repaint);\r
-                               t.onRedo.add(repaint);\r
-                               t.onSetContent.add(repaint);\r
-                       }\r
-\r
-                       // Enables users to override the control factory\r
-                       t.onBeforeRenderUI.dispatch(t, t.controlManager);\r
-\r
-                       // Measure box\r
-                       if (s.render_ui) {\r
-                               w = s.width || e.style.width || e.offsetWidth;\r
-                               h = s.height || e.style.height || e.offsetHeight;\r
-                               t.orgDisplay = e.style.display;\r
-                               re = /^[0-9\.]+(|px)$/i;\r
-\r
-                               if (re.test('' + w))\r
-                                       w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);\r
-\r
-                               if (re.test('' + h))\r
-                                       h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);\r
-\r
-                               // Render UI\r
-                               o = t.theme.renderUI({\r
-                                       targetNode : e,\r
-                                       width : w,\r
-                                       height : h,\r
-                                       deltaWidth : s.delta_width,\r
-                                       deltaHeight : s.delta_height\r
-                               });\r
-\r
-                               t.editorContainer = o.editorContainer;\r
-                       }\r
-\r
-\r
-                       // User specified a document.domain value\r
-                       if (document.domain && location.hostname != document.domain)\r
-                               tinymce.relaxedDomain = document.domain;\r
-\r
-                       // Resize editor\r
-                       DOM.setStyles(o.sizeContainer || o.editorContainer, {\r
-                               width : w,\r
-                               height : h\r
-                       });\r
-\r
-                       // Load specified content CSS last\r
-                       if (s.content_css) {\r
-                               tinymce.each(explode(s.content_css), function(u) {\r
-                                       t.contentCSS.push(t.documentBaseURI.toAbsolute(u));\r
-                               });\r
-                       }\r
-\r
-                       h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');\r
-                       if (h < 100)\r
-                               h = 100;\r
-\r
-                       t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';\r
-\r
-                       // We only need to override paths if we have to\r
-                       // IE has a bug where it remove site absolute urls to relative ones if this is specified\r
-                       if (s.document_base_url != tinymce.documentBaseURL)\r
-                               t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';\r
-\r
-                       // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode.\r
-                       if (s.ie7_compat)\r
-                               t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />';\r
-                       else\r
-                               t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />';\r
-\r
-                       t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';\r
-\r
-                       // Firefox 2 doesn't load stylesheets correctly this way\r
-                       if (!isGecko || !/Firefox\/2/.test(navigator.userAgent)) {\r
-                               for (i = 0; i < t.contentCSS.length; i++)\r
-                                       t.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + t.contentCSS[i] + '" />';\r
-\r
-                               t.contentCSS = [];\r
-                       }\r
-\r
-                       bi = s.body_id || 'tinymce';\r
-                       if (bi.indexOf('=') != -1) {\r
-                               bi = t.getParam('body_id', '', 'hash');\r
-                               bi = bi[t.id] || bi;\r
-                       }\r
-\r
-                       bc = s.body_class || '';\r
-                       if (bc.indexOf('=') != -1) {\r
-                               bc = t.getParam('body_class', '', 'hash');\r
-                               bc = bc[t.id] || '';\r
-                       }\r
-\r
-                       t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"></body></html>';\r
-\r
-                       // Domain relaxing enabled, then set document domain\r
-                       if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) {\r
-                               // We need to write the contents here in IE since multiple writes messes up refresh button and back button\r
-                               u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';                         \r
-                       }\r
-\r
-                       // Create iframe\r
-                       // TODO: ACC add the appropriate description on this.\r
-                       n = DOM.add(o.iframeContainer, 'iframe', { \r
-                               id : t.id + "_ifr",\r
-                               src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7\r
-                               frameBorder : '0',\r
-                               allowTransparency : "true",\r
-                               title : s.aria_label,\r
-                               style : {\r
-                                       width : '100%',\r
-                                       height : h\r
-                               }\r
-                       });\r
-\r
-                       t.contentAreaContainer = o.iframeContainer;\r
-                       DOM.get(o.editorContainer).style.display = t.orgDisplay;\r
-                       DOM.get(t.id).style.display = 'none';\r
-                       DOM.setAttrib(t.id, 'aria-hidden', true);\r
-\r
-                       if (!tinymce.relaxedDomain || !u)\r
-                               t.setupIframe();\r
-\r
-                       e = n = o = null; // Cleanup\r
-               },\r
-\r
-               setupIframe : function(filled) {\r
-                       var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;\r
-\r
-                       // Setup iframe body\r
-                       if ((!isIE || !tinymce.relaxedDomain) && !filled) {\r
-                               // We need to wait for the load event on Gecko\r
-                               if (isGecko && !s.readonly) {\r
-                                       t.getWin().onload = function() {\r
-                                               window.setTimeout(function() {\r
-                                                       var b = t.getBody(), undef;\r
-\r
-                                                       // Editable element needs to have some contents or backspace/delete won't work properly for some odd reason on FF 3.6 or older\r
-                                                       b.innerHTML = '<br>';\r
-\r
-                                                       // Check if Gecko supports contentEditable mode FF2 doesn't\r
-                                                       if (b.contentEditable !== undef) {\r
-                                                               // Setting the contentEditable off/on seems to force caret mode in the editor and enabled auto focus\r
-                                                               b.contentEditable = false;\r
-                                                               b.contentEditable = true;\r
-\r
-                                                               // Caret doesn't get rendered when you mousedown on the HTML element on FF 3.x\r
-                                                               t.onMouseDown.add(function(ed, e) {\r
-                                                                       if (e.target.nodeName === "HTML") {\r
-                                                                               d.designMode = 'on'; // Render the caret\r
-\r
-                                                                               // Remove design mode again after a while so it has some time to execute\r
-                                                                               window.setTimeout(function() {\r
-                                                                                       d.designMode = 'off';\r
-                                                                                       t.getBody().focus();\r
-                                                                               }, 1);\r
-                                                                       }\r
-                                                               });\r
-                                                       } else\r
-                                                               d.designMode = 'on';\r
-\r
-                                                       // Call setup frame once the contentEditable/designMode has been initialized\r
-                                                       // since the caret won't be rendered some times otherwise.\r
-                                                       t.setupIframe(true);\r
-                                               }, 1);\r
-                                       };\r
-                               }\r
-\r
-                               d.open();\r
-                               d.write(t.iframeHTML);\r
-                               d.close();\r
-\r
-                               if (tinymce.relaxedDomain)\r
-                                       d.domain = tinymce.relaxedDomain;\r
-\r
-                               // Wait for iframe onload event on Gecko\r
-                               if (isGecko && !s.readonly)\r
-                                       return;\r
-                       }\r
-\r
-                       // It will not steal focus while setting contentEditable\r
-                       b = t.getBody();\r
-                       b.disabled = true;\r
-\r
-                       if (!isGecko && !s.readonly)\r
-                               b.contentEditable = true;\r
-\r
-                       b.disabled = false;\r
-\r
-                       t.schema = new tinymce.html.Schema(s);\r
-\r
-                       t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {\r
-                               keep_values : true,\r
-                               url_converter : t.convertURL,\r
-                               url_converter_scope : t,\r
-                               hex_colors : s.force_hex_style_colors,\r
-                               class_filter : s.class_filter,\r
-                               update_styles : 1,\r
-                               fix_ie_paragraphs : 1,\r
-                               schema : t.schema\r
-                       });\r
-\r
-                       t.parser = new tinymce.html.DomParser(s, t.schema);\r
-\r
-                       // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.\r
-                       if (!t.settings.allow_html_in_named_anchor) {\r
-                               t.parser.addAttributeFilter('name', function(nodes, name) {\r
-                                       var i = nodes.length, sibling, prevSibling, parent, node;\r
-       \r
-                                       while (i--) {\r
-                                               node = nodes[i];\r
-                                               if (node.name === 'a' && node.firstChild) {\r
-                                                       parent = node.parent;\r
-       \r
-                                                       // Move children after current node\r
-                                                       sibling = node.lastChild;\r
-                                                       do {\r
-                                                               prevSibling = sibling.prev;\r
-                                                               parent.insert(sibling, node);\r
-                                                               sibling = prevSibling;\r
-                                                       } while (sibling);\r
-                                               }\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       // Convert src and href into data-mce-src, data-mce-href and data-mce-style\r
-                       t.parser.addAttributeFilter('src,href,style', function(nodes, name) {\r
-                               var i = nodes.length, node, dom = t.dom, value, internalName;\r
-\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-                                       value = node.attr(name);\r
-                                       internalName = 'data-mce-' + name;\r
-\r
-                                       // Add internal attribute if we need to we don't on a refresh of the document\r
-                                       if (!node.attributes.map[internalName]) {       \r
-                                               if (name === "style")\r
-                                                       node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name));\r
-                                               else\r
-                                                       node.attr(internalName, t.convertURL(value, name, node.name));\r
-                                       }\r
-                               }\r
-                       });\r
-\r
-                       // Keep scripts from executing\r
-                       t.parser.addNodeFilter('script', function(nodes, name) {\r
-                               var i = nodes.length;\r
-\r
-                               while (i--)\r
-                                       nodes[i].attr('type', 'mce-text/javascript');\r
-                       });\r
-\r
-                       t.parser.addNodeFilter('#cdata', function(nodes, name) {\r
-                               var i = nodes.length, node;\r
-\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-                                       node.type = 8;\r
-                                       node.name = '#comment';\r
-                                       node.value = '[CDATA[' + node.value + ']]';\r
-                               }\r
-                       });\r
-\r
-                       t.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {\r
-                               var i = nodes.length, node, nonEmptyElements = t.schema.getNonEmptyElements();\r
-\r
-                               while (i--) {\r
-                                       node = nodes[i];\r
-\r
-                                       if (node.isEmpty(nonEmptyElements))\r
-                                               node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true;\r
-                               }\r
-                       });\r
-\r
-                       t.serializer = new tinymce.dom.Serializer(s, t.dom, t.schema);\r
-\r
-                       t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);\r
-\r
-                       t.formatter = new tinymce.Formatter(this);\r
-\r
-                       // Register default formats\r
-                       t.formatter.register({\r
-                               alignleft : [\r
-                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}},\r
-                                       {selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}\r
-                               ],\r
-\r
-                               aligncenter : [\r
-                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}},\r
-                                       {selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},\r
-                                       {selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}\r
-                               ],\r
-\r
-                               alignright : [\r
-                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}},\r
-                                       {selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}\r
-                               ],\r
-\r
-                               alignfull : [\r
-                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}}\r
-                               ],\r
-\r
-                               bold : [\r
-                                       {inline : 'strong', remove : 'all'},\r
-                                       {inline : 'span', styles : {fontWeight : 'bold'}},\r
-                                       {inline : 'b', remove : 'all'}\r
-                               ],\r
-\r
-                               italic : [\r
-                                       {inline : 'em', remove : 'all'},\r
-                                       {inline : 'span', styles : {fontStyle : 'italic'}},\r
-                                       {inline : 'i', remove : 'all'}\r
-                               ],\r
-\r
-                               underline : [\r
-                                       {inline : 'span', styles : {textDecoration : 'underline'}, exact : true},\r
-                                       {inline : 'u', remove : 'all'}\r
-                               ],\r
-\r
-                               strikethrough : [\r
-                                       {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},\r
-                                       {inline : 'strike', remove : 'all'}\r
-                               ],\r
-\r
-                               forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false},\r
-                               hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false},\r
-                               fontname : {inline : 'span', styles : {fontFamily : '%value'}},\r
-                               fontsize : {inline : 'span', styles : {fontSize : '%value'}},\r
-                               fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},\r
-                               blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},\r
-                               subscript : {inline : 'sub'},\r
-                               superscript : {inline : 'sup'},\r
-\r
-                               removeformat : [\r
-                                       {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},\r
-                                       {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},\r
-                                       {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}\r
-                               ]\r
-                       });\r
-\r
-                       // Register default block formats\r
-                       each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {\r
-                               t.formatter.register(name, {block : name, remove : 'all'});\r
-                       });\r
-\r
-                       // Register user defined formats\r
-                       t.formatter.register(t.settings.formats);\r
-\r
-                       t.undoManager = new tinymce.UndoManager(t);\r
-\r
-                       // Pass through\r
-                       t.undoManager.onAdd.add(function(um, l) {\r
-                               if (um.hasUndo())\r
-                                       return t.onChange.dispatch(t, l, um);\r
-                       });\r
-\r
-                       t.undoManager.onUndo.add(function(um, l) {\r
-                               return t.onUndo.dispatch(t, l, um);\r
-                       });\r
-\r
-                       t.undoManager.onRedo.add(function(um, l) {\r
-                               return t.onRedo.dispatch(t, l, um);\r
-                       });\r
-\r
-                       t.forceBlocks = new tinymce.ForceBlocks(t, {\r
-                               forced_root_block : s.forced_root_block\r
-                       });\r
-\r
-                       t.editorCommands = new tinymce.EditorCommands(t);\r
-\r
-                       // Pass through\r
-                       t.serializer.onPreProcess.add(function(se, o) {\r
-                               return t.onPreProcess.dispatch(t, o, se);\r
-                       });\r
-\r
-                       t.serializer.onPostProcess.add(function(se, o) {\r
-                               return t.onPostProcess.dispatch(t, o, se);\r
-                       });\r
-\r
-                       t.onPreInit.dispatch(t);\r
-\r
-                       if (!s.gecko_spellcheck)\r
-                               t.getBody().spellcheck = 0;\r
-\r
-                       if (!s.readonly)\r
-                               t._addEvents();\r
-\r
-                       t.controlManager.onPostRender.dispatch(t, t.controlManager);\r
-                       t.onPostRender.dispatch(t);\r
-\r
-                       if (s.directionality)\r
-                               t.getBody().dir = s.directionality;\r
-\r
-                       if (s.nowrap)\r
-                               t.getBody().style.whiteSpace = "nowrap";\r
-\r
-                       if (s.handle_node_change_callback) {\r
-                               t.onNodeChange.add(function(ed, cm, n) {\r
-                                       t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());\r
-                               });\r
-                       }\r
-\r
-                       if (s.save_callback) {\r
-                               t.onSaveContent.add(function(ed, o) {\r
-                                       var h = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
-\r
-                                       if (h)\r
-                                               o.content = h;\r
-                               });\r
-                       }\r
-\r
-                       if (s.onchange_callback) {\r
-                               t.onChange.add(function(ed, l) {\r
-                                       t.execCallback('onchange_callback', t, l);\r
-                               });\r
-                       }\r
-\r
-                       if (s.protect) {\r
-                               t.onBeforeSetContent.add(function(ed, o) {\r
-                                       if (s.protect) {\r
-                                               each(s.protect, function(pattern) {\r
-                                                       o.content = o.content.replace(pattern, function(str) {\r
-                                                               return '<!--mce:protected ' + escape(str) + '-->';\r
-                                                       });\r
-                                               });\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       if (s.convert_newlines_to_brs) {\r
-                               t.onBeforeSetContent.add(function(ed, o) {\r
-                                       if (o.initial)\r
-                                               o.content = o.content.replace(/\r?\n/g, '<br />');\r
-                               });\r
-                       }\r
-\r
-                       if (s.preformatted) {\r
-                               t.onPostProcess.add(function(ed, o) {\r
-                                       o.content = o.content.replace(/^\s*<pre.*?>/, '');\r
-                                       o.content = o.content.replace(/<\/pre>\s*$/, '');\r
-\r
-                                       if (o.set)\r
-                                               o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';\r
-                               });\r
-                       }\r
-\r
-                       if (s.verify_css_classes) {\r
-                               t.serializer.attribValueFilter = function(n, v) {\r
-                                       var s, cl;\r
-\r
-                                       if (n == 'class') {\r
-                                               // Build regexp for classes\r
-                                               if (!t.classesRE) {\r
-                                                       cl = t.dom.getClasses();\r
-\r
-                                                       if (cl.length > 0) {\r
-                                                               s = '';\r
-\r
-                                                               each (cl, function(o) {\r
-                                                                       s += (s ? '|' : '') + o['class'];\r
-                                                               });\r
-\r
-                                                               t.classesRE = new RegExp('(' + s + ')', 'gi');\r
-                                                       }\r
-                                               }\r
-\r
-                                               return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';\r
-                                       }\r
-\r
-                                       return v;\r
-                               };\r
-                       }\r
-\r
-                       if (s.cleanup_callback) {\r
-                               t.onBeforeSetContent.add(function(ed, o) {\r
-                                       o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
-                               });\r
-\r
-                               t.onPreProcess.add(function(ed, o) {\r
-                                       if (o.set)\r
-                                               t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);\r
-\r
-                                       if (o.get)\r
-                                               t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);\r
-                               });\r
-\r
-                               t.onPostProcess.add(function(ed, o) {\r
-                                       if (o.set)\r
-                                               o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
-\r
-                                       if (o.get)                                              \r
-                                               o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);\r
-                               });\r
-                       }\r
-\r
-                       if (s.save_callback) {\r
-                               t.onGetContent.add(function(ed, o) {\r
-                                       if (o.save)\r
-                                               o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
-                               });\r
-                       }\r
-\r
-                       if (s.handle_event_callback) {\r
-                               t.onEvent.add(function(ed, e, o) {\r
-                                       if (t.execCallback('handle_event_callback', e, ed, o) === false)\r
-                                               Event.cancel(e);\r
-                               });\r
-                       }\r
-\r
-                       // Add visual aids when new contents is added\r
-                       t.onSetContent.add(function() {\r
-                               t.addVisual(t.getBody());\r
-                       });\r
-\r
-                       // Remove empty contents\r
-                       if (s.padd_empty_editor) {\r
-                               t.onPostProcess.add(function(ed, o) {\r
-                                       o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');\r
-                               });\r
-                       }\r
-\r
-                       if (isGecko) {\r
-                               // Fix gecko link bug, when a link is placed at the end of block elements there is\r
-                               // no way to move the caret behind the link. This fix adds a bogus br element after the link\r
-                               function fixLinks(ed, o) {\r
-                                       each(ed.dom.select('a'), function(n) {\r
-                                               var pn = n.parentNode;\r
-\r
-                                               if (ed.dom.isBlock(pn) && pn.lastChild === n)\r
-                                                       ed.dom.add(pn, 'br', {'data-mce-bogus' : 1});\r
-                                       });\r
-                               };\r
-\r
-                               t.onExecCommand.add(function(ed, cmd) {\r
-                                       if (cmd === 'CreateLink')\r
-                                               fixLinks(ed);\r
-                               });\r
-\r
-                               t.onSetContent.add(t.selection.onSetContent.add(fixLinks));\r
-                       }\r
-\r
-                       t.load({initial : true, format : 'html'});\r
-                       t.startContent = t.getContent({format : 'raw'});\r
-                       t.undoManager.add();\r
-                       t.initialized = true;\r
-\r
-                       t.onInit.dispatch(t);\r
-                       t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());\r
-                       t.execCallback('init_instance_callback', t);\r
-                       t.focus(true);\r
-                       t.nodeChanged({initial : 1});\r
-\r
-                       // Load specified content CSS last\r
-                       each(t.contentCSS, function(u) {\r
-                               t.dom.loadCSS(u);\r
-                       });\r
-\r
-                       // Handle auto focus\r
-                       if (s.auto_focus) {\r
-                               setTimeout(function () {\r
-                                       var ed = tinymce.get(s.auto_focus);\r
-\r
-                                       ed.selection.select(ed.getBody(), 1);\r
-                                       ed.selection.collapse(1);\r
-                                       ed.getBody().focus();\r
-                                       ed.getWin().focus();\r
-                               }, 100);\r
-                       }\r
-\r
-                       e = null;\r
-               },\r
-\r
-\r
-               focus : function(sf) {\r
-                       var oed, t = this, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();\r
-\r
-                       if (!sf) {\r
-                               // Get selected control element\r
-                               ieRng = t.selection.getRng();\r
-                               if (ieRng.item) {\r
-                                       controlElm = ieRng.item(0);\r
-                               }\r
-\r
-                               // Is not content editable\r
-                               if (!ce)\r
-                                       t.getWin().focus();\r
-\r
-                               // Restore selected control element\r
-                               // This is needed when for example an image is selected within a\r
-                               // layer a call to focus will then remove the control selection\r
-                               if (controlElm && controlElm.ownerDocument == doc) {\r
-                                       ieRng = doc.body.createControlRange();\r
-                                       ieRng.addElement(controlElm);\r
-                                       ieRng.select();\r
-                               }\r
-\r
-                       }\r
-\r
-                       if (tinymce.activeEditor != t) {\r
-                               if ((oed = tinymce.activeEditor) != null)\r
-                                       oed.onDeactivate.dispatch(oed, t);\r
-\r
-                               t.onActivate.dispatch(t, oed);\r
-                       }\r
-\r
-                       tinymce._setActive(t);\r
-               },\r
-\r
-               execCallback : function(n) {\r
-                       var t = this, f = t.settings[n], s;\r
-\r
-                       if (!f)\r
-                               return;\r
-\r
-                       // Look through lookup\r
-                       if (t.callbackLookup && (s = t.callbackLookup[n])) {\r
-                               f = s.func;\r
-                               s = s.scope;\r
-                       }\r
-\r
-                       if (is(f, 'string')) {\r
-                               s = f.replace(/\.\w+$/, '');\r
-                               s = s ? tinymce.resolve(s) : 0;\r
-                               f = tinymce.resolve(f);\r
-                               t.callbackLookup = t.callbackLookup || {};\r
-                               t.callbackLookup[n] = {func : f, scope : s};\r
-                       }\r
-\r
-                       return f.apply(s || t, Array.prototype.slice.call(arguments, 1));\r
-               },\r
-\r
-               translate : function(s) {\r
-                       var c = this.settings.language || 'en', i18n = tinymce.i18n;\r
-\r
-                       if (!s)\r
-                               return '';\r
-\r
-                       return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
-                               return i18n[c + '.' + b] || '{#' + b + '}';\r
-                       });\r
-               },\r
-\r
-               getLang : function(n, dv) {\r
-                       return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');\r
-               },\r
-\r
-               getParam : function(n, dv, ty) {\r
-                       var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;\r
-\r
-                       if (ty === 'hash') {\r
-                               o = {};\r
-\r
-                               if (is(v, 'string')) {\r
-                                       each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {\r
-                                               v = v.split('=');\r
-\r
-                                               if (v.length > 1)\r
-                                                       o[tr(v[0])] = tr(v[1]);\r
-                                               else\r
-                                                       o[tr(v[0])] = tr(v);\r
-                                       });\r
-                               } else\r
-                                       o = v;\r
-\r
-                               return o;\r
-                       }\r
-\r
-                       return v;\r
-               },\r
-\r
-               nodeChanged : function(o) {\r
-                       var t = this, s = t.selection, n = s.getStart() || t.getBody();\r
-\r
-                       // Fix for bug #1896577 it seems that this can not be fired while the editor is loading\r
-                       if (t.initialized) {\r
-                               o = o || {};\r
-                               n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state\r
-\r
-                               // Get parents and add them to object\r
-                               o.parents = [];\r
-                               t.dom.getParent(n, function(node) {\r
-                                       if (node.nodeName == 'BODY')\r
-                                               return true;\r
-\r
-                                       o.parents.push(node);\r
-                               });\r
-\r
-                               t.onNodeChange.dispatch(\r
-                                       t,\r
-                                       o ? o.controlManager || t.controlManager : t.controlManager,\r
-                                       n,\r
-                                       s.isCollapsed(),\r
-                                       o\r
-                               );\r
-                       }\r
-               },\r
-\r
-               addButton : function(n, s) {\r
-                       var t = this;\r
-\r
-                       t.buttons = t.buttons || {};\r
-                       t.buttons[n] = s;\r
-               },\r
-\r
-               addCommand : function(name, callback, scope) {\r
-                       this.execCommands[name] = {func : callback, scope : scope || this};\r
-               },\r
-\r
-               addQueryStateHandler : function(name, callback, scope) {\r
-                       this.queryStateCommands[name] = {func : callback, scope : scope || this};\r
-               },\r
-\r
-               addQueryValueHandler : function(name, callback, scope) {\r
-                       this.queryValueCommands[name] = {func : callback, scope : scope || this};\r
-               },\r
-\r
-               addShortcut : function(pa, desc, cmd_func, sc) {\r
-                       var t = this, c;\r
-\r
-                       if (!t.settings.custom_shortcuts)\r
-                               return false;\r
-\r
-                       t.shortcuts = t.shortcuts || {};\r
-\r
-                       if (is(cmd_func, 'string')) {\r
-                               c = cmd_func;\r
-\r
-                               cmd_func = function() {\r
-                                       t.execCommand(c, false, null);\r
-                               };\r
-                       }\r
-\r
-                       if (is(cmd_func, 'object')) {\r
-                               c = cmd_func;\r
-\r
-                               cmd_func = function() {\r
-                                       t.execCommand(c[0], c[1], c[2]);\r
-                               };\r
-                       }\r
-\r
-                       each(explode(pa), function(pa) {\r
-                               var o = {\r
-                                       func : cmd_func,\r
-                                       scope : sc || this,\r
-                                       desc : desc,\r
-                                       alt : false,\r
-                                       ctrl : false,\r
-                                       shift : false\r
-                               };\r
-\r
-                               each(explode(pa, '+'), function(v) {\r
-                                       switch (v) {\r
-                                               case 'alt':\r
-                                               case 'ctrl':\r
-                                               case 'shift':\r
-                                                       o[v] = true;\r
-                                                       break;\r
-\r
-                                               default:\r
-                                                       o.charCode = v.charCodeAt(0);\r
-                                                       o.keyCode = v.toUpperCase().charCodeAt(0);\r
-                                       }\r
-                               });\r
-\r
-                               t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;\r
-                       });\r
-\r
-                       return true;\r
-               },\r
-\r
-               execCommand : function(cmd, ui, val, a) {\r
-                       var t = this, s = 0, o, st;\r
-\r
-                       if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))\r
-                               t.focus();\r
-\r
-                       o = {};\r
-                       t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);\r
-                       if (o.terminate)\r
-                               return false;\r
-\r
-                       // Command callback\r
-                       if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {\r
-                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-                               return true;\r
-                       }\r
-\r
-                       // Registred commands\r
-                       if (o = t.execCommands[cmd]) {\r
-                               st = o.func.call(o.scope, ui, val);\r
-\r
-                               // Fall through on true\r
-                               if (st !== true) {\r
-                                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-                                       return st;\r
-                               }\r
-                       }\r
-\r
-                       // Plugin commands\r
-                       each(t.plugins, function(p) {\r
-                               if (p.execCommand && p.execCommand(cmd, ui, val)) {\r
-                                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-                                       s = 1;\r
-                                       return false;\r
-                               }\r
-                       });\r
-\r
-                       if (s)\r
-                               return true;\r
-\r
-                       // Theme commands\r
-                       if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {\r
-                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-                               return true;\r
-                       }\r
-\r
-                       // Editor commands\r
-                       if (t.editorCommands.execCommand(cmd, ui, val)) {\r
-                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-                               return true;\r
-                       }\r
-\r
-                       // Browser commands\r
-                       t.getDoc().execCommand(cmd, ui, val);\r
-                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
-               },\r
-\r
-               queryCommandState : function(cmd) {\r
-                       var t = this, o, s;\r
-\r
-                       // Is hidden then return undefined\r
-                       if (t._isHidden())\r
-                               return;\r
-\r
-                       // Registred commands\r
-                       if (o = t.queryStateCommands[cmd]) {\r
-                               s = o.func.call(o.scope);\r
-\r
-                               // Fall though on true\r
-                               if (s !== true)\r
-                                       return s;\r
-                       }\r
-\r
-                       // Registred commands\r
-                       o = t.editorCommands.queryCommandState(cmd);\r
-                       if (o !== -1)\r
-                               return o;\r
-\r
-                       // Browser commands\r
-                       try {\r
-                               return this.getDoc().queryCommandState(cmd);\r
-                       } catch (ex) {\r
-                               // Fails sometimes see bug: 1896577\r
-                       }\r
-               },\r
-\r
-               queryCommandValue : function(c) {\r
-                       var t = this, o, s;\r
-\r
-                       // Is hidden then return undefined\r
-                       if (t._isHidden())\r
-                               return;\r
-\r
-                       // Registred commands\r
-                       if (o = t.queryValueCommands[c]) {\r
-                               s = o.func.call(o.scope);\r
-\r
-                               // Fall though on true\r
-                               if (s !== true)\r
-                                       return s;\r
-                       }\r
-\r
-                       // Registred commands\r
-                       o = t.editorCommands.queryCommandValue(c);\r
-                       if (is(o))\r
-                               return o;\r
-\r
-                       // Browser commands\r
-                       try {\r
-                               return this.getDoc().queryCommandValue(c);\r
-                       } catch (ex) {\r
-                               // Fails sometimes see bug: 1896577\r
-                       }\r
-               },\r
-\r
-               show : function() {\r
-                       var t = this;\r
-\r
-                       DOM.show(t.getContainer());\r
-                       DOM.hide(t.id);\r
-                       t.load();\r
-               },\r
-\r
-               hide : function() {\r
-                       var t = this, d = t.getDoc();\r
-\r
-                       // Fixed bug where IE has a blinking cursor left from the editor\r
-                       if (isIE && d)\r
-                               d.execCommand('SelectAll');\r
-\r
-                       // We must save before we hide so Safari doesn't crash\r
-                       t.save();\r
-                       DOM.hide(t.getContainer());\r
-                       DOM.setStyle(t.id, 'display', t.orgDisplay);\r
-               },\r
-\r
-               isHidden : function() {\r
-                       return !DOM.isHidden(this.id);\r
-               },\r
-\r
-               setProgressState : function(b, ti, o) {\r
-                       this.onSetProgressState.dispatch(this, b, ti, o);\r
-\r
-                       return b;\r
-               },\r
-\r
-               load : function(o) {\r
-                       var t = this, e = t.getElement(), h;\r
-\r
-                       if (e) {\r
-                               o = o || {};\r
-                               o.load = true;\r
-\r
-                               // Double encode existing entities in the value\r
-                               h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);\r
-                               o.element = e;\r
-\r
-                               if (!o.no_events)\r
-                                       t.onLoadContent.dispatch(t, o);\r
-\r
-                               o.element = e = null;\r
-\r
-                               return h;\r
-                       }\r
-               },\r
-\r
-               save : function(o) {\r
-                       var t = this, e = t.getElement(), h, f;\r
-\r
-                       if (!e || !t.initialized)\r
-                               return;\r
-\r
-                       o = o || {};\r
-                       o.save = true;\r
-\r
-                       // Add undo level will trigger onchange event\r
-                       if (!o.no_events) {\r
-                               t.undoManager.typing = false;\r
-                               t.undoManager.add();\r
-                       }\r
-\r
-                       o.element = e;\r
-                       h = o.content = t.getContent(o);\r
-\r
-                       if (!o.no_events)\r
-                               t.onSaveContent.dispatch(t, o);\r
-\r
-                       h = o.content;\r
-\r
-                       if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {\r
-                               e.innerHTML = h;\r
-\r
-                               // Update hidden form element\r
-                               if (f = DOM.getParent(t.id, 'form')) {\r
-                                       each(f.elements, function(e) {\r
-                                               if (e.name == t.id) {\r
-                                                       e.value = h;\r
-                                                       return false;\r
-                                               }\r
-                                       });\r
-                               }\r
-                       } else\r
-                               e.value = h;\r
-\r
-                       o.element = e = null;\r
-\r
-                       return h;\r
-               },\r
-\r
-               setContent : function(content, args) {\r
-                       var self = this, rootNode, body = self.getBody(), forcedRootBlockName;\r
-\r
-                       // Setup args object\r
-                       args = args || {};\r
-                       args.format = args.format || 'html';\r
-                       args.set = true;\r
-                       args.content = content;\r
-\r
-                       // Do preprocessing\r
-                       if (!args.no_events)\r
-                               self.onBeforeSetContent.dispatch(self, args);\r
-\r
-                       content = args.content;\r
-\r
-                       // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content\r
-                       // It will also be impossible to place the caret in the editor unless there is a BR element present\r
-                       if (!tinymce.isIE && (content.length === 0 || /^\s+$/.test(content))) {\r
-                               forcedRootBlockName = self.settings.forced_root_block;\r
-                               if (forcedRootBlockName)\r
-                                       content = '<' + forcedRootBlockName + '><br data-mce-bogus="1"></' + forcedRootBlockName + '>';\r
-                               else\r
-                                       content = '<br data-mce-bogus="1">';\r
-\r
-                               body.innerHTML = content;\r
-                               self.selection.select(body, true);\r
-                               self.selection.collapse(true);\r
-                               return;\r
-                       }\r
-\r
-                       // Parse and serialize the html\r
-                       if (args.format !== 'raw') {\r
-                               content = new tinymce.html.Serializer({}, self.schema).serialize(\r
-                                       self.parser.parse(content)\r
-                               );\r
-                       }\r
-\r
-                       // Set the new cleaned contents to the editor\r
-                       args.content = tinymce.trim(content);\r
-                       self.dom.setHTML(body, args.content);\r
-\r
-                       // Do post processing\r
-                       if (!args.no_events)\r
-                               self.onSetContent.dispatch(self, args);\r
-\r
-                       return args.content;\r
-               },\r
-\r
-               getContent : function(args) {\r
-                       var self = this, content;\r
-\r
-                       // Setup args object\r
-                       args = args || {};\r
-                       args.format = args.format || 'html';\r
-                       args.get = true;\r
-\r
-                       // Do preprocessing\r
-                       if (!args.no_events)\r
-                               self.onBeforeGetContent.dispatch(self, args);\r
-\r
-                       // Get raw contents or by default the cleaned contents\r
-                       if (args.format == 'raw')\r
-                               content = self.getBody().innerHTML;\r
-                       else\r
-                               content = self.serializer.serialize(self.getBody(), args);\r
-\r
-                       args.content = tinymce.trim(content);\r
-\r
-                       // Do post processing\r
-                       if (!args.no_events)\r
-                               self.onGetContent.dispatch(self, args);\r
-\r
-                       return args.content;\r
-               },\r
-\r
-               isDirty : function() {\r
-                       var self = this;\r
-\r
-                       return tinymce.trim(self.startContent) != tinymce.trim(self.getContent({format : 'raw', no_events : 1})) && !self.isNotDirty;\r
-               },\r
-\r
-               getContainer : function() {\r
-                       var t = this;\r
-\r
-                       if (!t.container)\r
-                               t.container = DOM.get(t.editorContainer || t.id + '_parent');\r
-\r
-                       return t.container;\r
-               },\r
-\r
-               getContentAreaContainer : function() {\r
-                       return this.contentAreaContainer;\r
-               },\r
-\r
-               getElement : function() {\r
-                       return DOM.get(this.settings.content_element || this.id);\r
-               },\r
-\r
-               getWin : function() {\r
-                       var t = this, e;\r
-\r
-                       if (!t.contentWindow) {\r
-                               e = DOM.get(t.id + "_ifr");\r
-\r
-                               if (e)\r
-                                       t.contentWindow = e.contentWindow;\r
-                       }\r
-\r
-                       return t.contentWindow;\r
-               },\r
-\r
-               getDoc : function() {\r
-                       var t = this, w;\r
-\r
-                       if (!t.contentDocument) {\r
-                               w = t.getWin();\r
-\r
-                               if (w)\r
-                                       t.contentDocument = w.document;\r
-                       }\r
-\r
-                       return t.contentDocument;\r
-               },\r
-\r
-               getBody : function() {\r
-                       return this.bodyElement || this.getDoc().body;\r
-               },\r
-\r
-               convertURL : function(u, n, e) {\r
-                       var t = this, s = t.settings;\r
-\r
-                       // Use callback instead\r
-                       if (s.urlconverter_callback)\r
-                               return t.execCallback('urlconverter_callback', u, e, true, n);\r
-\r
-                       // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs\r
-                       if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)\r
-                               return u;\r
-\r
-                       // Convert to relative\r
-                       if (s.relative_urls)\r
-                               return t.documentBaseURI.toRelative(u);\r
-\r
-                       // Convert to absolute\r
-                       u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);\r
-\r
-                       return u;\r
-               },\r
-\r
-               addVisual : function(e) {\r
-                       var t = this, s = t.settings;\r
-\r
-                       e = e || t.getBody();\r
-\r
-                       if (!is(t.hasVisual))\r
-                               t.hasVisual = s.visual;\r
-\r
-                       each(t.dom.select('table,a', e), function(e) {\r
-                               var v;\r
-\r
-                               switch (e.nodeName) {\r
-                                       case 'TABLE':\r
-                                               v = t.dom.getAttrib(e, 'border');\r
-\r
-                                               if (!v || v == '0') {\r
-                                                       if (t.hasVisual)\r
-                                                               t.dom.addClass(e, s.visual_table_class);\r
-                                                       else\r
-                                                               t.dom.removeClass(e, s.visual_table_class);\r
-                                               }\r
-\r
-                                               return;\r
-\r
-                                       case 'A':\r
-                                               v = t.dom.getAttrib(e, 'name');\r
-\r
-                                               if (v) {\r
-                                                       if (t.hasVisual)\r
-                                                               t.dom.addClass(e, 'mceItemAnchor');\r
-                                                       else\r
-                                                               t.dom.removeClass(e, 'mceItemAnchor');\r
-                                               }\r
-\r
-                                               return;\r
-                               }\r
-                       });\r
-\r
-                       t.onVisualAid.dispatch(t, e, t.hasVisual);\r
-               },\r
-\r
-               remove : function() {\r
-                       var t = this, e = t.getContainer();\r
-\r
-                       t.removed = 1; // Cancels post remove event execution\r
-                       t.hide();\r
-\r
-                       t.execCallback('remove_instance_callback', t);\r
-                       t.onRemove.dispatch(t);\r
-\r
-                       // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command\r
-                       t.onExecCommand.listeners = [];\r
-\r
-                       tinymce.remove(t);\r
-                       DOM.remove(e);\r
-               },\r
-\r
-               destroy : function(s) {\r
-                       var t = this;\r
-\r
-                       // One time is enough\r
-                       if (t.destroyed)\r
-                               return;\r
-\r
-                       if (!s) {\r
-                               tinymce.removeUnload(t.destroy);\r
-                               tinyMCE.onBeforeUnload.remove(t._beforeUnload);\r
-\r
-                               // Manual destroy\r
-                               if (t.theme && t.theme.destroy)\r
-                                       t.theme.destroy();\r
-\r
-                               // Destroy controls, selection and dom\r
-                               t.controlManager.destroy();\r
-                               t.selection.destroy();\r
-                               t.dom.destroy();\r
-\r
-                               // Remove all events\r
-\r
-                               // Don't clear the window or document if content editable\r
-                               // is enabled since other instances might still be present\r
-                               if (!t.settings.content_editable) {\r
-                                       Event.clear(t.getWin());\r
-                                       Event.clear(t.getDoc());\r
-                               }\r
-\r
-                               Event.clear(t.getBody());\r
-                               Event.clear(t.formElement);\r
-                       }\r
-\r
-                       if (t.formElement) {\r
-                               t.formElement.submit = t.formElement._mceOldSubmit;\r
-                               t.formElement._mceOldSubmit = null;\r
-                       }\r
-\r
-                       t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;\r
-\r
-                       if (t.selection)\r
-                               t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;\r
-\r
-                       t.destroyed = 1;\r
-               },\r
-\r
-               // Internal functions\r
-\r
-               _addEvents : function() {\r
-                       // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset\r
-                       var t = this, i, s = t.settings, dom = t.dom, lo = {\r
-                               mouseup : 'onMouseUp',\r
-                               mousedown : 'onMouseDown',\r
-                               click : 'onClick',\r
-                               keyup : 'onKeyUp',\r
-                               keydown : 'onKeyDown',\r
-                               keypress : 'onKeyPress',\r
-                               submit : 'onSubmit',\r
-                               reset : 'onReset',\r
-                               contextmenu : 'onContextMenu',\r
-                               dblclick : 'onDblClick',\r
-                               paste : 'onPaste' // Doesn't work in all browsers yet\r
-                       };\r
-\r
-                       function eventHandler(e, o) {\r
-                               var ty = e.type;\r
-\r
-                               // Don't fire events when it's removed\r
-                               if (t.removed)\r
-                                       return;\r
-\r
-                               // Generic event handler\r
-                               if (t.onEvent.dispatch(t, e, o) !== false) {\r
-                                       // Specific event handler\r
-                                       t[lo[e.fakeType || e.type]].dispatch(t, e, o);\r
-                               }\r
-                       };\r
-\r
-                       // Add DOM events\r
-                       each(lo, function(v, k) {\r
-                               switch (k) {\r
-                                       case 'contextmenu':\r
-                                               dom.bind(t.getDoc(), k, eventHandler);\r
-                                               break;\r
-\r
-                                       case 'paste':\r
-                                               dom.bind(t.getBody(), k, function(e) {\r
-                                                       eventHandler(e);\r
-                                               });\r
-                                               break;\r
-\r
-                                       case 'submit':\r
-                                       case 'reset':\r
-                                               dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);\r
-                                               break;\r
-\r
-                                       default:\r
-                                               dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);\r
-                               }\r
-                       });\r
-\r
-                       dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {\r
-                               t.focus(true);\r
-                       });\r
-\r
-\r
-                       // Fixes bug where a specified document_base_uri could result in broken images\r
-                       // This will also fix drag drop of images in Gecko\r
-                       if (tinymce.isGecko) {\r
-                               dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {\r
-                                       var v;\r
-\r
-                                       e = e.target;\r
-\r
-                                       if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src')))\r
-                                               e.src = t.documentBaseURI.toAbsolute(v);\r
-                               });\r
-                       }\r
-\r
-                       // Set various midas options in Gecko\r
-                       if (isGecko) {\r
-                               function setOpts() {\r
-                                       var t = this, d = t.getDoc(), s = t.settings;\r
-\r
-                                       if (isGecko && !s.readonly) {\r
-                                               if (t._isHidden()) {\r
-                                                       try {\r
-                                                               if (!s.content_editable) {\r
-                                                                       d.body.contentEditable = false;\r
-                                                                       d.body.contentEditable = true;\r
-                                                               }\r
-                                                       } catch (ex) {\r
-                                                               // Fails if it's hidden\r
-                                                       }\r
-                                               }\r
-\r
-                                               try {\r
-                                                       // Try new Gecko method\r
-                                                       d.execCommand("styleWithCSS", 0, false);\r
-                                               } catch (ex) {\r
-                                                       // Use old method\r
-                                                       if (!t._isHidden())\r
-                                                               try {d.execCommand("useCSS", 0, true);} catch (ex) {}\r
-                                               }\r
-\r
-                                               if (!s.table_inline_editing)\r
-                                                       try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}\r
-\r
-                                               if (!s.object_resizing)\r
-                                                       try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}\r
-                                       }\r
-                               };\r
-\r
-                               t.onBeforeExecCommand.add(setOpts);\r
-                               t.onMouseDown.add(setOpts);\r
-                       }\r
-\r
-                       t.onClick.add(function(ed, e) {\r
-                               e = e.target;\r
-\r
-                               // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250\r
-                               // WebKit can't even do simple things like selecting an image\r
-                               // Needs tobe the setBaseAndExtend or it will fail to select floated images\r
-                               if (tinymce.isWebKit && e.nodeName == 'IMG')\r
-                                       t.selection.getSel().setBaseAndExtent(e, 0, e, 1);\r
-\r
-                               if (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor'))\r
-                                       t.selection.select(e);\r
-\r
-                               t.nodeChanged();\r
-                       });\r
-\r
-                       // Add node change handlers\r
-                       t.onMouseUp.add(t.nodeChanged);\r
-                       //t.onClick.add(t.nodeChanged);\r
-                       t.onKeyUp.add(function(ed, e) {\r
-                               var c = e.keyCode;\r
-\r
-                               if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)\r
-                                       t.nodeChanged();\r
-                       });\r
-\r
-                       // Add reset handler\r
-                       t.onReset.add(function() {\r
-                               t.setContent(t.startContent, {format : 'raw'});\r
-                       });\r
-\r
-                       // Add shortcuts\r
-                       if (s.custom_shortcuts) {\r
-                               if (s.custom_undo_redo_keyboard_shortcuts) {\r
-                                       t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');\r
-                                       t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');\r
-                               }\r
-\r
-                               // Add default shortcuts for gecko\r
-                               t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');\r
-                               t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');\r
-                               t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');\r
-\r
-                               // BlockFormat shortcuts keys\r
-                               for (i=1; i<=6; i++)\r
-                                       t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);\r
-\r
-                               t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']);\r
-                               t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']);\r
-                               t.addShortcut('ctrl+9', '', ['FormatBlock', false, '<address>']);\r
-\r
-                               function find(e) {\r
-                                       var v = null;\r
-\r
-                                       if (!e.altKey && !e.ctrlKey && !e.metaKey)\r
-                                               return v;\r
-\r
-                                       each(t.shortcuts, function(o) {\r
-                                               if (tinymce.isMac && o.ctrl != e.metaKey)\r
-                                                       return;\r
-                                               else if (!tinymce.isMac && o.ctrl != e.ctrlKey)\r
-                                                       return;\r
-\r
-                                               if (o.alt != e.altKey)\r
-                                                       return;\r
-\r
-                                               if (o.shift != e.shiftKey)\r
-                                                       return;\r
-\r
-                                               if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {\r
-                                                       v = o;\r
-                                                       return false;\r
-                                               }\r
-                                       });\r
-\r
-                                       return v;\r
-                               };\r
-\r
-                               t.onKeyUp.add(function(ed, e) {\r
-                                       var o = find(e);\r
-\r
-                                       if (o)\r
-                                               return Event.cancel(e);\r
-                               });\r
-\r
-                               t.onKeyPress.add(function(ed, e) {\r
-                                       var o = find(e);\r
-\r
-                                       if (o)\r
-                                               return Event.cancel(e);\r
-                               });\r
-\r
-                               t.onKeyDown.add(function(ed, e) {\r
-                                       var o = find(e);\r
-\r
-                                       if (o) {\r
-                                               o.func.call(o.scope);\r
-                                               return Event.cancel(e);\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       if (tinymce.isIE) {\r
-                               // Fix so resize will only update the width and height attributes not the styles of an image\r
-                               // It will also block mceItemNoResize items\r
-                               dom.bind(t.getDoc(), 'controlselect', function(e) {\r
-                                       var re = t.resizeInfo, cb;\r
-\r
-                                       e = e.target;\r
-\r
-                                       // Don't do this action for non image elements\r
-                                       if (e.nodeName !== 'IMG')\r
-                                               return;\r
-\r
-                                       if (re)\r
-                                               dom.unbind(re.node, re.ev, re.cb);\r
-\r
-                                       if (!dom.hasClass(e, 'mceItemNoResize')) {\r
-                                               ev = 'resizeend';\r
-                                               cb = dom.bind(e, ev, function(e) {\r
-                                                       var v;\r
-\r
-                                                       e = e.target;\r
-\r
-                                                       if (v = dom.getStyle(e, 'width')) {\r
-                                                               dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));\r
-                                                               dom.setStyle(e, 'width', '');\r
-                                                       }\r
-\r
-                                                       if (v = dom.getStyle(e, 'height')) {\r
-                                                               dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));\r
-                                                               dom.setStyle(e, 'height', '');\r
-                                                       }\r
-                                               });\r
-                                       } else {\r
-                                               ev = 'resizestart';\r
-                                               cb = dom.bind(e, 'resizestart', Event.cancel, Event);\r
-                                       }\r
-\r
-                                       re = t.resizeInfo = {\r
-                                               node : e,\r
-                                               ev : ev,\r
-                                               cb : cb\r
-                                       };\r
-                               });\r
-                       }\r
-\r
-                       if (tinymce.isOpera) {\r
-                               t.onClick.add(function(ed, e) {\r
-                                       Event.prevent(e);\r
-                               });\r
-                       }\r
-\r
-                       // Add custom undo/redo handlers\r
-                       if (s.custom_undo_redo) {\r
-                               function addUndo() {\r
-                                       t.undoManager.typing = false;\r
-                                       t.undoManager.add();\r
-                               };\r
-\r
-                               dom.bind(t.getDoc(), 'focusout', function(e) {\r
-                                       if (!t.removed && t.undoManager.typing)\r
-                                               addUndo();\r
-                               });\r
-\r
-                               // Add undo level when contents is drag/dropped within the editor\r
-                               t.dom.bind(t.dom.getRoot(), 'dragend', function(e) {\r
-                                       addUndo();\r
-                               });\r
-\r
-                               t.onKeyUp.add(function(ed, e) {\r
-                                       var keyCode = e.keyCode;\r
-\r
-                                       if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey)\r
-                                               addUndo();\r
-                               });\r
-\r
-                               t.onKeyDown.add(function(ed, e) {\r
-                                       var keyCode = e.keyCode, sel;\r
-\r
-                                       if (keyCode == 8) {\r
-                                               sel = t.getDoc().selection;\r
-\r
-                                               // Fix IE control + backspace browser bug\r
-                                               if (sel && sel.createRange && sel.createRange().item) {\r
-                                                       t.undoManager.beforeChange();\r
-                                                       ed.dom.remove(sel.createRange().item(0));\r
-                                                       addUndo();\r
-\r
-                                                       return Event.cancel(e);\r
-                                               }\r
-                                       }\r
-\r
-                                       // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter\r
-                                       if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45) {\r
-                                               // Add position before enter key is pressed, used by IE since it still uses the default browser behavior\r
-                                               // Todo: Remove this once we normalize enter behavior on IE\r
-                                               if (tinymce.isIE && keyCode == 13)\r
-                                                       t.undoManager.beforeChange();\r
-\r
-                                               if (t.undoManager.typing)\r
-                                                       addUndo();\r
-\r
-                                               return;\r
-                                       }\r
-\r
-                                       // If key isn't shift,ctrl,alt,capslock,metakey\r
-                                       if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !t.undoManager.typing) {\r
-                                               t.undoManager.beforeChange();\r
-                                               t.undoManager.typing = true;\r
-                                               t.undoManager.add();\r
-                                       }\r
-                               });\r
-\r
-                               t.onMouseDown.add(function() {\r
-                                       if (t.undoManager.typing)\r
-                                               addUndo();\r
-                               });\r
-                       }\r
-\r
-                       // Bug fix for FireFox keeping styles from end of selection instead of start.\r
-                       if (tinymce.isGecko) {\r
-                               function getAttributeApplyFunction() {\r
-                                       var template = t.dom.getAttribs(t.selection.getStart().cloneNode(false));\r
-\r
-                                       return function() {\r
-                                               var target = t.selection.getStart();\r
-                                               t.dom.removeAllAttribs(target);\r
-                                               each(template, function(attr) {\r
-                                                       target.setAttributeNode(attr.cloneNode(true));\r
-                                               });\r
-                                       };\r
-                               }\r
-\r
-                               function isSelectionAcrossElements() {\r
-                                       var s = t.selection;\r
-\r
-                                       return !s.isCollapsed() && s.getStart() != s.getEnd();\r
-                               }\r
-\r
-                               t.onKeyPress.add(function(ed, e) {\r
-                                       var applyAttributes;\r
-\r
-                                       if ((e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {\r
-                                               applyAttributes = getAttributeApplyFunction();\r
-                                               t.getDoc().execCommand('delete', false, null);\r
-                                               applyAttributes();\r
-\r
-                                               return Event.cancel(e);\r
-                                       }\r
-                               });\r
-\r
-                               t.dom.bind(t.getDoc(), 'cut', function(e) {\r
-                                       var applyAttributes;\r
-\r
-                                       if (isSelectionAcrossElements()) {\r
-                                               applyAttributes = getAttributeApplyFunction();\r
-                                               t.onKeyUp.addToTop(Event.cancel, Event);\r
-\r
-                                               setTimeout(function() {\r
-                                                       applyAttributes();\r
-                                                       t.onKeyUp.remove(Event.cancel, Event);\r
-                                               }, 0);\r
-                                       }\r
-                               });\r
-                       }\r
-               },\r
-\r
-               _isHidden : function() {\r
-                       var s;\r
-\r
-                       if (!isGecko)\r
-                               return 0;\r
-\r
-                       // Weird, wheres that cursor selection?\r
-                       s = this.selection.getSel();\r
-                       return (!s || !s.rangeCount || s.rangeCount == 0);\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       // Added for compression purposes\r
-       var each = tinymce.each, undefined, TRUE = true, FALSE = false;\r
-\r
-       tinymce.EditorCommands = function(editor) {\r
-               var dom = editor.dom,\r
-                       selection = editor.selection,\r
-                       commands = {state: {}, exec : {}, value : {}},\r
-                       settings = editor.settings,\r
-                       bookmark;\r
-\r
-               function execCommand(command, ui, value) {\r
-                       var func;\r
-\r
-                       command = command.toLowerCase();\r
-                       if (func = commands.exec[command]) {\r
-                               func(command, ui, value);\r
-                               return TRUE;\r
-                       }\r
-\r
-                       return FALSE;\r
-               };\r
-\r
-               function queryCommandState(command) {\r
-                       var func;\r
-\r
-                       command = command.toLowerCase();\r
-                       if (func = commands.state[command])\r
-                               return func(command);\r
-\r
-                       return -1;\r
-               };\r
-\r
-               function queryCommandValue(command) {\r
-                       var func;\r
-\r
-                       command = command.toLowerCase();\r
-                       if (func = commands.value[command])\r
-                               return func(command);\r
-\r
-                       return FALSE;\r
-               };\r
-\r
-               function addCommands(command_list, type) {\r
-                       type = type || 'exec';\r
-\r
-                       each(command_list, function(callback, command) {\r
-                               each(command.toLowerCase().split(','), function(command) {\r
-                                       commands[type][command] = callback;\r
-                               });\r
-                       });\r
-               };\r
-\r
-               // Expose public methods\r
-               tinymce.extend(this, {\r
-                       execCommand : execCommand,\r
-                       queryCommandState : queryCommandState,\r
-                       queryCommandValue : queryCommandValue,\r
-                       addCommands : addCommands\r
-               });\r
-\r
-               // Private methods\r
-\r
-               function execNativeCommand(command, ui, value) {\r
-                       if (ui === undefined)\r
-                               ui = FALSE;\r
-\r
-                       if (value === undefined)\r
-                               value = null;\r
-\r
-                       return editor.getDoc().execCommand(command, ui, value);\r
-               };\r
-\r
-               function isFormatMatch(name) {\r
-                       return editor.formatter.match(name);\r
-               };\r
-\r
-               function toggleFormat(name, value) {\r
-                       editor.formatter.toggle(name, value ? {value : value} : undefined);\r
-               };\r
-\r
-               function storeSelection(type) {\r
-                       bookmark = selection.getBookmark(type);\r
-               };\r
-\r
-               function restoreSelection() {\r
-                       selection.moveToBookmark(bookmark);\r
-               };\r
-\r
-               // Add execCommand overrides\r
-               addCommands({\r
-                       // Ignore these, added for compatibility\r
-                       'mceResetDesignMode,mceBeginUndoLevel' : function() {},\r
-\r
-                       // Add undo manager logic\r
-                       'mceEndUndoLevel,mceAddUndoLevel' : function() {\r
-                               editor.undoManager.add();\r
-                       },\r
-\r
-                       'Cut,Copy,Paste' : function(command) {\r
-                               var doc = editor.getDoc(), failed;\r
-\r
-                               // Try executing the native command\r
-                               try {\r
-                                       execNativeCommand(command);\r
-                               } catch (ex) {\r
-                                       // Command failed\r
-                                       failed = TRUE;\r
-                               }\r
-\r
-                               // Present alert message about clipboard access not being available\r
-                               if (failed || !doc.queryCommandSupported(command)) {\r
-                                       if (tinymce.isGecko) {\r
-                                               editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {\r
-                                                       if (state)\r
-                                                               open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');\r
-                                               });\r
-                                       } else\r
-                                               editor.windowManager.alert(editor.getLang('clipboard_no_support'));\r
-                               }\r
-                       },\r
-\r
-                       // Override unlink command\r
-                       unlink : function(command) {\r
-                               if (selection.isCollapsed())\r
-                                       selection.select(selection.getNode());\r
-\r
-                               execNativeCommand(command);\r
-                               selection.collapse(FALSE);\r
-                       },\r
-\r
-                       // Override justify commands to use the text formatter engine\r
-                       'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
-                               var align = command.substring(7);\r
-\r
-                               // Remove all other alignments first\r
-                               each('left,center,right,full'.split(','), function(name) {\r
-                                       if (align != name)\r
-                                               editor.formatter.remove('align' + name);\r
-                               });\r
-\r
-                               toggleFormat('align' + align);\r
-                               execCommand('mceRepaint');\r
-                       },\r
-\r
-                       // Override list commands to fix WebKit bug\r
-                       'InsertUnorderedList,InsertOrderedList' : function(command) {\r
-                               var listElm, listParent;\r
-\r
-                               execNativeCommand(command);\r
-\r
-                               // WebKit produces lists within block elements so we need to split them\r
-                               // we will replace the native list creation logic to custom logic later on\r
-                               // TODO: Remove this when the list creation logic is removed\r
-                               listElm = dom.getParent(selection.getNode(), 'ol,ul');\r
-                               if (listElm) {\r
-                                       listParent = listElm.parentNode;\r
-\r
-                                       // If list is within a text block then split that block\r
-                                       if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\r
-                                               storeSelection();\r
-                                               dom.split(listParent, listElm);\r
-                                               restoreSelection();\r
-                                       }\r
-                               }\r
-                       },\r
-\r
-                       // Override commands to use the text formatter engine\r
-                       'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {\r
-                               toggleFormat(command);\r
-                       },\r
-\r
-                       // Override commands to use the text formatter engine\r
-                       'ForeColor,HiliteColor,FontName' : function(command, ui, value) {\r
-                               toggleFormat(command, value);\r
-                       },\r
-\r
-                       FontSize : function(command, ui, value) {\r
-                               var fontClasses, fontSizes;\r
-\r
-                               // Convert font size 1-7 to styles\r
-                               if (value >= 1 && value <= 7) {\r
-                                       fontSizes = tinymce.explode(settings.font_size_style_values);\r
-                                       fontClasses = tinymce.explode(settings.font_size_classes);\r
-\r
-                                       if (fontClasses)\r
-                                               value = fontClasses[value - 1] || value;\r
-                                       else\r
-                                               value = fontSizes[value - 1] || value;\r
-                               }\r
-\r
-                               toggleFormat(command, value);\r
-                       },\r
-\r
-                       RemoveFormat : function(command) {\r
-                               editor.formatter.remove(command);\r
-                       },\r
-\r
-                       mceBlockQuote : function(command) {\r
-                               toggleFormat('blockquote');\r
-                       },\r
-\r
-                       FormatBlock : function(command, ui, value) {\r
-                               return toggleFormat(value || 'p');\r
-                       },\r
-\r
-                       mceCleanup : function() {\r
-                               var bookmark = selection.getBookmark();\r
-\r
-                               editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});\r
-\r
-                               selection.moveToBookmark(bookmark);\r
-                       },\r
-\r
-                       mceRemoveNode : function(command, ui, value) {\r
-                               var node = value || selection.getNode();\r
-\r
-                               // Make sure that the body node isn't removed\r
-                               if (node != editor.getBody()) {\r
-                                       storeSelection();\r
-                                       editor.dom.remove(node, TRUE);\r
-                                       restoreSelection();\r
-                               }\r
-                       },\r
-\r
-                       mceSelectNodeDepth : function(command, ui, value) {\r
-                               var counter = 0;\r
-\r
-                               dom.getParent(selection.getNode(), function(node) {\r
-                                       if (node.nodeType == 1 && counter++ == value) {\r
-                                               selection.select(node);\r
-                                               return FALSE;\r
-                                       }\r
-                               }, editor.getBody());\r
-                       },\r
-\r
-                       mceSelectNode : function(command, ui, value) {\r
-                               selection.select(value);\r
-                       },\r
-\r
-                       mceInsertContent : function(command, ui, value) {\r
-                               var parser, serializer, parentNode, rootNode, fragment, args,\r
-                                       marker, nodeRect, viewPortRect, rng, node, node2, bookmarkHtml, viewportBodyElement;\r
-\r
-                               // Setup parser and serializer\r
-                               parser = editor.parser;\r
-                               serializer = new tinymce.html.Serializer({}, editor.schema);\r
-                               bookmarkHtml = '<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';\r
-\r
-                               // Run beforeSetContent handlers on the HTML to be inserted\r
-                               args = {content: value, format: 'html'};\r
-                               selection.onBeforeSetContent.dispatch(selection, args);\r
-                               value = args.content;\r
-\r
-                               // Add caret at end of contents if it's missing\r
-                               if (value.indexOf('{$caret}') == -1)\r
-                                       value += '{$caret}';\r
-\r
-                               // Replace the caret marker with a span bookmark element\r
-                               value = value.replace(/\{\$caret\}/, bookmarkHtml);\r
-\r
-                               // Insert node maker where we will insert the new HTML and get it's parent\r
-                               if (!selection.isCollapsed())\r
-                                       editor.getDoc().execCommand('Delete', false, null);\r
-\r
-                               parentNode = selection.getNode();\r
-\r
-                               // Parse the fragment within the context of the parent node\r
-                               args = {context : parentNode.nodeName.toLowerCase()};\r
-                               fragment = parser.parse(value, args);\r
-\r
-                               // Move the caret to a more suitable location\r
-                               node = fragment.lastChild;\r
-                               if (node.attr('id') == 'mce_marker') {\r
-                                       marker = node;\r
-\r
-                                       for (node = node.prev; node; node = node.walk(true)) {\r
-                                               if (node.type == 3 || !dom.isBlock(node.name)) {\r
-                                                       node.parent.insert(marker, node, node.name === 'br');\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // If parser says valid we can insert the contents into that parent\r
-                               if (!args.invalid) {\r
-                                       value = serializer.serialize(fragment);\r
-\r
-                                       // Check if parent is empty or only has one BR element then set the innerHTML of that parent\r
-                                       node = parentNode.firstChild;\r
-                                       node2 = parentNode.lastChild;\r
-                                       if (!node || (node === node2 && node.nodeName === 'BR'))\r
-                                               dom.setHTML(parentNode, value);\r
-                                       else\r
-                                               selection.setContent(value);\r
-                               } else {\r
-                                       // If the fragment was invalid within that context then we need\r
-                                       // to parse and process the parent it's inserted into\r
-\r
-                                       // Insert bookmark node and get the parent\r
-                                       selection.setContent(bookmarkHtml);\r
-                                       parentNode = editor.selection.getNode();\r
-                                       rootNode = editor.getBody();\r
-\r
-                                       // Opera will return the document node when selection is in root\r
-                                       if (parentNode.nodeType == 9)\r
-                                               parentNode = node = rootNode;\r
-                                       else\r
-                                               node = parentNode;\r
-\r
-                                       // Find the ancestor just before the root element\r
-                                       while (node !== rootNode) {\r
-                                               parentNode = node;\r
-                                               node = node.parentNode;\r
-                                       }\r
-\r
-                                       // Get the outer/inner HTML depending on if we are in the root and parser and serialize that\r
-                                       value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\r
-                                       value = serializer.serialize(\r
-                                               parser.parse(\r
-                                                       // Need to replace by using a function since $ in the contents would otherwise be a problem\r
-                                                       value.replace(/<span (id="mce_marker"|id=mce_marker).+<\/span>/i, function() {\r
-                                                               return serializer.serialize(fragment);\r
-                                                       })\r
-                                               )\r
-                                       );\r
-\r
-                                       // Set the inner/outer HTML depending on if we are in the root or not\r
-                                       if (parentNode == rootNode)\r
-                                               dom.setHTML(rootNode, value);\r
-                                       else\r
-                                               dom.setOuterHTML(parentNode, value);\r
-                               }\r
-\r
-                               marker = dom.get('mce_marker');\r
-\r
-                               // Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well\r
-                               nodeRect = dom.getRect(marker);\r
-                               viewPortRect = dom.getViewPort(editor.getWin());\r
-\r
-                               // Check if node is out side the viewport if it is then scroll to it\r
-                               if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) ||\r
-                                       (nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) {\r
-                                       viewportBodyElement = tinymce.isIE ? editor.getDoc().documentElement : editor.getBody();\r
-                                       viewportBodyElement.scrollLeft = nodeRect.x;\r
-                                       viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25;\r
-                               }\r
-\r
-                               // Move selection before marker and remove it\r
-                               rng = dom.createRng();\r
-\r
-                               // If previous sibling is a text node set the selection to the end of that node\r
-                               node = marker.previousSibling;\r
-                               if (node && node.nodeType == 3) {\r
-                                       rng.setStart(node, node.nodeValue.length);\r
-                               } else {\r
-                                       // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node\r
-                                       rng.setStartBefore(marker);\r
-                                       rng.setEndBefore(marker);\r
-                               }\r
-\r
-                               // Remove the marker node and set the new range\r
-                               dom.remove(marker);\r
-                               selection.setRng(rng);\r
-\r
-                               // Dispatch after event and add any visual elements needed\r
-                               selection.onSetContent.dispatch(selection, args);\r
-                               editor.addVisual();\r
-                       },\r
-\r
-                       mceInsertRawHTML : function(command, ui, value) {\r
-                               selection.setContent('tiny_mce_marker');\r
-                               editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value }));\r
-                       },\r
-\r
-                       mceSetContent : function(command, ui, value) {\r
-                               editor.setContent(value);\r
-                       },\r
-\r
-                       'Indent,Outdent' : function(command) {\r
-                               var intentValue, indentUnit, value;\r
-\r
-                               // Setup indent level\r
-                               intentValue = settings.indentation;\r
-                               indentUnit = /[a-z%]+$/i.exec(intentValue);\r
-                               intentValue = parseInt(intentValue);\r
-\r
-                               if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {\r
-                                       each(selection.getSelectedBlocks(), function(element) {\r
-                                               if (command == 'outdent') {\r
-                                                       value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);\r
-                                                       dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');\r
-                                               } else\r
-                                                       dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);\r
-                                       });\r
-                               } else\r
-                                       execNativeCommand(command);\r
-                       },\r
-\r
-                       mceRepaint : function() {\r
-                               var bookmark;\r
-\r
-                               if (tinymce.isGecko) {\r
-                                       try {\r
-                                               storeSelection(TRUE);\r
-\r
-                                               if (selection.getSel())\r
-                                                       selection.getSel().selectAllChildren(editor.getBody());\r
-\r
-                                               selection.collapse(TRUE);\r
-                                               restoreSelection();\r
-                                       } catch (ex) {\r
-                                               // Ignore\r
-                                       }\r
-                               }\r
-                       },\r
-\r
-                       mceToggleFormat : function(command, ui, value) {\r
-                               editor.formatter.toggle(value);\r
-                       },\r
-\r
-                       InsertHorizontalRule : function() {\r
-                               editor.execCommand('mceInsertContent', false, '<hr />');\r
-                       },\r
-\r
-                       mceToggleVisualAid : function() {\r
-                               editor.hasVisual = !editor.hasVisual;\r
-                               editor.addVisual();\r
-                       },\r
-\r
-                       mceReplaceContent : function(command, ui, value) {\r
-                               editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));\r
-                       },\r
-\r
-                       mceInsertLink : function(command, ui, value) {\r
-                               var link = dom.getParent(selection.getNode(), 'a'), img, style, cls;\r
-\r
-                               if (tinymce.is(value, 'string'))\r
-                                       value = {href : value};\r
-\r
-                               // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.\r
-                               value.href = value.href.replace(' ', '%20');\r
-\r
-                               if (!link) {\r
-                                       // WebKit can't create links on floated images for some odd reason\r
-                                       // So, just remove styles and restore it later\r
-                                       if (tinymce.isWebKit) {\r
-                                               img = dom.getParent(selection.getNode(), 'img');\r
-\r
-                                               if (img) {\r
-                                                       style = img.style.cssText;\r
-                                                       cls = img.className;\r
-                                                       img.style.cssText = null;\r
-                                                       img.className = null;\r
-                                               }\r
-                                       }\r
-\r
-                                       execNativeCommand('CreateLink', FALSE, 'javascript:mctmp(0);');\r
-\r
-                                       // Restore styles\r
-                                       if (style)\r
-                                               img.style.cssText = style;\r
-                                       if (cls)\r
-                                               img.className = cls;\r
-\r
-                                       each(dom.select("a[href='javascript:mctmp(0);']"), function(link) {\r
-                                               dom.setAttribs(link, value);\r
-                                       });\r
-                               } else {\r
-                                       if (value.href)\r
-                                               dom.setAttribs(link, value);\r
-                                       else\r
-                                               editor.dom.remove(link, TRUE);\r
-                               }\r
-                       },\r
-                       \r
-                       selectAll : function() {\r
-                               var root = dom.getRoot(), rng = dom.createRng();\r
-\r
-                               rng.setStart(root, 0);\r
-                               rng.setEnd(root, root.childNodes.length);\r
-\r
-                               editor.selection.setRng(rng);\r
-                       }\r
-               });\r
-\r
-               // Add queryCommandState overrides\r
-               addCommands({\r
-                       // Override justify commands\r
-                       'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
-                               return isFormatMatch('align' + command.substring(7));\r
-                       },\r
-\r
-                       'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {\r
-                               return isFormatMatch(command);\r
-                       },\r
-\r
-                       mceBlockQuote : function() {\r
-                               return isFormatMatch('blockquote');\r
-                       },\r
-\r
-                       Outdent : function() {\r
-                               var node;\r
-\r
-                               if (settings.inline_styles) {\r
-                                       if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
-                                               return TRUE;\r
-\r
-                                       if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
-                                               return TRUE;\r
-                               }\r
-\r
-                               return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));\r
-                       },\r
-\r
-                       'InsertUnorderedList,InsertOrderedList' : function(command) {\r
-                               return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');\r
-                       }\r
-               }, 'state');\r
-\r
-               // Add queryCommandValue overrides\r
-               addCommands({\r
-                       'FontSize,FontName' : function(command) {\r
-                               var value = 0, parent;\r
-\r
-                               if (parent = dom.getParent(selection.getNode(), 'span')) {\r
-                                       if (command == 'fontsize')\r
-                                               value = parent.style.fontSize;\r
-                                       else\r
-                                               value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();\r
-                               }\r
-\r
-                               return value;\r
-                       }\r
-               }, 'value');\r
-\r
-               // Add undo manager logic\r
-               if (settings.custom_undo_redo) {\r
-                       addCommands({\r
-                               Undo : function() {\r
-                                       editor.undoManager.undo();\r
-                               },\r
-\r
-                               Redo : function() {\r
-                                       editor.undoManager.redo();\r
-                               }\r
-                       });\r
-               }\r
-       };\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var Dispatcher = tinymce.util.Dispatcher;\r
-\r
-       tinymce.UndoManager = function(editor) {\r
-               var self, index = 0, data = [], beforeBookmark;\r
-\r
-               function getContent() {\r
-                       return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));\r
-               };\r
-\r
-               return self = {\r
-                       typing : false,\r
-\r
-                       onAdd : new Dispatcher(self),\r
-\r
-                       onUndo : new Dispatcher(self),\r
-\r
-                       onRedo : new Dispatcher(self),\r
-\r
-                       beforeChange : function() {\r
-                               beforeBookmark = editor.selection.getBookmark(2, true);\r
-                       },\r
-\r
-                       add : function(level) {\r
-                               var i, settings = editor.settings, lastLevel;\r
-\r
-                               level = level || {};\r
-                               level.content = getContent();\r
-\r
-                               // Add undo level if needed\r
-                               lastLevel = data[index];\r
-                               if (lastLevel && lastLevel.content == level.content)\r
-                                       return null;\r
-\r
-                               // Set before bookmark on previous level\r
-                               if (data[index])\r
-                                       data[index].beforeBookmark = beforeBookmark;\r
-\r
-                               // Time to compress\r
-                               if (settings.custom_undo_redo_levels) {\r
-                                       if (data.length > settings.custom_undo_redo_levels) {\r
-                                               for (i = 0; i < data.length - 1; i++)\r
-                                                       data[i] = data[i + 1];\r
-\r
-                                               data.length--;\r
-                                               index = data.length;\r
-                                       }\r
-                               }\r
-\r
-                               // Get a non intrusive normalized bookmark\r
-                               level.bookmark = editor.selection.getBookmark(2, true);\r
-\r
-                               // Crop array if needed\r
-                               if (index < data.length - 1)\r
-                                       data.length = index + 1;\r
-\r
-                               data.push(level);\r
-                               index = data.length - 1;\r
-\r
-                               self.onAdd.dispatch(self, level);\r
-                               editor.isNotDirty = 0;\r
-\r
-                               return level;\r
-                       },\r
-\r
-                       undo : function() {\r
-                               var level, i;\r
-\r
-                               if (self.typing) {\r
-                                       self.add();\r
-                                       self.typing = false;\r
-                               }\r
-\r
-                               if (index > 0) {\r
-                                       level = data[--index];\r
-\r
-                                       editor.setContent(level.content, {format : 'raw'});\r
-                                       editor.selection.moveToBookmark(level.beforeBookmark);\r
-\r
-                                       self.onUndo.dispatch(self, level);\r
-                               }\r
-\r
-                               return level;\r
-                       },\r
-\r
-                       redo : function() {\r
-                               var level;\r
-\r
-                               if (index < data.length - 1) {\r
-                                       level = data[++index];\r
-\r
-                                       editor.setContent(level.content, {format : 'raw'});\r
-                                       editor.selection.moveToBookmark(level.bookmark);\r
-\r
-                                       self.onRedo.dispatch(self, level);\r
-                               }\r
-\r
-                               return level;\r
-                       },\r
-\r
-                       clear : function() {\r
-                               data = [];\r
-                               index = 0;\r
-                               self.typing = false;\r
-                       },\r
-\r
-                       hasUndo : function() {\r
-                               return index > 0 || this.typing;\r
-                       },\r
-\r
-                       hasRedo : function() {\r
-                               return index < data.length - 1 && !this.typing;\r
-                       }\r
-               };\r
-       };\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       // Shorten names\r
-       var Event = tinymce.dom.Event,\r
-               isIE = tinymce.isIE,\r
-               isGecko = tinymce.isGecko,\r
-               isOpera = tinymce.isOpera,\r
-               each = tinymce.each,\r
-               extend = tinymce.extend,\r
-               TRUE = true,\r
-               FALSE = false;\r
-\r
-       function cloneFormats(node) {\r
-               var clone, temp, inner;\r
-\r
-               do {\r
-                       if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {\r
-                               if (clone) {\r
-                                       temp = node.cloneNode(false);\r
-                                       temp.appendChild(clone);\r
-                                       clone = temp;\r
-                               } else {\r
-                                       clone = inner = node.cloneNode(false);\r
-                               }\r
-\r
-                               clone.removeAttribute('id');\r
-                       }\r
-               } while (node = node.parentNode);\r
-\r
-               if (clone)\r
-                       return {wrapper : clone, inner : inner};\r
-       };\r
-\r
-       // Checks if the selection/caret is at the end of the specified block element\r
-       function isAtEnd(rng, par) {\r
-               var rng2 = par.ownerDocument.createRange();\r
-\r
-               rng2.setStart(rng.endContainer, rng.endOffset);\r
-               rng2.setEndAfter(par);\r
-\r
-               // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element\r
-               return rng2.cloneContents().textContent.length == 0;\r
-       };\r
-\r
-       function splitList(selection, dom, li) {\r
-               var listBlock, block;\r
-\r
-               if (dom.isEmpty(li)) {\r
-                       listBlock = dom.getParent(li, 'ul,ol');\r
-\r
-                       if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {\r
-                               dom.split(listBlock, li);\r
-                               block = dom.create('p', 0, '<br data-mce-bogus="1" />');\r
-                               dom.replace(block, li);\r
-                               selection.select(block, 1);\r
-                       }\r
-\r
-                       return FALSE;\r
-               }\r
-\r
-               return TRUE;\r
-       };\r
-\r
-       tinymce.create('tinymce.ForceBlocks', {\r
-               ForceBlocks : function(ed) {\r
-                       var t = this, s = ed.settings, elm;\r
-\r
-                       t.editor = ed;\r
-                       t.dom = ed.dom;\r
-                       elm = (s.forced_root_block || 'p').toLowerCase();\r
-                       s.element = elm.toUpperCase();\r
-\r
-                       ed.onPreInit.add(t.setup, t);\r
-               },\r
-\r
-               setup : function() {\r
-                       var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection, blockElements = ed.schema.getBlockElements();\r
-\r
-                       // Force root blocks\r
-                       if (s.forced_root_block) {\r
-                               function addRootBlocks() {\r
-                                       var node = selection.getStart(), rootNode = ed.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF;\r
-\r
-                                       if (!node || node.nodeType !== 1)\r
-                                               return;\r
-\r
-                                       // Check if node is wrapped in block\r
-                                       while (node != rootNode) {\r
-                                               if (blockElements[node.nodeName])\r
-                                                       return;\r
-\r
-                                               node = node.parentNode;\r
-                                       }\r
-\r
-                                       // Get current selection\r
-                                       rng = selection.getRng();\r
-                                       if (rng.setStart) {\r
-                                               startContainer = rng.startContainer;\r
-                                               startOffset = rng.startOffset;\r
-                                               endContainer = rng.endContainer;\r
-                                               endOffset = rng.endOffset;\r
-                                       } else {\r
-                                               // Force control range into text range\r
-                                               if (rng.item) {\r
-                                                       rng = ed.getDoc().body.createTextRange();\r
-                                                       rng.moveToElementText(rng.item(0));\r
-                                               }\r
-\r
-                                               tmpRng = rng.duplicate();\r
-                                               tmpRng.collapse(true);\r
-                                               startOffset = tmpRng.move('character', offset) * -1;\r
-\r
-                                               if (!tmpRng.collapsed) {\r
-                                                       tmpRng = rng.duplicate();\r
-                                                       tmpRng.collapse(false);\r
-                                                       endOffset = (tmpRng.move('character', offset) * -1) - startOffset;\r
-                                               }\r
-                                       }\r
-\r
-                                       // Wrap non block elements and text nodes\r
-                                       for (node = rootNode.firstChild; node; node) {\r
-                                               if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {\r
-                                                       if (!rootBlockNode) {\r
-                                                               rootBlockNode = dom.create(s.forced_root_block);\r
-                                                               node.parentNode.insertBefore(rootBlockNode, node);\r
-                                                       }\r
-\r
-                                                       tempNode = node;\r
-                                                       node = node.nextSibling;\r
-                                                       rootBlockNode.appendChild(tempNode);\r
-                                               } else {\r
-                                                       rootBlockNode = null;\r
-                                                       node = node.nextSibling;\r
-                                               }\r
-                                       }\r
-\r
-                                       if (rng.setStart) {\r
-                                               rng.setStart(startContainer, startOffset);\r
-                                               rng.setEnd(endContainer, endOffset);\r
-                                               selection.setRng(rng);\r
-                                       } else {\r
-                                               try {\r
-                                                       rng = ed.getDoc().body.createTextRange();\r
-                                                       rng.moveToElementText(rootNode);\r
-                                                       rng.collapse(true);\r
-                                                       rng.moveStart('character', startOffset);\r
-\r
-                                                       if (endOffset > 0)\r
-                                                               rng.moveEnd('character', endOffset);\r
-\r
-                                                       rng.select();\r
-                                               } catch (ex) {\r
-                                                       // Ignore\r
-                                               }\r
-                                       }\r
-\r
-                                       ed.nodeChanged();\r
-                               };\r
-\r
-                               ed.onKeyUp.add(addRootBlocks);\r
-                               ed.onClick.add(addRootBlocks);\r
-                       }\r
-\r
-                       if (s.force_br_newlines) {\r
-                               // Force IE to produce BRs on enter\r
-                               if (isIE) {\r
-                                       ed.onKeyPress.add(function(ed, e) {\r
-                                               var n;\r
-\r
-                                               if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {\r
-                                                       selection.setContent('<br id="__" /> ', {format : 'raw'});\r
-                                                       n = dom.get('__');\r
-                                                       n.removeAttribute('id');\r
-                                                       selection.select(n);\r
-                                                       selection.collapse();\r
-                                                       return Event.cancel(e);\r
-                                               }\r
-                                       });\r
-                               }\r
-                       }\r
-\r
-                       if (s.force_p_newlines) {\r
-                               if (!isIE) {\r
-                                       ed.onKeyPress.add(function(ed, e) {\r
-                                               if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))\r
-                                                       Event.cancel(e);\r
-                                       });\r
-                               } else {\r
-                                       // Ungly hack to for IE to preserve the formatting when you press\r
-                                       // enter at the end of a block element with formatted contents\r
-                                       // This logic overrides the browsers default logic with\r
-                                       // custom logic that enables us to control the output\r
-                                       tinymce.addUnload(function() {\r
-                                               t._previousFormats = 0; // Fix IE leak\r
-                                       });\r
-\r
-                                       ed.onKeyPress.add(function(ed, e) {\r
-                                               t._previousFormats = 0;\r
-\r
-                                               // Clone the current formats, this will later be applied to the new block contents\r
-                                               if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)\r
-                                                       t._previousFormats = cloneFormats(ed.selection.getStart());\r
-                                       });\r
-\r
-                                       ed.onKeyUp.add(function(ed, e) {\r
-                                               // Let IE break the element and the wrap the new caret location in the previous formats\r
-                                               if (e.keyCode == 13 && !e.shiftKey) {\r
-                                                       var parent = ed.selection.getStart(), fmt = t._previousFormats;\r
-\r
-                                                       // Parent is an empty block\r
-                                                       if (!parent.hasChildNodes() && fmt) {\r
-                                                               parent = dom.getParent(parent, dom.isBlock);\r
-\r
-                                                               if (parent && parent.nodeName != 'LI') {\r
-                                                                       parent.innerHTML = '';\r
-\r
-                                                                       if (t._previousFormats) {\r
-                                                                               parent.appendChild(fmt.wrapper);\r
-                                                                               fmt.inner.innerHTML = '\uFEFF';\r
-                                                                       } else\r
-                                                                               parent.innerHTML = '\uFEFF';\r
-\r
-                                                                       selection.select(parent, 1);\r
-                                                                       selection.collapse(true);\r
-                                                                       ed.getDoc().execCommand('Delete', false, null);\r
-                                                                       t._previousFormats = 0;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       });\r
-                               }\r
-\r
-                               if (isGecko) {\r
-                                       ed.onKeyDown.add(function(ed, e) {\r
-                                               if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)\r
-                                                       t.backspaceDelete(e, e.keyCode == 8);\r
-                                       });\r
-                               }\r
-                       }\r
-\r
-                       // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973\r
-                       if (tinymce.isWebKit) {\r
-                               function insertBr(ed) {\r
-                                       var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;\r
-\r
-                                       // Insert BR element\r
-                                       rng.insertNode(br = dom.create('br'));\r
-\r
-                                       // Place caret after BR\r
-                                       rng.setStartAfter(br);\r
-                                       rng.setEndAfter(br);\r
-                                       selection.setRng(rng);\r
-\r
-                                       // Could not place caret after BR then insert an nbsp entity and move the caret\r
-                                       if (selection.getSel().focusNode == br.previousSibling) {\r
-                                               selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));\r
-                                               selection.collapse(TRUE);\r
-                                       }\r
-\r
-                                       // Create a temporary DIV after the BR and get the position as it\r
-                                       // seems like getPos() returns 0 for text nodes and BR elements.\r
-                                       dom.insertAfter(div, br);\r
-                                       divYPos = dom.getPos(div).y;\r
-                                       dom.remove(div);\r
-\r
-                                       // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117\r
-                                       if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.\r
-                                               ed.getWin().scrollTo(0, divYPos);\r
-                               };\r
-\r
-                               ed.onKeyPress.add(function(ed, e) {\r
-                                       if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {\r
-                                               insertBr(ed);\r
-                                               Event.cancel(e);\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       // IE specific fixes\r
-                       if (isIE) {\r
-                               // Replaces IE:s auto generated paragraphs with the specified element name\r
-                               if (s.element != 'P') {\r
-                                       ed.onKeyPress.add(function(ed, e) {\r
-                                               t.lastElm = selection.getNode().nodeName;\r
-                                       });\r
-\r
-                                       ed.onKeyUp.add(function(ed, e) {\r
-                                               var bl, n = selection.getNode(), b = ed.getBody();\r
-\r
-                                               if (b.childNodes.length === 1 && n.nodeName == 'P') {\r
-                                                       n = dom.rename(n, s.element);\r
-                                                       selection.select(n);\r
-                                                       selection.collapse();\r
-                                                       ed.nodeChanged();\r
-                                               } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {\r
-                                                       bl = dom.getParent(n, 'p');\r
-\r
-                                                       if (bl) {\r
-                                                               dom.rename(bl, s.element);\r
-                                                               ed.nodeChanged();\r
-                                                       }\r
-                                               }\r
-                                       });\r
-                               }\r
-                       }\r
-               },\r
-\r
-               getParentBlock : function(n) {\r
-                       var d = this.dom;\r
-\r
-                       return d.getParent(n, d.isBlock);\r
-               },\r
-\r
-               insertPara : function(e) {\r
-                       var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;\r
-                       var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;\r
-\r
-                       ed.undoManager.beforeChange();\r
-\r
-                       // If root blocks are forced then use Operas default behavior since it's really good\r
-// Removed due to bug: #1853816\r
-//                     if (se.forced_root_block && isOpera)\r
-//                             return TRUE;\r
-\r
-                       // Setup before range\r
-                       rb = d.createRange();\r
-\r
-                       // If is before the first block element and in body, then move it into first block element\r
-                       rb.setStart(s.anchorNode, s.anchorOffset);\r
-                       rb.collapse(TRUE);\r
-\r
-                       // Setup after range\r
-                       ra = d.createRange();\r
-\r
-                       // If is before the first block element and in body, then move it into first block element\r
-                       ra.setStart(s.focusNode, s.focusOffset);\r
-                       ra.collapse(TRUE);\r
-\r
-                       // Setup start/end points\r
-                       dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
-                       sn = dir ? s.anchorNode : s.focusNode;\r
-                       so = dir ? s.anchorOffset : s.focusOffset;\r
-                       en = dir ? s.focusNode : s.anchorNode;\r
-                       eo = dir ? s.focusOffset : s.anchorOffset;\r
-\r
-                       // If selection is in empty table cell\r
-                       if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {\r
-                               if (sn.firstChild.nodeName == 'BR')\r
-                                       dom.remove(sn.firstChild); // Remove BR\r
-\r
-                               // Create two new block elements\r
-                               if (sn.childNodes.length == 0) {\r
-                                       ed.dom.add(sn, se.element, null, '<br />');\r
-                                       aft = ed.dom.add(sn, se.element, null, '<br />');\r
-                               } else {\r
-                                       n = sn.innerHTML;\r
-                                       sn.innerHTML = '';\r
-                                       ed.dom.add(sn, se.element, null, n);\r
-                                       aft = ed.dom.add(sn, se.element, null, '<br />');\r
-                               }\r
-\r
-                               // Move caret into the last one\r
-                               r = d.createRange();\r
-                               r.selectNodeContents(aft);\r
-                               r.collapse(1);\r
-                               ed.selection.setRng(r);\r
-\r
-                               return FALSE;\r
-                       }\r
-\r
-                       // If the caret is in an invalid location in FF we need to move it into the first block\r
-                       if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {\r
-                               sn = en = sn.firstChild;\r
-                               so = eo = 0;\r
-                               rb = d.createRange();\r
-                               rb.setStart(sn, 0);\r
-                               ra = d.createRange();\r
-                               ra.setStart(en, 0);\r
-                       }\r
-\r
-                       // Never use body as start or end node\r
-                       sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
-                       sn = sn.nodeName == "BODY" ? sn.firstChild : sn;\r
-                       en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
-                       en = en.nodeName == "BODY" ? en.firstChild : en;\r
-\r
-                       // Get start and end blocks\r
-                       sb = t.getParentBlock(sn);\r
-                       eb = t.getParentBlock(en);\r
-                       bn = sb ? sb.nodeName : se.element; // Get block name to create\r
-\r
-                       // Return inside list use default browser behavior\r
-                       if (n = t.dom.getParent(sb, 'li,pre')) {\r
-                               if (n.nodeName == 'LI')\r
-                                       return splitList(ed.selection, t.dom, n);\r
-\r
-                               return TRUE;\r
-                       }\r
-\r
-                       // If caption or absolute layers then always generate new blocks within\r
-                       if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
-                               bn = se.element;\r
-                               sb = null;\r
-                       }\r
-\r
-                       // If caption or absolute layers then always generate new blocks within\r
-                       if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
-                               bn = se.element;\r
-                               eb = null;\r
-                       }\r
-\r
-                       // Use P instead\r
-                       if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {\r
-                               bn = se.element;\r
-                               sb = eb = null;\r
-                       }\r
-\r
-                       // Setup new before and after blocks\r
-                       bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);\r
-                       aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);\r
-\r
-                       // Remove id from after clone\r
-                       aft.removeAttribute('id');\r
-\r
-                       // Is header and cursor is at the end, then force paragraph under\r
-                       if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))\r
-                               aft = ed.dom.create(se.element);\r
-\r
-                       // Find start chop node\r
-                       n = sc = sn;\r
-                       do {\r
-                               if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
-                                       break;\r
-\r
-                               sc = n;\r
-                       } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));\r
-\r
-                       // Find end chop node\r
-                       n = ec = en;\r
-                       do {\r
-                               if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
-                                       break;\r
-\r
-                               ec = n;\r
-                       } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));\r
-\r
-                       // Place first chop part into before block element\r
-                       if (sc.nodeName == bn)\r
-                               rb.setStart(sc, 0);\r
-                       else\r
-                               rb.setStartBefore(sc);\r
-\r
-                       rb.setEnd(sn, so);\r
-                       bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
-\r
-                       // Place secnd chop part within new block element\r
-                       try {\r
-                               ra.setEndAfter(ec);\r
-                       } catch(ex) {\r
-                               //console.debug(s.focusNode, s.focusOffset);\r
-                       }\r
-\r
-                       ra.setStart(en, eo);\r
-                       aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
-\r
-                       // Create range around everything\r
-                       r = d.createRange();\r
-                       if (!sc.previousSibling && sc.parentNode.nodeName == bn) {\r
-                               r.setStartBefore(sc.parentNode);\r
-                       } else {\r
-                               if (rb.startContainer.nodeName == bn && rb.startOffset == 0)\r
-                                       r.setStartBefore(rb.startContainer);\r
-                               else\r
-                                       r.setStart(rb.startContainer, rb.startOffset);\r
-                       }\r
-\r
-                       if (!ec.nextSibling && ec.parentNode.nodeName == bn)\r
-                               r.setEndAfter(ec.parentNode);\r
-                       else\r
-                               r.setEnd(ra.endContainer, ra.endOffset);\r
-\r
-                       // Delete and replace it with new block elements\r
-                       r.deleteContents();\r
-\r
-                       if (isOpera)\r
-                               ed.getWin().scrollTo(0, vp.y);\r
-\r
-                       // Never wrap blocks in blocks\r
-                       if (bef.firstChild && bef.firstChild.nodeName == bn)\r
-                               bef.innerHTML = bef.firstChild.innerHTML;\r
-\r
-                       if (aft.firstChild && aft.firstChild.nodeName == bn)\r
-                               aft.innerHTML = aft.firstChild.innerHTML;\r
-\r
-                       function appendStyles(e, en) {\r
-                               var nl = [], nn, n, i;\r
-\r
-                               e.innerHTML = '';\r
-\r
-                               // Make clones of style elements\r
-                               if (se.keep_styles) {\r
-                                       n = en;\r
-                                       do {\r
-                                               // We only want style specific elements\r
-                                               if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {\r
-                                                       nn = n.cloneNode(FALSE);\r
-                                                       dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique\r
-                                                       nl.push(nn);\r
-                                               }\r
-                                       } while (n = n.parentNode);\r
-                               }\r
-\r
-                               // Append style elements to aft\r
-                               if (nl.length > 0) {\r
-                                       for (i = nl.length - 1, nn = e; i >= 0; i--)\r
-                                               nn = nn.appendChild(nl[i]);\r
-\r
-                                       // Padd most inner style element\r
-                                       nl[0].innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there\r
-                                       return nl[0]; // Move caret to most inner element\r
-                               } else\r
-                                       e.innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there\r
-                       };\r
-                               \r
-                       // Padd empty blocks\r
-                       if (dom.isEmpty(bef))\r
-                               appendStyles(bef, sn);\r
-\r
-                       // Fill empty afterblook with current style\r
-                       if (dom.isEmpty(aft))\r
-                               car = appendStyles(aft, en);\r
-\r
-                       // Opera needs this one backwards for older versions\r
-                       if (isOpera && parseFloat(opera.version()) < 9.5) {\r
-                               r.insertNode(bef);\r
-                               r.insertNode(aft);\r
-                       } else {\r
-                               r.insertNode(aft);\r
-                               r.insertNode(bef);\r
-                       }\r
-\r
-                       // Normalize\r
-                       aft.normalize();\r
-                       bef.normalize();\r
-\r
-                       // Move cursor and scroll into view\r
-                       ed.selection.select(aft, true);\r
-                       ed.selection.collapse(true);\r
-\r
-                       // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs\r
-                       y = ed.dom.getPos(aft).y;\r
-                       //ch = aft.clientHeight;\r
-\r
-                       // Is element within viewport\r
-                       if (y < vp.y || y + 25 > vp.y + vp.h) {\r
-                               ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks\r
-\r
-                               /*console.debug(\r
-                                       'Element: y=' + y + ', h=' + ch + ', ' +\r
-                                       'Viewport: y=' + vp.y + ", h=" + vp.h + ', bottom=' + (vp.y + vp.h)\r
-                               );*/\r
-                       }\r
-\r
-                       ed.undoManager.add();\r
-\r
-                       return FALSE;\r
-               },\r
-\r
-               backspaceDelete : function(e, bs) {\r
-                       var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker;\r
-\r
-                       // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651\r
-                       if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {\r
-                               walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);\r
-\r
-                               // Walk the dom backwards until we find a text node\r
-                               for (n = sc.lastChild; n; n = walker.prev()) {\r
-                                       if (n.nodeType == 3) {\r
-                                               r.setStart(n, n.nodeValue.length);\r
-                                               r.collapse(true);\r
-                                               se.setRng(r);\r
-                                               return;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       // The caret sometimes gets stuck in Gecko if you delete empty paragraphs\r
-                       // This workaround removes the element by hand and moves the caret to the previous element\r
-                       if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {\r
-                               if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {\r
-                                       // Find previous block element\r
-                                       n = sc;\r
-                                       while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;\r
-\r
-                                       if (n) {\r
-                                               if (sc != b.firstChild) {\r
-                                                       // Find last text node\r
-                                                       w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);\r
-                                                       while (tn = w.nextNode())\r
-                                                               n = tn;\r
-\r
-                                                       // Place caret at the end of last text node\r
-                                                       r = ed.getDoc().createRange();\r
-                                                       r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);\r
-                                                       r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);\r
-                                                       se.setRng(r);\r
-\r
-                                                       // Remove the target container\r
-                                                       ed.dom.remove(sc);\r
-                                               }\r
-\r
-                                               return Event.cancel(e);\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       // Shorten names\r
-       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;\r
-\r
-       tinymce.create('tinymce.ControlManager', {\r
-               ControlManager : function(ed, s) {\r
-                       var t = this, i;\r
-\r
-                       s = s || {};\r
-                       t.editor = ed;\r
-                       t.controls = {};\r
-                       t.onAdd = new tinymce.util.Dispatcher(t);\r
-                       t.onPostRender = new tinymce.util.Dispatcher(t);\r
-                       t.prefix = s.prefix || ed.id + '_';\r
-                       t._cls = {};\r
-\r
-                       t.onPostRender.add(function() {\r
-                               each(t.controls, function(c) {\r
-                                       c.postRender();\r
-                               });\r
-                       });\r
-               },\r
-\r
-               get : function(id) {\r
-                       return this.controls[this.prefix + id] || this.controls[id];\r
-               },\r
-\r
-               setActive : function(id, s) {\r
-                       var c = null;\r
-\r
-                       if (c = this.get(id))\r
-                               c.setActive(s);\r
-\r
-                       return c;\r
-               },\r
-\r
-               setDisabled : function(id, s) {\r
-                       var c = null;\r
-\r
-                       if (c = this.get(id))\r
-                               c.setDisabled(s);\r
-\r
-                       return c;\r
-               },\r
-\r
-               add : function(c) {\r
-                       var t = this;\r
-\r
-                       if (c) {\r
-                               t.controls[c.id] = c;\r
-                               t.onAdd.dispatch(c, t);\r
-                       }\r
-\r
-                       return c;\r
-               },\r
-\r
-               createControl : function(n) {\r
-                       var c, t = this, ed = t.editor;\r
-\r
-                       each(ed.plugins, function(p) {\r
-                               if (p.createControl) {\r
-                                       c = p.createControl(n, t);\r
-\r
-                                       if (c)\r
-                                               return false;\r
-                               }\r
-                       });\r
-\r
-                       switch (n) {\r
-                               case "|":\r
-                               case "separator":\r
-                                       return t.createSeparator();\r
-                       }\r
-\r
-                       if (!c && ed.buttons && (c = ed.buttons[n]))\r
-                               return t.createButton(n, c);\r
-\r
-                       return t.add(c);\r
-               },\r
-\r
-               createDropMenu : function(id, s, cc) {\r
-                       var t = this, ed = t.editor, c, bm, v, cls;\r
-\r
-                       s = extend({\r
-                               'class' : 'mceDropDown',\r
-                               constrain : ed.settings.constrain_menus\r
-                       }, s);\r
-\r
-                       s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';\r
-                       if (v = ed.getParam('skin_variant'))\r
-                               s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);\r
-\r
-                       id = t.prefix + id;\r
-                       cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;\r
-                       c = t.controls[id] = new cls(id, s);\r
-                       c.onAddItem.add(function(c, o) {\r
-                               var s = o.settings;\r
-\r
-                               s.title = ed.getLang(s.title, s.title);\r
-\r
-                               if (!s.onclick) {\r
-                                       s.onclick = function(v) {\r
-                                               if (s.cmd)\r
-                                                       ed.execCommand(s.cmd, s.ui || false, s.value);\r
-                                       };\r
-                               }\r
-                       });\r
-\r
-                       ed.onRemove.add(function() {\r
-                               c.destroy();\r
-                       });\r
-\r
-                       // Fix for bug #1897785, #1898007\r
-                       if (tinymce.isIE) {\r
-                               c.onShowMenu.add(function() {\r
-                                       // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
-                                       ed.focus();\r
-\r
-                                       bm = ed.selection.getBookmark(1);\r
-                               });\r
-\r
-                               c.onHideMenu.add(function() {\r
-                                       if (bm) {\r
-                                               ed.selection.moveToBookmark(bm);\r
-                                               bm = 0;\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       return t.add(c);\r
-               },\r
-\r
-               createListBox : function(id, s, cc) {\r
-                       var t = this, ed = t.editor, cmd, c, cls;\r
-\r
-                       if (t.get(id))\r
-                               return null;\r
-\r
-                       s.title = ed.translate(s.title);\r
-                       s.scope = s.scope || ed;\r
-\r
-                       if (!s.onselect) {\r
-                               s.onselect = function(v) {\r
-                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
-                               };\r
-                       }\r
-\r
-                       s = extend({\r
-                               title : s.title,\r
-                               'class' : 'mce_' + id,\r
-                               scope : s.scope,\r
-                               control_manager : t\r
-                       }, s);\r
-\r
-                       id = t.prefix + id;\r
-\r
-                       if (ed.settings.use_native_selects)\r
-                               c = new tinymce.ui.NativeListBox(id, s);\r
-                       else {\r
-                               cls = cc || t._cls.listbox || tinymce.ui.ListBox;\r
-                               c = new cls(id, s, ed);\r
-                       }\r
-\r
-                       t.controls[id] = c;\r
-\r
-                       // Fix focus problem in Safari\r
-                       if (tinymce.isWebKit) {\r
-                               c.onPostRender.add(function(c, n) {\r
-                                       // Store bookmark on mousedown\r
-                                       Event.add(n, 'mousedown', function() {\r
-                                               ed.bookmark = ed.selection.getBookmark(1);\r
-                                       });\r
-\r
-                                       // Restore on focus, since it might be lost\r
-                                       Event.add(n, 'focus', function() {\r
-                                               ed.selection.moveToBookmark(ed.bookmark);\r
-                                               ed.bookmark = null;\r
-                                       });\r
-                               });\r
-                       }\r
-\r
-                       if (c.hideMenu)\r
-                               ed.onMouseDown.add(c.hideMenu, c);\r
-\r
-                       return t.add(c);\r
-               },\r
-\r
-               createButton : function(id, s, cc) {\r
-                       var t = this, ed = t.editor, o, c, cls;\r
-\r
-                       if (t.get(id))\r
-                               return null;\r
-\r
-                       s.title = ed.translate(s.title);\r
-                       s.label = ed.translate(s.label);\r
-                       s.scope = s.scope || ed;\r
-\r
-                       if (!s.onclick && !s.menu_button) {\r
-                               s.onclick = function() {\r
-                                       ed.execCommand(s.cmd, s.ui || false, s.value);\r
-                               };\r
-                       }\r
-\r
-                       s = extend({\r
-                               title : s.title,\r
-                               'class' : 'mce_' + id,\r
-                               unavailable_prefix : ed.getLang('unavailable', ''),\r
-                               scope : s.scope,\r
-                               control_manager : t\r
-                       }, s);\r
-\r
-                       id = t.prefix + id;\r
-\r
-                       if (s.menu_button) {\r
-                               cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;\r
-                               c = new cls(id, s, ed);\r
-                               ed.onMouseDown.add(c.hideMenu, c);\r
-                       } else {\r
-                               cls = t._cls.button || tinymce.ui.Button;\r
-                               c = new cls(id, s, ed);\r
-                       }\r
-\r
-                       return t.add(c);\r
-               },\r
-\r
-               createMenuButton : function(id, s, cc) {\r
-                       s = s || {};\r
-                       s.menu_button = 1;\r
-\r
-                       return this.createButton(id, s, cc);\r
-               },\r
-\r
-               createSplitButton : function(id, s, cc) {\r
-                       var t = this, ed = t.editor, cmd, c, cls;\r
-\r
-                       if (t.get(id))\r
-                               return null;\r
-\r
-                       s.title = ed.translate(s.title);\r
-                       s.scope = s.scope || ed;\r
-\r
-                       if (!s.onclick) {\r
-                               s.onclick = function(v) {\r
-                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
-                               };\r
-                       }\r
-\r
-                       if (!s.onselect) {\r
-                               s.onselect = function(v) {\r
-                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
-                               };\r
-                       }\r
-\r
-                       s = extend({\r
-                               title : s.title,\r
-                               'class' : 'mce_' + id,\r
-                               scope : s.scope,\r
-                               control_manager : t\r
-                       }, s);\r
-\r
-                       id = t.prefix + id;\r
-                       cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;\r
-                       c = t.add(new cls(id, s, ed));\r
-                       ed.onMouseDown.add(c.hideMenu, c);\r
-\r
-                       return c;\r
-               },\r
-\r
-               createColorSplitButton : function(id, s, cc) {\r
-                       var t = this, ed = t.editor, cmd, c, cls, bm;\r
-\r
-                       if (t.get(id))\r
-                               return null;\r
-\r
-                       s.title = ed.translate(s.title);\r
-                       s.scope = s.scope || ed;\r
-\r
-                       if (!s.onclick) {\r
-                               s.onclick = function(v) {\r
-                                       if (tinymce.isIE)\r
-                                               bm = ed.selection.getBookmark(1);\r
-\r
-                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
-                               };\r
-                       }\r
-\r
-                       if (!s.onselect) {\r
-                               s.onselect = function(v) {\r
-                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
-                               };\r
-                       }\r
-\r
-                       s = extend({\r
-                               title : s.title,\r
-                               'class' : 'mce_' + id,\r
-                               'menu_class' : ed.getParam('skin') + 'Skin',\r
-                               scope : s.scope,\r
-                               more_colors_title : ed.getLang('more_colors')\r
-                       }, s);\r
-\r
-                       id = t.prefix + id;\r
-                       cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;\r
-                       c = new cls(id, s, ed);\r
-                       ed.onMouseDown.add(c.hideMenu, c);\r
-\r
-                       // Remove the menu element when the editor is removed\r
-                       ed.onRemove.add(function() {\r
-                               c.destroy();\r
-                       });\r
-\r
-                       // Fix for bug #1897785, #1898007\r
-                       if (tinymce.isIE) {\r
-                               c.onShowMenu.add(function() {\r
-                                       // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
-                                       ed.focus();\r
-                                       bm = ed.selection.getBookmark(1);\r
-                               });\r
-\r
-                               c.onHideMenu.add(function() {\r
-                                       if (bm) {\r
-                                               ed.selection.moveToBookmark(bm);\r
-                                               bm = 0;\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       return t.add(c);\r
-               },\r
-\r
-               createToolbar : function(id, s, cc) {\r
-                       var c, t = this, cls;\r
-\r
-                       id = t.prefix + id;\r
-                       cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;\r
-                       c = new cls(id, s, t.editor);\r
-\r
-                       if (t.get(id))\r
-                               return null;\r
-\r
-                       return t.add(c);\r
-               },\r
-               \r
-               createToolbarGroup : function(id, s, cc) {\r
-                       var c, t = this, cls;\r
-                       id = t.prefix + id;\r
-                       cls = cc || this._cls.toolbarGroup || tinymce.ui.ToolbarGroup;\r
-                       c = new cls(id, s, t.editor);\r
-                       \r
-                       if (t.get(id))\r
-                               return null;\r
-                       \r
-                       return t.add(c);\r
-               },\r
-\r
-               createSeparator : function(cc) {\r
-                       var cls = cc || this._cls.separator || tinymce.ui.Separator;\r
-\r
-                       return new cls();\r
-               },\r
-\r
-               setControlType : function(n, c) {\r
-                       return this._cls[n.toLowerCase()] = c;\r
-               },\r
-       \r
-               destroy : function() {\r
-                       each(this.controls, function(c) {\r
-                               c.destroy();\r
-                       });\r
-\r
-                       this.controls = null;\r
-               }\r
-       });\r
-})(tinymce);\r
-\r
-(function(tinymce) {\r
-       var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;\r
-\r
-       tinymce.create('tinymce.WindowManager', {\r
-               WindowManager : function(ed) {\r
-                       var t = this;\r
-\r
-                       t.editor = ed;\r
-                       t.onOpen = new Dispatcher(t);\r
-                       t.onClose = new Dispatcher(t);\r
-                       t.params = {};\r
-                       t.features = {};\r
-               },\r
-\r
-               open : function(s, p) {\r
-                       var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;\r
-\r
-                       // Default some options\r
-                       s = s || {};\r
-                       p = p || {};\r
-                       sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window\r
-                       sh = isOpera ? vp.h : screen.height;\r
-                       s.name = s.name || 'mc_' + new Date().getTime();\r
-                       s.width = parseInt(s.width || 320);\r
-                       s.height = parseInt(s.height || 240);\r
-                       s.resizable = true;\r
-                       s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);\r
-                       s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);\r
-                       p.inline = false;\r
-                       p.mce_width = s.width;\r
-                       p.mce_height = s.height;\r
-                       p.mce_auto_focus = s.auto_focus;\r
-\r
-                       if (mo) {\r
-                               if (isIE) {\r
-                                       s.center = true;\r
-                                       s.help = false;\r
-                                       s.dialogWidth = s.width + 'px';\r
-                                       s.dialogHeight = s.height + 'px';\r
-                                       s.scroll = s.scrollbars || false;\r
-                               }\r
-                       }\r
-\r
-                       // Build features string\r
-                       each(s, function(v, k) {\r
-                               if (tinymce.is(v, 'boolean'))\r
-                                       v = v ? 'yes' : 'no';\r
-\r
-                               if (!/^(name|url)$/.test(k)) {\r
-                                       if (isIE && mo)\r
-                                               f += (f ? ';' : '') + k + ':' + v;\r
-                                       else\r
-                                               f += (f ? ',' : '') + k + '=' + v;\r
-                               }\r
-                       });\r
-\r
-                       t.features = s;\r
-                       t.params = p;\r
-                       t.onOpen.dispatch(t, s, p);\r
-\r
-                       u = s.url || s.file;\r
-                       u = tinymce._addVer(u);\r
-\r
-                       try {\r
-                               if (isIE && mo) {\r
-                                       w = 1;\r
-                                       window.showModalDialog(u, window, f);\r
-                               } else\r
-                                       w = window.open(u, s.name, f);\r
-                       } catch (ex) {\r
-                               // Ignore\r
-                       }\r
-\r
-                       if (!w)\r
-                               alert(t.editor.getLang('popup_blocked'));\r
-               },\r
-\r
-               close : function(w) {\r
-                       w.close();\r
-                       this.onClose.dispatch(this);\r
-               },\r
-\r
-               createInstance : function(cl, a, b, c, d, e) {\r
-                       var f = tinymce.resolve(cl);\r
-\r
-                       return new f(a, b, c, d, e);\r
-               },\r
-\r
-               confirm : function(t, cb, s, w) {\r
-                       w = w || window;\r
-\r
-                       cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));\r
-               },\r
-\r
-               alert : function(tx, cb, s, w) {\r
-                       var t = this;\r
-\r
-                       w = w || window;\r
-                       w.alert(t._decode(t.editor.getLang(tx, tx)));\r
-\r
-                       if (cb)\r
-                               cb.call(s || t);\r
-               },\r
-\r
-               resizeBy : function(dw, dh, win) {\r
-                       win.resizeBy(dw, dh);\r
-               },\r
-\r
-               // Internal functions\r
-\r
-               _decode : function(s) {\r
-                       return tinymce.DOM.decode(s).replace(/\\n/g, '\n');\r
-               }\r
-       });\r
-}(tinymce));\r
-(function(tinymce) {\r
-       tinymce.Formatter = function(ed) {\r
-               var formats = {},\r
-                       each = tinymce.each,\r
-                       dom = ed.dom,\r
-                       selection = ed.selection,\r
-                       TreeWalker = tinymce.dom.TreeWalker,\r
-                       rangeUtils = new tinymce.dom.RangeUtils(dom),\r
-                       isValid = ed.schema.isValidChild,\r
-                       isBlock = dom.isBlock,\r
-                       forcedRootBlock = ed.settings.forced_root_block,\r
-                       nodeIndex = dom.nodeIndex,\r
-                       INVISIBLE_CHAR = '\uFEFF',\r
-                       MCE_ATTR_RE = /^(src|href|style)$/,\r
-                       FALSE = false,\r
-                       TRUE = true,\r
-                       undefined,\r
-                       pendingFormats = {apply : [], remove : []};\r
-\r
-               function isArray(obj) {\r
-                       return obj instanceof Array;\r
-               };\r
-\r
-               function getParents(node, selector) {\r
-                       return dom.getParents(node, selector, dom.getRoot());\r
-               };\r
-\r
-               function isCaretNode(node) {\r
-                       return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');\r
-               };\r
-\r
-               // Public functions\r
-\r
-               function get(name) {\r
-                       return name ? formats[name] : formats;\r
-               };\r
-\r
-               function register(name, format) {\r
-                       if (name) {\r
-                               if (typeof(name) !== 'string') {\r
-                                       each(name, function(format, name) {\r
-                                               register(name, format);\r
-                                       });\r
-                               } else {\r
-                                       // Force format into array and add it to internal collection\r
-                                       format = format.length ? format : [format];\r
-\r
-                                       each(format, function(format) {\r
-                                               // Set deep to false by default on selector formats this to avoid removing\r
-                                               // alignment on images inside paragraphs when alignment is changed on paragraphs\r
-                                               if (format.deep === undefined)\r
-                                                       format.deep = !format.selector;\r
-\r
-                                               // Default to true\r
-                                               if (format.split === undefined)\r
-                                                       format.split = !format.selector || format.inline;\r
-\r
-                                               // Default to true\r
-                                               if (format.remove === undefined && format.selector && !format.inline)\r
-                                                       format.remove = 'none';\r
-\r
-                                               // Mark format as a mixed format inline + block level\r
-                                               if (format.selector && format.inline) {\r
-                                                       format.mixed = true;\r
-                                                       format.block_expand = true;\r
-                                               }\r
-\r
-                                               // Split classes if needed\r
-                                               if (typeof(format.classes) === 'string')\r
-                                                       format.classes = format.classes.split(/\s+/);\r
-                                       });\r
-\r
-                                       formats[name] = format;\r
-                               }\r
-                       }\r
-               };\r
-\r
-               var getTextDecoration = function(node) {\r
-                       var decoration;\r
-\r
-                       ed.dom.getParent(node, function(n) {\r
-                               decoration = ed.dom.getStyle(n, 'text-decoration');\r
-                               return decoration && decoration !== 'none';\r
-                       });\r
-\r
-                       return decoration;\r
-               };\r
-\r
-               var processUnderlineAndColor = function(node) {\r
-                       var textDecoration;\r
-                       if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\r
-                               textDecoration = getTextDecoration(node.parentNode);\r
-                               if (ed.dom.getStyle(node, 'color') && textDecoration) {\r
-                                       ed.dom.setStyle(node, 'text-decoration', textDecoration);\r
-                               } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) {\r
-                                       ed.dom.setStyle(node, 'text-decoration', null);\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function apply(name, vars, node) {\r
-                       var formatList = get(name), format = formatList[0], bookmark, rng, i, isCollapsed = selection.isCollapsed();\r
-\r
-                       function moveStart(rng) {\r
-                               var container = rng.startContainer,\r
-                                       offset = rng.startOffset,\r
-                                       walker, node;\r
-\r
-                               // Move startContainer/startOffset in to a suitable node\r
-                               if (container.nodeType == 1 || container.nodeValue === "") {\r
-                                       container = container.nodeType == 1 ? container.childNodes[offset] : container;\r
-\r
-                                       // Might fail if the offset is behind the last element in it's container\r
-                                       if (container) {\r
-                                               walker = new TreeWalker(container, container.parentNode);\r
-                                               for (node = walker.current(); node; node = walker.next()) {\r
-                                                       if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
-                                                               rng.setStart(node, 0);\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               return rng;\r
-                       };\r
-\r
-                       function setElementFormat(elm, fmt) {\r
-                               fmt = fmt || format;\r
-\r
-                               if (elm) {\r
-                                       each(fmt.styles, function(value, name) {\r
-                                               dom.setStyle(elm, name, replaceVars(value, vars));\r
-                                       });\r
-\r
-                                       each(fmt.attributes, function(value, name) {\r
-                                               dom.setAttrib(elm, name, replaceVars(value, vars));\r
-                                       });\r
-\r
-                                       each(fmt.classes, function(value) {\r
-                                               value = replaceVars(value, vars);\r
-\r
-                                               if (!dom.hasClass(elm, value))\r
-                                                       dom.addClass(elm, value);\r
-                                       });\r
-                               }\r
-                       };\r
-\r
-                       function applyRngStyle(rng) {\r
-                               var newWrappers = [], wrapName, wrapElm;\r
-\r
-                               // Setup wrapper element\r
-                               wrapName = format.inline || format.block;\r
-                               wrapElm = dom.create(wrapName);\r
-                               setElementFormat(wrapElm);\r
-\r
-                               rangeUtils.walk(rng, function(nodes) {\r
-                                       var currentWrapElm;\r
-\r
-                                       function process(node) {\r
-                                               var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;\r
-\r
-                                               // Stop wrapping on br elements\r
-                                               if (isEq(nodeName, 'br')) {\r
-                                                       currentWrapElm = 0;\r
-\r
-                                                       // Remove any br elements when we wrap things\r
-                                                       if (format.block)\r
-                                                               dom.remove(node);\r
-\r
-                                                       return;\r
-                                               }\r
-\r
-                                               // If node is wrapper type\r
-                                               if (format.wrapper && matchNode(node, name, vars)) {\r
-                                                       currentWrapElm = 0;\r
-                                                       return;\r
-                                               }\r
-\r
-                                               // Can we rename the block\r
-                                               if (format.block && !format.wrapper && isTextBlock(nodeName)) {\r
-                                                       node = dom.rename(node, wrapName);\r
-                                                       setElementFormat(node);\r
-                                                       newWrappers.push(node);\r
-                                                       currentWrapElm = 0;\r
-                                                       return;\r
-                                               }\r
-\r
-                                               // Handle selector patterns\r
-                                               if (format.selector) {\r
-                                                       // Look for matching formats\r
-                                                       each(formatList, function(format) {\r
-                                                               // Check collapsed state if it exists\r
-                                                               if ('collapsed' in format && format.collapsed !== isCollapsed) {\r
-                                                                       return;\r
-                                                               }\r
-\r
-                                                               if (dom.is(node, format.selector) && !isCaretNode(node)) {\r
-                                                                       setElementFormat(node, format);\r
-                                                                       found = true;\r
-                                                               }\r
-                                                       });\r
-\r
-                                                       // Continue processing if a selector match wasn't found and a inline element is defined\r
-                                                       if (!format.inline || found) {\r
-                                                               currentWrapElm = 0;\r
-                                                               return;\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Is it valid to wrap this item\r
-                                               if (isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&\r
-                                                               !(node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279)) {\r
-                                                       // Start wrapping\r
-                                                       if (!currentWrapElm) {\r
-                                                               // Wrap the node\r
-                                                               currentWrapElm = wrapElm.cloneNode(FALSE);\r
-                                                               node.parentNode.insertBefore(currentWrapElm, node);\r
-                                                               newWrappers.push(currentWrapElm);\r
-                                                       }\r
-\r
-                                                       currentWrapElm.appendChild(node);\r
-                                               } else if (nodeName == 'li') {\r
-                                                       // Start wrapping\r
-                                                       if (!currentWrapElm) {\r
-                                                               // Wrap the node\r
-                                                               liTextNode = node.ownerDocument.createTextNode('');\r
-                                                               each(tinymce.grep(node.childNodes), function(n) { if (n.nodeType == 3) { liTextNode.nodeValue += n.nodeValue; n.parentNode.removeChild(n); } });\r
-                                                               currentWrapElm = wrapElm.cloneNode(FALSE);\r
-                                                               node.insertBefore(currentWrapElm, node.firstChild);\r
-                                                               newWrappers.push(currentWrapElm);\r
-                                                       }\r
-\r
-                                                       currentWrapElm.appendChild(liTextNode);\r
-                                                       \r
-                                               } else {\r
-                                                       // Start a new wrapper for possible children\r
-                                                       currentWrapElm = 0;\r
-\r
-                                                       each(tinymce.grep(node.childNodes), process);\r
-\r
-                                                       // End the last wrapper\r
-                                                       currentWrapElm = 0;\r
-                                               }\r
-                                       };\r
-\r
-                                       // Process siblings from range\r
-                                       each(nodes, process);\r
-                               });\r
-\r
-                               // Wrap links inside as well, for example color inside a link when the wrapper is around the link\r
-                               if (format.wrap_links === false) {\r
-                                       each(newWrappers, function(node) {\r
-                                               function process(node) {\r
-                                                       var i, currentWrapElm, children;\r
-\r
-                                                       if (node.nodeName === 'A') {\r
-                                                               currentWrapElm = wrapElm.cloneNode(FALSE);\r
-                                                               newWrappers.push(currentWrapElm);\r
-\r
-                                                               children = tinymce.grep(node.childNodes);\r
-                                                               for (i = 0; i < children.length; i++)\r
-                                                                       currentWrapElm.appendChild(children[i]);\r
-\r
-                                                               node.appendChild(currentWrapElm);\r
-                                                       }\r
-\r
-                                                       each(tinymce.grep(node.childNodes), process);\r
-                                               };\r
-\r
-                                               process(node);\r
-                                       });\r
-                               }\r
-\r
-                               // Cleanup\r
-                               each(newWrappers, function(node) {\r
-                                       var childCount;\r
-\r
-                                       function getChildCount(node) {\r
-                                               var count = 0;\r
-\r
-                                               each(node.childNodes, function(node) {\r
-                                                       if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))\r
-                                                               count++;\r
-                                               });\r
-\r
-                                               return count;\r
-                                       };\r
-\r
-                                       function mergeStyles(node) {\r
-                                               var child, clone;\r
-\r
-                                               each(node.childNodes, function(node) {\r
-                                                       if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {\r
-                                                               child = node;\r
-                                                               return FALSE; // break loop\r
-                                                       }\r
-                                               });\r
-\r
-                                               // If child was found and of the same type as the current node\r
-                                               if (child && matchName(child, format)) {\r
-                                                       clone = child.cloneNode(FALSE);\r
-                                                       setElementFormat(clone);\r
-\r
-                                                       dom.replace(clone, node, TRUE);\r
-                                                       dom.remove(child, 1);\r
-                                               }\r
-\r
-                                               return clone || node;\r
-                                       };\r
-\r
-                                       childCount = getChildCount(node);\r
-\r
-                                       // Remove empty nodes but only if there is multiple wrappers and they are not block\r
-                                       // elements so never remove single <h1></h1> since that would remove the currrent empty block element where the caret is at\r
-                                       if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {\r
-                                               dom.remove(node, 1);\r
-                                               return;\r
-                                       }\r
-\r
-                                       if (format.inline || format.wrapper) {\r
-                                               // Merges the current node with it's children of similar type to reduce the number of elements\r
-                                               if (!format.exact && childCount === 1)\r
-                                                       node = mergeStyles(node);\r
-\r
-                                               // Remove/merge children\r
-                                               each(formatList, function(format) {\r
-                                                       // Merge all children of similar type will move styles from child to parent\r
-                                                       // this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>\r
-                                                       // will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>\r
-                                                       each(dom.select(format.inline, node), function(child) {\r
-                                                               var parent;\r
-\r
-                                                               // When wrap_links is set to false we don't want\r
-                                                               // to remove the format on children within links\r
-                                                               if (format.wrap_links === false) {\r
-                                                                       parent = child.parentNode;\r
-\r
-                                                                       do {\r
-                                                                               if (parent.nodeName === 'A')\r
-                                                                                       return;\r
-                                                                       } while (parent = parent.parentNode);\r
-                                                               }\r
-\r
-                                                               removeFormat(format, vars, child, format.exact ? child : null);\r
-                                                       });\r
-                                               });\r
-\r
-                                               // Remove child if direct parent is of same type\r
-                                               if (matchNode(node.parentNode, name, vars)) {\r
-                                                       dom.remove(node, 1);\r
-                                                       node = 0;\r
-                                                       return TRUE;\r
-                                               }\r
-\r
-                                               // Look for parent with similar style format\r
-                                               if (format.merge_with_parents) {\r
-                                                       dom.getParent(node.parentNode, function(parent) {\r
-                                                               if (matchNode(parent, name, vars)) {\r
-                                                                       dom.remove(node, 1);\r
-                                                                       node = 0;\r
-                                                                       return TRUE;\r
-                                                               }\r
-                                                       });\r
-                                               }\r
-\r
-                                               // Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>\r
-                                               if (node) {\r
-                                                       node = mergeSiblings(getNonWhiteSpaceSibling(node), node);\r
-                                                       node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));\r
-                                               }\r
-                                       }\r
-                               });\r
-                       };\r
-\r
-                       if (format) {\r
-                               if (node) {\r
-                                       rng = dom.createRng();\r
-\r
-                                       rng.setStartBefore(node);\r
-                                       rng.setEndAfter(node);\r
-\r
-                                       applyRngStyle(expandRng(rng, formatList));\r
-                               } else {\r
-                                       if (!isCollapsed || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {\r
-                                               // Obtain selection node before selection is unselected by applyRngStyle()\r
-                                               var curSelNode = ed.selection.getNode();\r
-\r
-                                               // Apply formatting to selection\r
-                                               bookmark = selection.getBookmark();\r
-                                               applyRngStyle(expandRng(selection.getRng(TRUE), formatList));\r
-\r
-                                               // Colored nodes should be underlined so that the color of the underline matches the text color.\r
-                                               if (format.styles && (format.styles.color || format.styles.textDecoration)) {\r
-                                                       tinymce.walk(curSelNode, processUnderlineAndColor, 'childNodes');\r
-                                                       processUnderlineAndColor(curSelNode);\r
-                                               }\r
-\r
-                                               selection.moveToBookmark(bookmark);\r
-                                               selection.setRng(moveStart(selection.getRng(TRUE)));\r
-                                               ed.nodeChanged();\r
-                                       } else\r
-                                               performCaretAction('apply', name, vars);\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function remove(name, vars, node) {\r
-                       var formatList = get(name), format = formatList[0], bookmark, i, rng;\r
-\r
-                       function moveStart(rng) {\r
-                               var container = rng.startContainer,\r
-                                       offset = rng.startOffset,\r
-                                       walker, node, nodes, tmpNode;\r
-\r
-                               // Convert text node into index if possible\r
-                               if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {\r
-                                       container = container.parentNode;\r
-                                       offset = nodeIndex(container) + 1;\r
-                               }\r
-\r
-                               // Move startContainer/startOffset in to a suitable node\r
-                               if (container.nodeType == 1) {\r
-                                       nodes = container.childNodes;\r
-                                       container = nodes[Math.min(offset, nodes.length - 1)];\r
-                                       walker = new TreeWalker(container);\r
-\r
-                                       // If offset is at end of the parent node walk to the next one\r
-                                       if (offset > nodes.length - 1)\r
-                                               walker.next();\r
-\r
-                                       for (node = walker.current(); node; node = walker.next()) {\r
-                                               if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
-                                                       // IE has a "neat" feature where it moves the start node into the closest element\r
-                                                       // we can avoid this by inserting an element before it and then remove it after we set the selection\r
-                                                       tmpNode = dom.create('a', null, INVISIBLE_CHAR);\r
-                                                       node.parentNode.insertBefore(tmpNode, node);\r
-\r
-                                                       // Set selection and remove tmpNode\r
-                                                       rng.setStart(node, 0);\r
-                                                       selection.setRng(rng);\r
-                                                       dom.remove(tmpNode);\r
-\r
-                                                       return;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       };\r
-\r
-                       // Merges the styles for each node\r
-                       function process(node) {\r
-                               var children, i, l;\r
-\r
-                               // Grab the children first since the nodelist might be changed\r
-                               children = tinymce.grep(node.childNodes);\r
-\r
-                               // Process current node\r
-                               for (i = 0, l = formatList.length; i < l; i++) {\r
-                                       if (removeFormat(formatList[i], vars, node, node))\r
-                                               break;\r
-                               }\r
-\r
-                               // Process the children\r
-                               if (format.deep) {\r
-                                       for (i = 0, l = children.length; i < l; i++)\r
-                                               process(children[i]);\r
-                               }\r
-                       };\r
-\r
-                       function findFormatRoot(container) {\r
-                               var formatRoot;\r
-\r
-                               // Find format root\r
-                               each(getParents(container.parentNode).reverse(), function(parent) {\r
-                                       var format;\r
-\r
-                                       // Find format root element\r
-                                       if (!formatRoot && parent.id != '_start' && parent.id != '_end') {\r
-                                               // Is the node matching the format we are looking for\r
-                                               format = matchNode(parent, name, vars);\r
-                                               if (format && format.split !== false)\r
-                                                       formatRoot = parent;\r
-                                       }\r
-                               });\r
-\r
-                               return formatRoot;\r
-                       };\r
-\r
-                       function wrapAndSplit(format_root, container, target, split) {\r
-                               var parent, clone, lastClone, firstClone, i, formatRootParent;\r
-\r
-                               // Format root found then clone formats and split it\r
-                               if (format_root) {\r
-                                       formatRootParent = format_root.parentNode;\r
-\r
-                                       for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {\r
-                                               clone = parent.cloneNode(FALSE);\r
-\r
-                                               for (i = 0; i < formatList.length; i++) {\r
-                                                       if (removeFormat(formatList[i], vars, clone, clone)) {\r
-                                                               clone = 0;\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-\r
-                                               // Build wrapper node\r
-                                               if (clone) {\r
-                                                       if (lastClone)\r
-                                                               clone.appendChild(lastClone);\r
-\r
-                                                       if (!firstClone)\r
-                                                               firstClone = clone;\r
-\r
-                                                       lastClone = clone;\r
-                                               }\r
-                                       }\r
-\r
-                                       // Never split block elements if the format is mixed\r
-                                       if (split && (!format.mixed || !isBlock(format_root)))\r
-                                               container = dom.split(format_root, container);\r
-\r
-                                       // Wrap container in cloned formats\r
-                                       if (lastClone) {\r
-                                               target.parentNode.insertBefore(lastClone, target);\r
-                                               firstClone.appendChild(target);\r
-                                       }\r
-                               }\r
-\r
-                               return container;\r
-                       };\r
-\r
-                       function splitToFormatRoot(container) {\r
-                               return wrapAndSplit(findFormatRoot(container), container, container, true);\r
-                       };\r
-\r
-                       function unwrap(start) {\r
-                               var node = dom.get(start ? '_start' : '_end'),\r
-                                       out = node[start ? 'firstChild' : 'lastChild'];\r
-\r
-                               // If the end is placed within the start the result will be removed\r
-                               // So this checks if the out node is a bookmark node if it is it\r
-                               // checks for another more suitable node\r
-                               if (isBookmarkNode(out))\r
-                                       out = out[start ? 'firstChild' : 'lastChild'];\r
-\r
-                               dom.remove(node, true);\r
-\r
-                               return out;\r
-                       };\r
-\r
-                       function removeRngStyle(rng) {\r
-                               var startContainer, endContainer;\r
-\r
-                               rng = expandRng(rng, formatList, TRUE);\r
-\r
-                               if (format.split) {\r
-                                       startContainer = getContainer(rng, TRUE);\r
-                                       endContainer = getContainer(rng);\r
-\r
-                                       if (startContainer != endContainer) {\r
-                                               // Wrap start/end nodes in span element since these might be cloned/moved\r
-                                               startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'});\r
-                                               endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'});\r
-\r
-                                               // Split start/end\r
-                                               splitToFormatRoot(startContainer);\r
-                                               splitToFormatRoot(endContainer);\r
-\r
-                                               // Unwrap start/end to get real elements again\r
-                                               startContainer = unwrap(TRUE);\r
-                                               endContainer = unwrap();\r
-                                       } else\r
-                                               startContainer = endContainer = splitToFormatRoot(startContainer);\r
-\r
-                                       // Update range positions since they might have changed after the split operations\r
-                                       rng.startContainer = startContainer.parentNode;\r
-                                       rng.startOffset = nodeIndex(startContainer);\r
-                                       rng.endContainer = endContainer.parentNode;\r
-                                       rng.endOffset = nodeIndex(endContainer) + 1;\r
-                               }\r
-\r
-                               // Remove items between start/end\r
-                               rangeUtils.walk(rng, function(nodes) {\r
-                                       each(nodes, function(node) {\r
-                                               process(node);\r
-\r
-                                               // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined.\r
-                                               if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(node.parentNode) === 'underline') {\r
-                                                       removeFormat({'deep': false, 'exact': true, 'inline': 'span', 'styles': {'textDecoration' : 'underline'}}, null, node);\r
-                                               }\r
-                                       });\r
-                               });\r
-                       };\r
-\r
-                       // Handle node\r
-                       if (node) {\r
-                               rng = dom.createRng();\r
-                               rng.setStartBefore(node);\r
-                               rng.setEndAfter(node);\r
-                               removeRngStyle(rng);\r
-                               return;\r
-                       }\r
-\r
-                       if (!selection.isCollapsed() || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {\r
-                               bookmark = selection.getBookmark();\r
-                               removeRngStyle(selection.getRng(TRUE));\r
-                               selection.moveToBookmark(bookmark);\r
-\r
-                               // Check if start element still has formatting then we are at: "<b>text|</b>text" and need to move the start into the next text node\r
-                               if (match(name, vars, selection.getStart())) {\r
-                                       moveStart(selection.getRng(true));\r
-                               }\r
-\r
-                               ed.nodeChanged();\r
-                       } else\r
-                               performCaretAction('remove', name, vars);\r
-               };\r
-\r
-               function toggle(name, vars, node) {\r
-                       var fmt = get(name);\r
-\r
-                       if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0]['toggle']))\r
-                               remove(name, vars, node);\r
-                       else\r
-                               apply(name, vars, node);\r
-               };\r
-\r
-               function matchNode(node, name, vars, similar) {\r
-                       var formatList = get(name), format, i, classes;\r
-\r
-                       function matchItems(node, format, item_name) {\r
-                               var key, value, items = format[item_name], i;\r
-\r
-                               // Check all items\r
-                               if (items) {\r
-                                       // Non indexed object\r
-                                       if (items.length === undefined) {\r
-                                               for (key in items) {\r
-                                                       if (items.hasOwnProperty(key)) {\r
-                                                               if (item_name === 'attributes')\r
-                                                                       value = dom.getAttrib(node, key);\r
-                                                               else\r
-                                                                       value = getStyle(node, key);\r
-\r
-                                                               if (similar && !value && !format.exact)\r
-                                                                       return;\r
-\r
-                                                               if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))\r
-                                                                       return;\r
-                                                       }\r
-                                               }\r
-                                       } else {\r
-                                               // Only one match needed for indexed arrays\r
-                                               for (i = 0; i < items.length; i++) {\r
-                                                       if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))\r
-                                                               return format;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               return format;\r
-                       };\r
-\r
-                       if (formatList && node) {\r
-                               // Check each format in list\r
-                               for (i = 0; i < formatList.length; i++) {\r
-                                       format = formatList[i];\r
-\r
-                                       // Name name, attributes, styles and classes\r
-                                       if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {\r
-                                               // Match classes\r
-                                               if (classes = format.classes) {\r
-                                                       for (i = 0; i < classes.length; i++) {\r
-                                                               if (!dom.hasClass(node, classes[i]))\r
-                                                                       return;\r
-                                                       }\r
-                                               }\r
-\r
-                                               return format;\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function match(name, vars, node) {\r
-                       var startNode, i;\r
-\r
-                       function matchParents(node) {\r
-                               // Find first node with similar format settings\r
-                               node = dom.getParent(node, function(node) {\r
-                                       return !!matchNode(node, name, vars, true);\r
-                               });\r
-\r
-                               // Do an exact check on the similar format element\r
-                               return matchNode(node, name, vars);\r
-                       };\r
-\r
-                       // Check specified node\r
-                       if (node)\r
-                               return matchParents(node);\r
-\r
-                       // Check pending formats\r
-                       if (selection.isCollapsed()) {\r
-                               for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
-                                       if (pendingFormats.apply[i].name == name)\r
-                                               return true;\r
-                               }\r
-\r
-                               for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
-                                       if (pendingFormats.remove[i].name == name)\r
-                                               return false;\r
-                               }\r
-\r
-                               return matchParents(selection.getNode());\r
-                       }\r
-\r
-                       // Check selected node\r
-                       node = selection.getNode();\r
-                       if (matchParents(node))\r
-                               return TRUE;\r
-\r
-                       // Check start node if it's different\r
-                       startNode = selection.getStart();\r
-                       if (startNode != node) {\r
-                               if (matchParents(startNode))\r
-                                       return TRUE;\r
-                       }\r
-\r
-                       return FALSE;\r
-               };\r
-\r
-               function matchAll(names, vars) {\r
-                       var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;\r
-\r
-                       // If the selection is collapsed then check pending formats\r
-                       if (selection.isCollapsed()) {\r
-                               for (ni = 0; ni < names.length; ni++) {\r
-                                       // If the name is to be removed, then stop it from being added\r
-                                       for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
-                                               name = names[ni];\r
-\r
-                                               if (pendingFormats.remove[i].name == name) {\r
-                                                       checkedMap[name] = true;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               // If the format is to be applied\r
-                               for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
-                                       for (ni = 0; ni < names.length; ni++) {\r
-                                               name = names[ni];\r
-\r
-                                               if (!checkedMap[name] && pendingFormats.apply[i].name == name) {\r
-                                                       checkedMap[name] = true;\r
-                                                       matchedFormatNames.push(name);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       // Check start of selection for formats\r
-                       startElement = selection.getStart();\r
-                       dom.getParent(startElement, function(node) {\r
-                               var i, name;\r
-\r
-                               for (i = 0; i < names.length; i++) {\r
-                                       name = names[i];\r
-\r
-                                       if (!checkedMap[name] && matchNode(node, name, vars)) {\r
-                                               checkedMap[name] = true;\r
-                                               matchedFormatNames.push(name);\r
-                                       }\r
-                               }\r
-                       });\r
-\r
-                       return matchedFormatNames;\r
-               };\r
-\r
-               function canApply(name) {\r
-                       var formatList = get(name), startNode, parents, i, x, selector;\r
-\r
-                       if (formatList) {\r
-                               startNode = selection.getStart();\r
-                               parents = getParents(startNode);\r
-\r
-                               for (x = formatList.length - 1; x >= 0; x--) {\r
-                                       selector = formatList[x].selector;\r
-\r
-                                       // Format is not selector based, then always return TRUE\r
-                                       if (!selector)\r
-                                               return TRUE;\r
-\r
-                                       for (i = parents.length - 1; i >= 0; i--) {\r
-                                               if (dom.is(parents[i], selector))\r
-                                                       return TRUE;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       return FALSE;\r
-               };\r
-\r
-               // Expose to public\r
-               tinymce.extend(this, {\r
-                       get : get,\r
-                       register : register,\r
-                       apply : apply,\r
-                       remove : remove,\r
-                       toggle : toggle,\r
-                       match : match,\r
-                       matchAll : matchAll,\r
-                       matchNode : matchNode,\r
-                       canApply : canApply\r
-               });\r
-\r
-               // Private functions\r
-\r
-               function matchName(node, format) {\r
-                       // Check for inline match\r
-                       if (isEq(node, format.inline))\r
-                               return TRUE;\r
-\r
-                       // Check for block match\r
-                       if (isEq(node, format.block))\r
-                               return TRUE;\r
-\r
-                       // Check for selector match\r
-                       if (format.selector)\r
-                               return dom.is(node, format.selector);\r
-               };\r
-\r
-               function isEq(str1, str2) {\r
-                       str1 = str1 || '';\r
-                       str2 = str2 || '';\r
-\r
-                       str1 = '' + (str1.nodeName || str1);\r
-                       str2 = '' + (str2.nodeName || str2);\r
-\r
-                       return str1.toLowerCase() == str2.toLowerCase();\r
-               };\r
-\r
-               function getStyle(node, name) {\r
-                       var styleVal = dom.getStyle(node, name);\r
-\r
-                       // Force the format to hex\r
-                       if (name == 'color' || name == 'backgroundColor')\r
-                               styleVal = dom.toHex(styleVal);\r
-\r
-                       // Opera will return bold as 700\r
-                       if (name == 'fontWeight' && styleVal == 700)\r
-                               styleVal = 'bold';\r
-\r
-                       return '' + styleVal;\r
-               };\r
-\r
-               function replaceVars(value, vars) {\r
-                       if (typeof(value) != "string")\r
-                               value = value(vars);\r
-                       else if (vars) {\r
-                               value = value.replace(/%(\w+)/g, function(str, name) {\r
-                                       return vars[name] || str;\r
-                               });\r
-                       }\r
-\r
-                       return value;\r
-               };\r
-\r
-               function isWhiteSpaceNode(node) {\r
-                       return node && node.nodeType === 3 && /^([\s\r\n]+|)$/.test(node.nodeValue);\r
-               };\r
-\r
-               function wrap(node, name, attrs) {\r
-                       var wrapper = dom.create(name, attrs);\r
-\r
-                       node.parentNode.insertBefore(wrapper, node);\r
-                       wrapper.appendChild(node);\r
-\r
-                       return wrapper;\r
-               };\r
-\r
-               function expandRng(rng, format, remove) {\r
-                       var startContainer = rng.startContainer,\r
-                               startOffset = rng.startOffset,\r
-                               endContainer = rng.endContainer,\r
-                               endOffset = rng.endOffset, sibling, lastIdx, leaf;\r
-\r
-                       // This function walks up the tree if there is no siblings before/after the node\r
-                       function findParentContainer(container, child_name, sibling_name, root) {\r
-                               var parent, child;\r
-\r
-                               root = root || dom.getRoot();\r
-\r
-                               for (;;) {\r
-                                       // Check if we can move up are we at root level or body level\r
-                                       parent = container.parentNode;\r
-\r
-                                       // Stop expanding on block elements or root depending on format\r
-                                       if (parent == root || (!format[0].block_expand && isBlock(parent)))\r
-                                               return container;\r
-\r
-                                       for (sibling = parent[child_name]; sibling && sibling != container; sibling = sibling[sibling_name]) {\r
-                                               if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
-                                                       return container;\r
-\r
-                                               if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling))\r
-                                                       return container;\r
-                                       }\r
-\r
-                                       container = container.parentNode;\r
-                               }\r
-\r
-                               return container;\r
-                       };\r
-\r
-                       // This function walks down the tree to find the leaf at the selection.\r
-                       // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node.\r
-                       function findLeaf(node, offset) {\r
-                               if (offset === undefined)\r
-                                       offset = node.nodeType === 3 ? node.length : node.childNodes.length;\r
-                               while (node && node.hasChildNodes()) {\r
-                                       node = node.childNodes[offset];\r
-                                       if (node)\r
-                                               offset = node.nodeType === 3 ? node.length : node.childNodes.length;\r
-                               }\r
-                               return { node: node, offset: offset };\r
-                       }\r
-\r
-                       // If index based start position then resolve it\r
-                       if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {\r
-                               lastIdx = startContainer.childNodes.length - 1;\r
-                               startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];\r
-\r
-                               if (startContainer.nodeType == 3)\r
-                                       startOffset = 0;\r
-                       }\r
-\r
-                       // If index based end position then resolve it\r
-                       if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {\r
-                               lastIdx = endContainer.childNodes.length - 1;\r
-                               endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];\r
-\r
-                               if (endContainer.nodeType == 3)\r
-                                       endOffset = endContainer.nodeValue.length;\r
-                       }\r
-\r
-                       // Exclude bookmark nodes if possible\r
-                       if (isBookmarkNode(startContainer.parentNode))\r
-                               startContainer = startContainer.parentNode;\r
-\r
-                       if (isBookmarkNode(startContainer))\r
-                               startContainer = startContainer.nextSibling || startContainer;\r
-\r
-                       if (isBookmarkNode(endContainer.parentNode)) {\r
-                               endOffset = dom.nodeIndex(endContainer);\r
-                               endContainer = endContainer.parentNode;\r
-                       }\r
-\r
-                       if (isBookmarkNode(endContainer) && endContainer.previousSibling) {\r
-                               endContainer = endContainer.previousSibling;\r
-                               endOffset = endContainer.length;\r
-                       }\r
-\r
-                       if (format[0].inline) {\r
-                               // Avoid applying formatting to a trailing space.\r
-                               leaf = findLeaf(endContainer, endOffset);\r
-                               if (leaf.node) {\r
-                                       while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling)\r
-                                               leaf = findLeaf(leaf.node.previousSibling);\r
-\r
-                                       if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 &&\r
-                                                       leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\r
-\r
-                                               if (leaf.offset > 1) {\r
-                                                       endContainer = leaf.node;\r
-                                                       endContainer.splitText(leaf.offset - 1);\r
-                                               } else if (leaf.node.previousSibling) {\r
-                                                       endContainer = leaf.node.previousSibling;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       // Move start/end point up the tree if the leaves are sharp and if we are in different containers\r
-                       // Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!\r
-                       // This will reduce the number of wrapper elements that needs to be created\r
-                       // Move start point up the tree\r
-                       if (format[0].inline || format[0].block_expand) {\r
-                               startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
-                               endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
-                       }\r
-\r
-                       // Expand start/end container to matching selector\r
-                       if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {\r
-                               function findSelectorEndPoint(container, sibling_name) {\r
-                                       var parents, i, y, curFormat;\r
-\r
-                                       if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])\r
-                                               container = container[sibling_name];\r
-\r
-                                       parents = getParents(container);\r
-                                       for (i = 0; i < parents.length; i++) {\r
-                                               for (y = 0; y < format.length; y++) {\r
-                                                       curFormat = format[y];\r
-\r
-                                                       // If collapsed state is set then skip formats that doesn't match that\r
-                                                       if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)\r
-                                                               continue;\r
-\r
-                                                       if (dom.is(parents[i], curFormat.selector))\r
-                                                               return parents[i];\r
-                                               }\r
-                                       }\r
-\r
-                                       return container;\r
-                               };\r
-\r
-                               // Find new startContainer/endContainer if there is better one\r
-                               startContainer = findSelectorEndPoint(startContainer, 'previousSibling');\r
-                               endContainer = findSelectorEndPoint(endContainer, 'nextSibling');\r
-                       }\r
-\r
-                       // Expand start/end container to matching block element or text node\r
-                       if (format[0].block || format[0].selector) {\r
-                               function findBlockEndPoint(container, sibling_name, sibling_name2) {\r
-                                       var node;\r
-\r
-                                       // Expand to block of similar type\r
-                                       if (!format[0].wrapper)\r
-                                               node = dom.getParent(container, format[0].block);\r
-\r
-                                       // Expand to first wrappable block element or any block element\r
-                                       if (!node)\r
-                                               node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);\r
-\r
-                                       // Exclude inner lists from wrapping\r
-                                       if (node && format[0].wrapper)\r
-                                               node = getParents(node, 'ul,ol').reverse()[0] || node;\r
-\r
-                                       // Didn't find a block element look for first/last wrappable element\r
-                                       if (!node) {\r
-                                               node = container;\r
-\r
-                                               while (node[sibling_name] && !isBlock(node[sibling_name])) {\r
-                                                       node = node[sibling_name];\r
-\r
-                                                       // Break on BR but include it will be removed later on\r
-                                                       // we can't remove it now since we need to check if it can be wrapped\r
-                                                       if (isEq(node, 'br'))\r
-                                                               break;\r
-                                               }\r
-                                       }\r
-\r
-                                       return node || container;\r
-                               };\r
-\r
-                               // Find new startContainer/endContainer if there is better one\r
-                               startContainer = findBlockEndPoint(startContainer, 'previousSibling');\r
-                               endContainer = findBlockEndPoint(endContainer, 'nextSibling');\r
-\r
-                               // Non block element then try to expand up the leaf\r
-                               if (format[0].block) {\r
-                                       if (!isBlock(startContainer))\r
-                                               startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
-\r
-                                       if (!isBlock(endContainer))\r
-                                               endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
-                               }\r
-                       }\r
-\r
-                       // Setup index for startContainer\r
-                       if (startContainer.nodeType == 1) {\r
-                               startOffset = nodeIndex(startContainer);\r
-                               startContainer = startContainer.parentNode;\r
-                       }\r
-\r
-                       // Setup index for endContainer\r
-                       if (endContainer.nodeType == 1) {\r
-                               endOffset = nodeIndex(endContainer) + 1;\r
-                               endContainer = endContainer.parentNode;\r
-                       }\r
-\r
-                       // Return new range like object\r
-                       return {\r
-                               startContainer : startContainer,\r
-                               startOffset : startOffset,\r
-                               endContainer : endContainer,\r
-                               endOffset : endOffset\r
-                       };\r
-               }\r
-\r
-               function removeFormat(format, vars, node, compare_node) {\r
-                       var i, attrs, stylesModified;\r
-\r
-                       // Check if node matches format\r
-                       if (!matchName(node, format))\r
-                               return FALSE;\r
-\r
-                       // Should we compare with format attribs and styles\r
-                       if (format.remove != 'all') {\r
-                               // Remove styles\r
-                               each(format.styles, function(value, name) {\r
-                                       value = replaceVars(value, vars);\r
-\r
-                                       // Indexed array\r
-                                       if (typeof(name) === 'number') {\r
-                                               name = value;\r
-                                               compare_node = 0;\r
-                                       }\r
-\r
-                                       if (!compare_node || isEq(getStyle(compare_node, name), value))\r
-                                               dom.setStyle(node, name, '');\r
-\r
-                                       stylesModified = 1;\r
-                               });\r
-\r
-                               // Remove style attribute if it's empty\r
-                               if (stylesModified && dom.getAttrib(node, 'style') == '') {\r
-                                       node.removeAttribute('style');\r
-                                       node.removeAttribute('data-mce-style');\r
-                               }\r
-\r
-                               // Remove attributes\r
-                               each(format.attributes, function(value, name) {\r
-                                       var valueOut;\r
-\r
-                                       value = replaceVars(value, vars);\r
-\r
-                                       // Indexed array\r
-                                       if (typeof(name) === 'number') {\r
-                                               name = value;\r
-                                               compare_node = 0;\r
-                                       }\r
-\r
-                                       if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {\r
-                                               // Keep internal classes\r
-                                               if (name == 'class') {\r
-                                                       value = dom.getAttrib(node, name);\r
-                                                       if (value) {\r
-                                                               // Build new class value where everything is removed except the internal prefixed classes\r
-                                                               valueOut = '';\r
-                                                               each(value.split(/\s+/), function(cls) {\r
-                                                                       if (/mce\w+/.test(cls))\r
-                                                                               valueOut += (valueOut ? ' ' : '') + cls;\r
-                                                               });\r
-\r
-                                                               // We got some internal classes left\r
-                                                               if (valueOut) {\r
-                                                                       dom.setAttrib(node, name, valueOut);\r
-                                                                       return;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               // IE6 has a bug where the attribute doesn't get removed correctly\r
-                                               if (name == "class")\r
-                                                       node.removeAttribute('className');\r
-\r
-                                               // Remove mce prefixed attributes\r
-                                               if (MCE_ATTR_RE.test(name))\r
-                                                       node.removeAttribute('data-mce-' + name);\r
-\r
-                                               node.removeAttribute(name);\r
-                                       }\r
-                               });\r
-\r
-                               // Remove classes\r
-                               each(format.classes, function(value) {\r
-                                       value = replaceVars(value, vars);\r
-\r
-                                       if (!compare_node || dom.hasClass(compare_node, value))\r
-                                               dom.removeClass(node, value);\r
-                               });\r
-\r
-                               // Check for non internal attributes\r
-                               attrs = dom.getAttribs(node);\r
-                               for (i = 0; i < attrs.length; i++) {\r
-                                       if (attrs[i].nodeName.indexOf('_') !== 0)\r
-                                               return FALSE;\r
-                               }\r
-                       }\r
-\r
-                       // Remove the inline child if it's empty for example <b> or <span>\r
-                       if (format.remove != 'none') {\r
-                               removeNode(node, format);\r
-                               return TRUE;\r
-                       }\r
-               };\r
-\r
-               function removeNode(node, format) {\r
-                       var parentNode = node.parentNode, rootBlockElm;\r
-\r
-                       if (format.block) {\r
-                               if (!forcedRootBlock) {\r
-                                       function find(node, next, inc) {\r
-                                               node = getNonWhiteSpaceSibling(node, next, inc);\r
-\r
-                                               return !node || (node.nodeName == 'BR' || isBlock(node));\r
-                                       };\r
-\r
-                                       // Append BR elements if needed before we remove the block\r
-                                       if (isBlock(node) && !isBlock(parentNode)) {\r
-                                               if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))\r
-                                                       node.insertBefore(dom.create('br'), node.firstChild);\r
-\r
-                                               if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))\r
-                                                       node.appendChild(dom.create('br'));\r
-                                       }\r
-                               } else {\r
-                                       // Wrap the block in a forcedRootBlock if we are at the root of document\r
-                                       if (parentNode == dom.getRoot()) {\r
-                                               if (!format.list_block || !isEq(node, format.list_block)) {\r
-                                                       each(tinymce.grep(node.childNodes), function(node) {\r
-                                                               if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {\r
-                                                                       if (!rootBlockElm)\r
-                                                                               rootBlockElm = wrap(node, forcedRootBlock);\r
-                                                                       else\r
-                                                                               rootBlockElm.appendChild(node);\r
-                                                               } else\r
-                                                                       rootBlockElm = 0;\r
-                                                       });\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       // Never remove nodes that isn't the specified inline element if a selector is specified too\r
-                       if (format.selector && format.inline && !isEq(format.inline, node))\r
-                               return;\r
-\r
-                       dom.remove(node, 1);\r
-               };\r
-\r
-               function getNonWhiteSpaceSibling(node, next, inc) {\r
-                       if (node) {\r
-                               next = next ? 'nextSibling' : 'previousSibling';\r
-\r
-                               for (node = inc ? node : node[next]; node; node = node[next]) {\r
-                                       if (node.nodeType == 1 || !isWhiteSpaceNode(node))\r
-                                               return node;\r
-                               }\r
-                       }\r
-               };\r
-\r
-               function isBookmarkNode(node) {\r
-                       return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark';\r
-               };\r
-\r
-               function mergeSiblings(prev, next) {\r
-                       var marker, sibling, tmpSibling;\r
-\r
-                       function compareElements(node1, node2) {\r
-                               // Not the same name\r
-                               if (node1.nodeName != node2.nodeName)\r
-                                       return FALSE;\r
-\r
-                               function getAttribs(node) {\r
-                                       var attribs = {};\r
-\r
-                                       each(dom.getAttribs(node), function(attr) {\r
-                                               var name = attr.nodeName.toLowerCase();\r
-\r
-                                               // Don't compare internal attributes or style\r
-                                               if (name.indexOf('_') !== 0 && name !== 'style')\r
-                                                       attribs[name] = dom.getAttrib(node, name);\r
-                                       });\r
-\r
-                                       return attribs;\r
-                               };\r
-\r
-                               function compareObjects(obj1, obj2) {\r
-                                       var value, name;\r
-\r
-                                       for (name in obj1) {\r
-                                               // Obj1 has item obj2 doesn't have\r
-                                               if (obj1.hasOwnProperty(name)) {\r
-                                                       value = obj2[name];\r
-\r
-                                                       // Obj2 doesn't have obj1 item\r
-                                                       if (value === undefined)\r
-                                                               return FALSE;\r
-\r
-                                                       // Obj2 item has a different value\r
-                                                       if (obj1[name] != value)\r
-                                                               return FALSE;\r
-\r
-                                                       // Delete similar value\r
-                                                       delete obj2[name];\r
-                                               }\r
-                                       }\r
-\r
-                                       // Check if obj 2 has something obj 1 doesn't have\r
-                                       for (name in obj2) {\r
-                                               // Obj2 has item obj1 doesn't have\r
-                                               if (obj2.hasOwnProperty(name))\r
-                                                       return FALSE;\r
-                                       }\r
-\r
-                                       return TRUE;\r
-                               };\r
-\r
-                               // Attribs are not the same\r
-                               if (!compareObjects(getAttribs(node1), getAttribs(node2)))\r
-                                       return FALSE;\r
-\r
-                               // Styles are not the same\r
-                               if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))\r
-                                       return FALSE;\r
-\r
-                               return TRUE;\r
-                       };\r
-\r
-                       // Check if next/prev exists and that they are elements\r
-                       if (prev && next) {\r
-                               function findElementSibling(node, sibling_name) {\r
-                                       for (sibling = node; sibling; sibling = sibling[sibling_name]) {\r
-                                               if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)\r
-                                                       return node;\r
-\r
-                                               if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
-                                                       return sibling;\r
-                                       }\r
-\r
-                                       return node;\r
-                               };\r
-\r
-                               // If previous sibling is empty then jump over it\r
-                               prev = findElementSibling(prev, 'previousSibling');\r
-                               next = findElementSibling(next, 'nextSibling');\r
-\r
-                               // Compare next and previous nodes\r
-                               if (compareElements(prev, next)) {\r
-                                       // Append nodes between\r
-                                       for (sibling = prev.nextSibling; sibling && sibling != next;) {\r
-                                               tmpSibling = sibling;\r
-                                               sibling = sibling.nextSibling;\r
-                                               prev.appendChild(tmpSibling);\r
-                                       }\r
-\r
-                                       // Remove next node\r
-                                       dom.remove(next);\r
-\r
-                                       // Move children into prev node\r
-                                       each(tinymce.grep(next.childNodes), function(node) {\r
-                                               prev.appendChild(node);\r
-                                       });\r
-\r
-                                       return prev;\r
-                               }\r
-                       }\r
-\r
-                       return next;\r
-               };\r
-\r
-               function isTextBlock(name) {\r
-                       return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);\r
-               };\r
-\r
-               function getContainer(rng, start) {\r
-                       var container, offset, lastIdx;\r
-\r
-                       container = rng[start ? 'startContainer' : 'endContainer'];\r
-                       offset = rng[start ? 'startOffset' : 'endOffset'];\r
-\r
-                       if (container.nodeType == 1) {\r
-                               lastIdx = container.childNodes.length - 1;\r
-\r
-                               if (!start && offset)\r
-                                       offset--;\r
-\r
-                               container = container.childNodes[offset > lastIdx ? lastIdx : offset];\r
-                       }\r
-\r
-                       return container;\r
-               };\r
-\r
-               function performCaretAction(type, name, vars) {\r
-                       var i, currentPendingFormats = pendingFormats[type],\r
-                               otherPendingFormats = pendingFormats[type == 'apply' ? 'remove' : 'apply'];\r
-\r
-                       function hasPending() {\r
-                               return pendingFormats.apply.length || pendingFormats.remove.length;\r
-                       };\r
-\r
-                       function resetPending() {\r
-                               pendingFormats.apply = [];\r
-                               pendingFormats.remove = [];\r
-                       };\r
-\r
-                       function perform(caret_node) {\r
-                               // Apply pending formats\r
-                               each(pendingFormats.apply.reverse(), function(item) {\r
-                                       apply(item.name, item.vars, caret_node);\r
-\r
-                                       // Colored nodes should be underlined so that the color of the underline matches the text color.\r
-                                       if (item.name === 'forecolor' && item.vars.value)\r
-                                               processUnderlineAndColor(caret_node.parentNode);\r
-                               });\r
-\r
-                               // Remove pending formats\r
-                               each(pendingFormats.remove.reverse(), function(item) {\r
-                                       remove(item.name, item.vars, caret_node);\r
-                               });\r
-\r
-                               dom.remove(caret_node, 1);\r
-                               resetPending();\r
-                       };\r
-\r
-                       // Check if it already exists then ignore it\r
-                       for (i = currentPendingFormats.length - 1; i >= 0; i--) {\r
-                               if (currentPendingFormats[i].name == name)\r
-                                       return;\r
-                       }\r
-\r
-                       currentPendingFormats.push({name : name, vars : vars});\r
-\r
-                       // Check if it's in the other type, then remove it\r
-                       for (i = otherPendingFormats.length - 1; i >= 0; i--) {\r
-                               if (otherPendingFormats[i].name == name)\r
-                                       otherPendingFormats.splice(i, 1);\r
-                       }\r
-\r
-                       // Pending apply or remove formats\r
-                       if (hasPending()) {\r
-                               ed.getDoc().execCommand('FontName', false, 'mceinline');\r
-                               pendingFormats.lastRng = selection.getRng();\r
-\r
-                               // IE will convert the current word\r
-                               each(dom.select('font,span'), function(node) {\r
-                                       var bookmark;\r
-\r
-                                       if (isCaretNode(node)) {\r
-                                               bookmark = selection.getBookmark();\r
-                                               perform(node);\r
-                                               selection.moveToBookmark(bookmark);\r
-                                               ed.nodeChanged();\r
-                                       }\r
-                               });\r
-\r
-                               // Only register listeners once if we need to\r
-                               if (!pendingFormats.isListening && hasPending()) {\r
-                                       pendingFormats.isListening = true;\r
-\r
-                                       each('onKeyDown,onKeyUp,onKeyPress,onMouseUp'.split(','), function(event) {\r
-                                               ed[event].addToTop(function(ed, e) {\r
-                                                       // Do we have pending formats and is the selection moved has moved\r
-                                                       if (hasPending() && !tinymce.dom.RangeUtils.compareRanges(pendingFormats.lastRng, selection.getRng())) {\r
-                                                               each(dom.select('font,span'), function(node) {\r
-                                                                       var textNode, rng;\r
-\r
-                                                                       // Look for marker\r
-                                                                       if (isCaretNode(node)) {\r
-                                                                               textNode = node.firstChild;\r
-\r
-                                                                               // Find the first text node within node\r
-                                                                               while (textNode && textNode.nodeType != 3)\r
-                                                                                       textNode = textNode.firstChild;\r
-\r
-                                                                               if (textNode) {\r
-                                                                                       perform(node);\r
-\r
-                                                                                       rng = dom.createRng();\r
-                                                                                       rng.setStart(textNode, textNode.nodeValue.length);\r
-                                                                                       rng.setEnd(textNode, textNode.nodeValue.length);\r
-                                                                                       selection.setRng(rng);\r
-                                                                                       ed.nodeChanged();\r
-                                                                               } else\r
-                                                                                       dom.remove(node);\r
-                                                                       }\r
-                                                               });\r
-\r
-                                                               // Always unbind and clear pending styles on keyup\r
-                                                               if (e.type == 'keyup' || e.type == 'mouseup')\r
-                                                                       resetPending();\r
-                                                       }\r
-                                               });\r
-                                       });\r
-                               }\r
-                       }\r
-               };\r
-       };\r
-})(tinymce);\r
-\r
-tinymce.onAddEditor.add(function(tinymce, ed) {\r
-       var filters, fontSizes, dom, settings = ed.settings;\r
-\r
-       if (settings.inline_styles) {\r
-               fontSizes = tinymce.explode(settings.font_size_style_values);\r
-\r
-               function replaceWithSpan(node, styles) {\r
-                       tinymce.each(styles, function(value, name) {\r
-                               if (value)\r
-                                       dom.setStyle(node, name, value);\r
-                       });\r
-\r
-                       dom.rename(node, 'span');\r
-               };\r
-\r
-               filters = {\r
-                       font : function(dom, node) {\r
-                               replaceWithSpan(node, {\r
-                                       backgroundColor : node.style.backgroundColor,\r
-                                       color : node.color,\r
-                                       fontFamily : node.face,\r
-                                       fontSize : fontSizes[parseInt(node.size) - 1]\r
-                               });\r
-                       },\r
-\r
-                       u : function(dom, node) {\r
-                               replaceWithSpan(node, {\r
-                                       textDecoration : 'underline'\r
-                               });\r
-                       },\r
-\r
-                       strike : function(dom, node) {\r
-                               replaceWithSpan(node, {\r
-                                       textDecoration : 'line-through'\r
-                               });\r
-                       }\r
-               };\r
-\r
-               function convert(editor, params) {\r
-                       dom = editor.dom;\r
-\r
-                       if (settings.convert_fonts_to_spans) {\r
-                               tinymce.each(dom.select('font,u,strike', params.node), function(node) {\r
-                                       filters[node.nodeName.toLowerCase()](ed.dom, node);\r
-                               });\r
-                       }\r
-               };\r
-\r
-               ed.onPreProcess.add(convert);\r
-               ed.onSetContent.add(convert);\r
-\r
-               ed.onInit.add(function() {\r
-                       ed.selection.onSetContent.add(convert);\r
-               });\r
-       }\r
-});\r
-\r
diff --git a/plugins/TinyMCE/js/utils/editable_selects.js b/plugins/TinyMCE/js/utils/editable_selects.js
deleted file mode 100644 (file)
index fd943c0..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/**\r
- * editable_selects.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-var TinyMCE_EditableSelects = {\r
-       editSelectElm : null,\r
-\r
-       init : function() {\r
-               var nl = document.getElementsByTagName("select"), i, d = document, o;\r
-\r
-               for (i=0; i<nl.length; i++) {\r
-                       if (nl[i].className.indexOf('mceEditableSelect') != -1) {\r
-                               o = new Option('(value)', '__mce_add_custom__');\r
-\r
-                               o.className = 'mceAddSelectValue';\r
-\r
-                               nl[i].options[nl[i].options.length] = o;\r
-                               nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;\r
-                       }\r
-               }\r
-       },\r
-\r
-       onChangeEditableSelect : function(e) {\r
-               var d = document, ne, se = window.event ? window.event.srcElement : e.target;\r
-\r
-               if (se.options[se.selectedIndex].value == '__mce_add_custom__') {\r
-                       ne = d.createElement("input");\r
-                       ne.id = se.id + "_custom";\r
-                       ne.name = se.name + "_custom";\r
-                       ne.type = "text";\r
-\r
-                       ne.style.width = se.offsetWidth + 'px';\r
-                       se.parentNode.insertBefore(ne, se);\r
-                       se.style.display = 'none';\r
-                       ne.focus();\r
-                       ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;\r
-                       ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;\r
-                       TinyMCE_EditableSelects.editSelectElm = se;\r
-               }\r
-       },\r
-\r
-       onBlurEditableSelectInput : function() {\r
-               var se = TinyMCE_EditableSelects.editSelectElm;\r
-\r
-               if (se) {\r
-                       if (se.previousSibling.value != '') {\r
-                               addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);\r
-                               selectByValue(document.forms[0], se.id, se.previousSibling.value);\r
-                       } else\r
-                               selectByValue(document.forms[0], se.id, '');\r
-\r
-                       se.style.display = 'inline';\r
-                       se.parentNode.removeChild(se.previousSibling);\r
-                       TinyMCE_EditableSelects.editSelectElm = null;\r
-               }\r
-       },\r
-\r
-       onKeyDown : function(e) {\r
-               e = e || window.event;\r
-\r
-               if (e.keyCode == 13)\r
-                       TinyMCE_EditableSelects.onBlurEditableSelectInput();\r
-       }\r
-};\r
diff --git a/plugins/TinyMCE/js/utils/form_utils.js b/plugins/TinyMCE/js/utils/form_utils.js
deleted file mode 100644 (file)
index 59da013..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/**\r
- * form_utils.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));\r
-\r
-function getColorPickerHTML(id, target_form_element) {\r
-       var h = "", dom = tinyMCEPopup.dom;\r
-\r
-       if (label = dom.select('label[for=' + target_form_element + ']')[0]) {\r
-               label.id = label.id || dom.uniqueId();\r
-       }\r
-\r
-       h += '<a role="button" aria-labelledby="' + id + '_label" id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';\r
-       h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;<span id="' + id + '_label" class="mceVoiceLabel mceIconOnly" style="display:none;">' + tinyMCEPopup.getLang('browse') + '</span></span></a>';\r
-\r
-       return h;\r
-}\r
-\r
-function updateColor(img_id, form_element_id) {\r
-       document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;\r
-}\r
-\r
-function setBrowserDisabled(id, state) {\r
-       var img = document.getElementById(id);\r
-       var lnk = document.getElementById(id + "_link");\r
-\r
-       if (lnk) {\r
-               if (state) {\r
-                       lnk.setAttribute("realhref", lnk.getAttribute("href"));\r
-                       lnk.removeAttribute("href");\r
-                       tinyMCEPopup.dom.addClass(img, 'disabled');\r
-               } else {\r
-                       if (lnk.getAttribute("realhref"))\r
-                               lnk.setAttribute("href", lnk.getAttribute("realhref"));\r
-\r
-                       tinyMCEPopup.dom.removeClass(img, 'disabled');\r
-               }\r
-       }\r
-}\r
-\r
-function getBrowserHTML(id, target_form_element, type, prefix) {\r
-       var option = prefix + "_" + type + "_browser_callback", cb, html;\r
-\r
-       cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));\r
-\r
-       if (!cb)\r
-               return "";\r
-\r
-       html = "";\r
-       html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';\r
-       html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';\r
-\r
-       return html;\r
-}\r
-\r
-function openBrowser(img_id, target_form_element, type, option) {\r
-       var img = document.getElementById(img_id);\r
-\r
-       if (img.className != "mceButtonDisabled")\r
-               tinyMCEPopup.openBrowser(target_form_element, type, option);\r
-}\r
-\r
-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
-       if (!form_obj || !form_obj.elements[field_name])\r
-               return;\r
-\r
-       if (!value)\r
-               value = "";\r
-\r
-       var sel = form_obj.elements[field_name];\r
-\r
-       var found = false;\r
-       for (var i=0; i<sel.options.length; i++) {\r
-               var option = sel.options[i];\r
-\r
-               if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
-                       option.selected = true;\r
-                       found = true;\r
-               } else\r
-                       option.selected = false;\r
-       }\r
-\r
-       if (!found && add_custom && value != '') {\r
-               var option = new Option(value, value);\r
-               option.selected = true;\r
-               sel.options[sel.options.length] = option;\r
-               sel.selectedIndex = sel.options.length - 1;\r
-       }\r
-\r
-       return found;\r
-}\r
-\r
-function getSelectValue(form_obj, field_name) {\r
-       var elm = form_obj.elements[field_name];\r
-\r
-       if (elm == null || elm.options == null || elm.selectedIndex === -1)\r
-               return "";\r
-\r
-       return elm.options[elm.selectedIndex].value;\r
-}\r
-\r
-function addSelectValue(form_obj, field_name, name, value) {\r
-       var s = form_obj.elements[field_name];\r
-       var o = new Option(name, value);\r
-       s.options[s.options.length] = o;\r
-}\r
-\r
-function addClassesToList(list_id, specific_option) {\r
-       // Setup class droplist\r
-       var styleSelectElm = document.getElementById(list_id);\r
-       var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);\r
-       styles = tinyMCEPopup.getParam(specific_option, styles);\r
-\r
-       if (styles) {\r
-               var stylesAr = styles.split(';');\r
-\r
-               for (var i=0; i<stylesAr.length; i++) {\r
-                       if (stylesAr != "") {\r
-                               var key, value;\r
-\r
-                               key = stylesAr[i].split('=')[0];\r
-                               value = stylesAr[i].split('=')[1];\r
-\r
-                               styleSelectElm.options[styleSelectElm.length] = new Option(key, value);\r
-                       }\r
-               }\r
-       } else {\r
-               tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {\r
-                       styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);\r
-               });\r
-       }\r
-}\r
-\r
-function isVisible(element_id) {\r
-       var elm = document.getElementById(element_id);\r
-\r
-       return elm && elm.style.display != "none";\r
-}\r
-\r
-function convertRGBToHex(col) {\r
-       var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
-\r
-       var rgb = col.replace(re, "$1,$2,$3").split(',');\r
-       if (rgb.length == 3) {\r
-               r = parseInt(rgb[0]).toString(16);\r
-               g = parseInt(rgb[1]).toString(16);\r
-               b = parseInt(rgb[2]).toString(16);\r
-\r
-               r = r.length == 1 ? '0' + r : r;\r
-               g = g.length == 1 ? '0' + g : g;\r
-               b = b.length == 1 ? '0' + b : b;\r
-\r
-               return "#" + r + g + b;\r
-       }\r
-\r
-       return col;\r
-}\r
-\r
-function convertHexToRGB(col) {\r
-       if (col.indexOf('#') != -1) {\r
-               col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
-\r
-               r = parseInt(col.substring(0, 2), 16);\r
-               g = parseInt(col.substring(2, 4), 16);\r
-               b = parseInt(col.substring(4, 6), 16);\r
-\r
-               return "rgb(" + r + "," + g + "," + b + ")";\r
-       }\r
-\r
-       return col;\r
-}\r
-\r
-function trimSize(size) {\r
-       return size.replace(/([0-9\.]+)(px|%|in|cm|mm|em|ex|pt|pc)/i, '$1$2');\r
-}\r
-\r
-function getCSSSize(size) {\r
-       size = trimSize(size);\r
-\r
-       if (size == "")\r
-               return "";\r
-\r
-       // Add px\r
-       if (/^[0-9]+$/.test(size))\r
-               size += 'px';\r
-       // Sanity check, IE doesn't like broken values\r
-       else if (!(/^[0-9\.]+(px|%|in|cm|mm|em|ex|pt|pc)$/i.test(size)))\r
-               return "";\r
-\r
-       return size;\r
-}\r
-\r
-function getStyle(elm, attrib, style) {\r
-       var val = tinyMCEPopup.dom.getAttrib(elm, attrib);\r
-\r
-       if (val != '')\r
-               return '' + val;\r
-\r
-       if (typeof(style) == 'undefined')\r
-               style = attrib;\r
-\r
-       return tinyMCEPopup.dom.getStyle(elm, style);\r
-}\r
diff --git a/plugins/TinyMCE/js/utils/mctabs.js b/plugins/TinyMCE/js/utils/mctabs.js
deleted file mode 100644 (file)
index 458ec86..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/**\r
- * mctabs.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-function MCTabs() {\r
-       this.settings = [];\r
-       this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');\r
-};\r
-\r
-MCTabs.prototype.init = function(settings) {\r
-       this.settings = settings;\r
-};\r
-\r
-MCTabs.prototype.getParam = function(name, default_value) {\r
-       var value = null;\r
-\r
-       value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
-\r
-       // Fix bool values\r
-       if (value == "true" || value == "false")\r
-               return (value == "true");\r
-\r
-       return value;\r
-};\r
-\r
-MCTabs.prototype.showTab =function(tab){\r
-       tab.className = 'current';\r
-       tab.setAttribute("aria-selected", true);\r
-       tab.setAttribute("aria-expanded", true);\r
-       tab.tabIndex = 0;\r
-};\r
-\r
-MCTabs.prototype.hideTab =function(tab){\r
-       var t=this;\r
-\r
-       tab.className = '';\r
-       tab.setAttribute("aria-selected", false);\r
-       tab.setAttribute("aria-expanded", false);\r
-       tab.tabIndex = -1;\r
-};\r
-\r
-MCTabs.prototype.showPanel = function(panel) {\r
-       panel.className = 'current'; \r
-       panel.setAttribute("aria-hidden", false);\r
-};\r
-\r
-MCTabs.prototype.hidePanel = function(panel) {\r
-       panel.className = 'panel';\r
-       panel.setAttribute("aria-hidden", true);\r
-}; \r
-\r
-MCTabs.prototype.getPanelForTab = function(tabElm) {\r
-       return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");\r
-};\r
-\r
-MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {\r
-       var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;\r
-\r
-       tabElm = document.getElementById(tab_id);\r
-\r
-       if (panel_id === undefined) {\r
-               panel_id = t.getPanelForTab(tabElm);\r
-       }\r
-\r
-       panelElm= document.getElementById(panel_id);\r
-       panelContainerElm = panelElm ? panelElm.parentNode : null;\r
-       tabContainerElm = tabElm ? tabElm.parentNode : null;\r
-       selectionClass = t.getParam('selection_class', 'current');\r
-\r
-       if (tabElm && tabContainerElm) {\r
-               nodes = tabContainerElm.childNodes;\r
-\r
-               // Hide all other tabs\r
-               for (i = 0; i < nodes.length; i++) {\r
-                       if (nodes[i].nodeName == "LI") {\r
-                               t.hideTab(nodes[i]);\r
-                       }\r
-               }\r
-\r
-               // Show selected tab\r
-               t.showTab(tabElm);\r
-       }\r
-\r
-       if (panelElm && panelContainerElm) {\r
-               nodes = panelContainerElm.childNodes;\r
-\r
-               // Hide all other panels\r
-               for (i = 0; i < nodes.length; i++) {\r
-                       if (nodes[i].nodeName == "DIV")\r
-                               t.hidePanel(nodes[i]);\r
-               }\r
-\r
-               if (!avoid_focus) { \r
-                       tabElm.focus();\r
-               }\r
-\r
-               // Show selected panel\r
-               t.showPanel(panelElm);\r
-       }\r
-};\r
-\r
-MCTabs.prototype.getAnchor = function() {\r
-       var pos, url = document.location.href;\r
-\r
-       if ((pos = url.lastIndexOf('#')) != -1)\r
-               return url.substring(pos + 1);\r
-\r
-       return "";\r
-};\r
-\r
-\r
-//Global instance\r
-var mcTabs = new MCTabs();\r
-\r
-tinyMCEPopup.onInit.add(function() {\r
-       var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;\r
-\r
-       each(dom.select('div.tabs'), function(tabContainerElm) {\r
-               var keyNav;\r
-\r
-               dom.setAttrib(tabContainerElm, "role", "tablist"); \r
-\r
-               var items = tinyMCEPopup.dom.select('li', tabContainerElm);\r
-               var action = function(id) {\r
-                       mcTabs.displayTab(id, mcTabs.getPanelForTab(id));\r
-                       mcTabs.onChange.dispatch(id);\r
-               };\r
-\r
-               each(items, function(item) {\r
-                       dom.setAttrib(item, 'role', 'tab');\r
-                       dom.bind(item, 'click', function(evt) {\r
-                               action(item.id);\r
-                       });\r
-               });\r
-\r
-               dom.bind(dom.getRoot(), 'keydown', function(evt) {\r
-                       if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab\r
-                               keyNav.moveFocus(evt.shiftKey ? -1 : 1);\r
-                               tinymce.dom.Event.cancel(evt);\r
-                       }\r
-               });\r
-\r
-               each(dom.select('a', tabContainerElm), function(a) {\r
-                       dom.setAttrib(a, 'tabindex', '-1');\r
-               });\r
-\r
-               keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {\r
-                       root: tabContainerElm,\r
-                       items: items,\r
-                       onAction: action,\r
-                       actOnFocus: true,\r
-                       enableLeftRight: true,\r
-                       enableUpDown: true\r
-               }, tinyMCEPopup.dom);\r
-       });\r
-});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/utils/validate.js b/plugins/TinyMCE/js/utils/validate.js
deleted file mode 100644 (file)
index 27cbfab..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/**\r
- * validate.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-/**\r
-       // String validation:\r
-\r
-       if (!Validator.isEmail('myemail'))\r
-               alert('Invalid email.');\r
-\r
-       // Form validation:\r
-\r
-       var f = document.forms['myform'];\r
-\r
-       if (!Validator.isEmail(f.myemail))\r
-               alert('Invalid email.');\r
-*/\r
-\r
-var Validator = {\r
-       isEmail : function(s) {\r
-               return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');\r
-       },\r
-\r
-       isAbsUrl : function(s) {\r
-               return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');\r
-       },\r
-\r
-       isSize : function(s) {\r
-               return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$');\r
-       },\r
-\r
-       isId : function(s) {\r
-               return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');\r
-       },\r
-\r
-       isEmpty : function(s) {\r
-               var nl, i;\r
-\r
-               if (s.nodeName == 'SELECT' && s.selectedIndex < 1)\r
-                       return true;\r
-\r
-               if (s.type == 'checkbox' && !s.checked)\r
-                       return true;\r
-\r
-               if (s.type == 'radio') {\r
-                       for (i=0, nl = s.form.elements; i<nl.length; i++) {\r
-                               if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)\r
-                                       return false;\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-\r
-               return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);\r
-       },\r
-\r
-       isNumber : function(s, d) {\r
-               return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));\r
-       },\r
-\r
-       test : function(s, p) {\r
-               s = s.nodeType == 1 ? s.value : s;\r
-\r
-               return s == '' || new RegExp(p).test(s);\r
-       }\r
-};\r
-\r
-var AutoValidator = {\r
-       settings : {\r
-               id_cls : 'id',\r
-               int_cls : 'int',\r
-               url_cls : 'url',\r
-               number_cls : 'number',\r
-               email_cls : 'email',\r
-               size_cls : 'size',\r
-               required_cls : 'required',\r
-               invalid_cls : 'invalid',\r
-               min_cls : 'min',\r
-               max_cls : 'max'\r
-       },\r
-\r
-       init : function(s) {\r
-               var n;\r
-\r
-               for (n in s)\r
-                       this.settings[n] = s[n];\r
-       },\r
-\r
-       validate : function(f) {\r
-               var i, nl, s = this.settings, c = 0;\r
-\r
-               nl = this.tags(f, 'label');\r
-               for (i=0; i<nl.length; i++) {\r
-                       this.removeClass(nl[i], s.invalid_cls);\r
-                       nl[i].setAttribute('aria-invalid', false);\r
-               }\r
-\r
-               c += this.validateElms(f, 'input');\r
-               c += this.validateElms(f, 'select');\r
-               c += this.validateElms(f, 'textarea');\r
-\r
-               return c == 3;\r
-       },\r
-\r
-       invalidate : function(n) {\r
-               this.mark(n.form, n);\r
-       },\r
-       \r
-       getErrorMessages : function(f) {\r
-               var nl, i, s = this.settings, field, msg, values, messages = [], ed = tinyMCEPopup.editor;\r
-               nl = this.tags(f, "label");\r
-               for (i=0; i<nl.length; i++) {\r
-                       if (this.hasClass(nl[i], s.invalid_cls)) {\r
-                               field = document.getElementById(nl[i].getAttribute("for"));\r
-                               values = { field: nl[i].textContent };\r
-                               if (this.hasClass(field, s.min_cls, true)) {\r
-                                       message = ed.getLang('invalid_data_min');\r
-                                       values.min = this.getNum(field, s.min_cls);\r
-                               } else if (this.hasClass(field, s.number_cls)) {\r
-                                       message = ed.getLang('invalid_data_number');\r
-                               } else if (this.hasClass(field, s.size_cls)) {\r
-                                       message = ed.getLang('invalid_data_size');\r
-                               } else {\r
-                                       message = ed.getLang('invalid_data');\r
-                               }\r
-                               \r
-                               message = message.replace(/{\#([^}]+)\}/g, function(a, b) {\r
-                                       return values[b] || '{#' + b + '}';\r
-                               });\r
-                               messages.push(message);\r
-                       }\r
-               }\r
-               return messages;\r
-       },\r
-\r
-       reset : function(e) {\r
-               var t = ['label', 'input', 'select', 'textarea'];\r
-               var i, j, nl, s = this.settings;\r
-\r
-               if (e == null)\r
-                       return;\r
-\r
-               for (i=0; i<t.length; i++) {\r
-                       nl = this.tags(e.form ? e.form : e, t[i]);\r
-                       for (j=0; j<nl.length; j++) {\r
-                               this.removeClass(nl[j], s.invalid_cls);\r
-                               nl[j].setAttribute('aria-invalid', false);\r
-                       }\r
-               }\r
-       },\r
-\r
-       validateElms : function(f, e) {\r
-               var nl, i, n, s = this.settings, st = true, va = Validator, v;\r
-\r
-               nl = this.tags(f, e);\r
-               for (i=0; i<nl.length; i++) {\r
-                       n = nl[i];\r
-\r
-                       this.removeClass(n, s.invalid_cls);\r
-\r
-                       if (this.hasClass(n, s.required_cls) && va.isEmpty(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.number_cls) && !va.isNumber(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.email_cls) && !va.isEmail(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.size_cls) && !va.isSize(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.id_cls) && !va.isId(n))\r
-                               st = this.mark(f, n);\r
-\r
-                       if (this.hasClass(n, s.min_cls, true)) {\r
-                               v = this.getNum(n, s.min_cls);\r
-\r
-                               if (isNaN(v) || parseInt(n.value) < parseInt(v))\r
-                                       st = this.mark(f, n);\r
-                       }\r
-\r
-                       if (this.hasClass(n, s.max_cls, true)) {\r
-                               v = this.getNum(n, s.max_cls);\r
-\r
-                               if (isNaN(v) || parseInt(n.value) > parseInt(v))\r
-                                       st = this.mark(f, n);\r
-                       }\r
-               }\r
-\r
-               return st;\r
-       },\r
-\r
-       hasClass : function(n, c, d) {\r
-               return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);\r
-       },\r
-\r
-       getNum : function(n, c) {\r
-               c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];\r
-               c = c.replace(/[^0-9]/g, '');\r
-\r
-               return c;\r
-       },\r
-\r
-       addClass : function(n, c, b) {\r
-               var o = this.removeClass(n, c);\r
-               n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;\r
-       },\r
-\r
-       removeClass : function(n, c) {\r
-               c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');\r
-               return n.className = c != ' ' ? c : '';\r
-       },\r
-\r
-       tags : function(f, s) {\r
-               return f.getElementsByTagName(s);\r
-       },\r
-\r
-       mark : function(f, n) {\r
-               var s = this.settings;\r
-\r
-               this.addClass(n, s.invalid_cls);\r
-               n.setAttribute('aria-invalid', 'true');\r
-               this.markLabels(f, n, s.invalid_cls);\r
-\r
-               return false;\r
-       },\r
-\r
-       markLabels : function(f, n, ic) {\r
-               var nl, i;\r
-\r
-               nl = this.tags(f, "label");\r
-               for (i=0; i<nl.length; i++) {\r
-                       if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)\r
-                               this.addClass(nl[i], ic);\r
-               }\r
-\r
-               return null;\r
-       }\r
-};\r
diff --git a/plugins/TinyMCE/locale/Sample.po b/plugins/TinyMCE/locale/Sample.po
deleted file mode 100644 (file)
index a52c4ec..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-01 14:58-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: hello.php:115 SamplePlugin.php:266
-msgid "Hello"
-msgstr ""
-
-#: hello.php:117 hello.php:141
-#, php-format
-msgid "Hello, %s"
-msgstr ""
-
-#: hello.php:138
-msgid "Hello, stranger!"
-msgstr ""
-
-#: hello.php:143
-#, php-format
-msgid "I have greeted you %d time."
-msgid_plural "I have greeted you %d times."
-msgstr[0] ""
-msgstr[1] ""
-
-#: SamplePlugin.php:266
-msgid "A warm greeting"
-msgstr ""
-
-#: SamplePlugin.php:277
-msgid "A sample plugin to show basics of development for new hackers."
-msgstr ""
-
-#: User_greeting_count.php:163
-#, php-format
-msgid "Could not save new greeting count for %d"
-msgstr ""
-
-#: User_greeting_count.php:176
-#, php-format
-msgid "Could not increment greeting count for %d"
-msgstr ""
diff --git a/plugins/TinyMCE/locale/TinyMCE.pot b/plugins/TinyMCE/locale/TinyMCE.pot
deleted file mode 100644 (file)
index ccd2ea1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Plugin description.
-#: TinyMCEPlugin.php:87
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
diff --git a/plugins/TinyMCE/locale/ca/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/ca/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 0269928..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Catalan (català)
-# Exported from translatewiki.net
-#
-# Author: Toniher
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:18+0000\n"
-"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Fes servir la biblioteca TinyMCE per permetre l'edició de text ric en el "
-"navegador."
diff --git a/plugins/TinyMCE/locale/de/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/de/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index a41e949..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Giftpflanze
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:18+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Benutze die TinyMCE-Bibliothek um Rich-Text-Bearbeitung im Browser zu "
-"ermöglichen."
diff --git a/plugins/TinyMCE/locale/eo/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/eo/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 87ae53b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Esperanto (Esperanto)
-# Exported from translatewiki.net
-#
-# Author: Eliovir
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:18+0000\n"
-"Language-Team: Esperanto <https://translatewiki.net/wiki/Portal:eo>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: eo\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Uzas la bibliotekon TinyMCE por ebligi redakton de riĉigita teksto en la "
-"retumilo."
diff --git a/plugins/TinyMCE/locale/es/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/es/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index b03b0dd..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Translationista
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:18+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Utiliza la biblioteca TinyMCE para permitir la edición de texto enriquecido "
-"en el navegador."
diff --git a/plugins/TinyMCE/locale/fr/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/fr/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index ab25a97..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to French (français)
-# Exported from translatewiki.net
-#
-# Author: Verdy p
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:18+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Utiliser la bibliothèque TinyMCE pour permettre la modification de texte "
-"enrichi dans le navigateur."
diff --git a/plugins/TinyMCE/locale/gl/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/gl/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 227f528..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Usar a biblioteca TinyMCE para permitir a edición de texto enriquecido no "
-"navegador."
diff --git a/plugins/TinyMCE/locale/he/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/he/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 0ac20ea..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - TinyMCE to Hebrew (עברית)
-# Exported from translatewiki.net
-#
-# Author: YaronSh
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Hebrew <https://translatewiki.net/wiki/Portal:he>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr "שימוש בספרייה TinyMCE כדי לאפשר עריכת טקסט עשיר באמצעות הדפדפן."
diff --git a/plugins/TinyMCE/locale/ia/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/ia/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 70e7620..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Usar le bibliotheca TinyMCE pro permitter le modification de texto "
-"inricchite in le navigator."
diff --git a/plugins/TinyMCE/locale/id/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/id/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index fef89c3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Indonesian (Bahasa Indonesia)
-# Exported from translatewiki.net
-#
-# Author: Farras
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Indonesian <https://translatewiki.net/wiki/Portal:id>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: id\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Gunakan pustaka TinyMCE untuk memungkinkan penyuntingan teks kaya pada "
-"peramban."
diff --git a/plugins/TinyMCE/locale/ja/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/ja/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index dfd0879..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Translation of StatusNet - TinyMCE to Japanese (日本語)
-# Exported from translatewiki.net
-#
-# Author: Shirayuki
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"TinyMCE ライブラリーを使用するとブラウザ内でリッチなテキスト編集ができます。"
diff --git a/plugins/TinyMCE/locale/mk/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/mk/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index abf7242..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Користи ја библиотеката TinyMCE за уредување со збогатен текст во "
-"прелистувачот."
diff --git a/plugins/TinyMCE/locale/ms/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/ms/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 39393f0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Malay <https://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Gunakan perpustakaan TinyMCE untuk membolehkan penyuntingan teks beraneka "
-"(rich text) dalam pelayar ini."
diff --git a/plugins/TinyMCE/locale/nb/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/nb/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index db49725..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - TinyMCE to Norwegian Bokmål (‪norsk (bokmål)‬)
-# Exported from translatewiki.net
-#
-# Author: Nghtwlkr
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Norwegian Bokmål <https://translatewiki.net/wiki/Portal:nb>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nb\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Bruk TinyMCE-biblioteket for å tillate rik tekstredigering i nettleseren."
diff --git a/plugins/TinyMCE/locale/nl/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/nl/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 81cb96e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - TinyMCE to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr "TinyMCE gebruiken om WYSIWYG-bewerken in de browser mogelijk te maken."
diff --git a/plugins/TinyMCE/locale/pt/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/pt/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 1a53bca..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Translation of StatusNet - TinyMCE to Portuguese (português)
-# Exported from translatewiki.net
-#
-# Author: Waldir
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr "Use biblioteca TinyMCE para permitir a edição em rich text no browser."
diff --git a/plugins/TinyMCE/locale/pt_BR/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/pt_BR/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index c149ade..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Brazilian Portuguese (português do Brasil)
-# Exported from translatewiki.net
-#
-# Author: Giro720
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:19+0000\n"
-"Language-Team: Brazilian Portuguese <https://translatewiki.net/wiki/Portal:"
-"pt-br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt-br\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Utilizar a biblioteca TinyMCE para permitir edição em rich text no navegador."
diff --git a/plugins/TinyMCE/locale/ru/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/ru/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 2cafd46..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Russian (русский)
-# Exported from translatewiki.net
-#
-# Author: Александр Сигачёв
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:20+0000\n"
-"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Использование библиотеки TinyMCE, для редактирования текста в браузере."
diff --git a/plugins/TinyMCE/locale/tl/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/tl/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index 5c5bf59..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - TinyMCE to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:20+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Gamitin ang aklatan ng TinyMCE upang pahintulutan ang pamamatnugot ng "
-"mayamang teksto sa pantingin-tingin."
diff --git a/plugins/TinyMCE/locale/uk/LC_MESSAGES/TinyMCE.po b/plugins/TinyMCE/locale/uk/LC_MESSAGES/TinyMCE.po
deleted file mode 100644 (file)
index b77701e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Translation of StatusNet - TinyMCE to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - TinyMCE\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:20+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:08+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-tinymce\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid "Use TinyMCE library to allow rich text editing in the browser."
-msgstr ""
-"Використання бібліотеки TinyMCE для простого форматування тексту у вікні "
-"браузера."
index 8b90e7702900a893cd1fb53f4c8f81c8321b80e4..9252fd17a57943da53e19ee70aeb9743607a94eb 100644 (file)
@@ -143,7 +143,7 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return void
      */
-    function onEndLoginGroupNav($action)
+    function onEndLoginGroupNav(Action $action)
     {
         $action_name = $action->trimmed('action');
 
index 30f8141a97d4051be97930d688d109018d0724c1..8fa4df44726074adad35fd2a83597882415ad003 100644 (file)
@@ -28,9 +28,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
 
 require_once dirname(__DIR__) . '/twitter.php';
 
@@ -535,11 +533,10 @@ class TwitterauthorizationAction extends Action
             $args['email'] = $email;
         }
 
-        $user = User::register($args);
-
-        if (empty($user)) {
-            // TRANS: Server error displayed when creating a new user has failed.
-            $this->serverError(_m('Error registering user.'));
+        try {
+            $user = User::register($args);
+        } catch (Exception $e) {
+            $this->serverError($e->getMessage());
         }
 
         $result = $this->saveForeignLink($user->id,
index 9a20536147e3da8be62e0164e6f59808f5c2de8b..28f60b9b3e8db8b11fe447c15c5ef2288c8ed1ed 100644 (file)
@@ -52,7 +52,7 @@ class Twitter_synch_status extends Managed_DataObject
 {
     public $__table = 'twitter_synch_status'; // table name
     public $foreign_id;                      // bigint primary_key not_null
-    public $timeline;                        // varchar(255)  primary_key not_null
+    public $timeline;                        // varchar(191)  primary_key not_null   not 255 because utf8mb4 takes more space
     public $last_id;                         // bigint not_null
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
@@ -62,7 +62,7 @@ class Twitter_synch_status extends Managed_DataObject
         return array(
             'fields' => array(
                 'foreign_id' => array('type' => 'int', 'size' => 'big', 'not null' => true, 'description' => 'Foreign message ID'),
-                'timeline' => array('type' => 'varchar', 'length' => 255, 'description' => 'timeline name'),
+                'timeline' => array('type' => 'varchar', 'length' => 191, 'description' => 'timeline name'),
                 'last_id' => array('type' => 'int', 'size' => 'big', 'not null' => true, 'description' => 'last id fetched'),
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
index 6bd697cd0210012e9a1d9d3aa69b0c5f67c445f3..c8fef72eb6fb0af221c5a9ad8e05b6efd05b5d14 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * GNU social - a federating social network
  *
- * Plugin to make thumbnails of video files with ffmpeg
+ * Plugin to make thumbnails of video files with avconv
  *
  * PHP version 5
  *
@@ -31,10 +31,13 @@ if (!defined('GNUSOCIAL')) { exit(1); }
 
 /*
  * Dependencies:
- *  php5-ffmpeg
+ *  avconv (external program call)
  *  php5-gd
  *
- * Video support will depend on your ffmpeg.
+ * Todo:
+ *  Make sure we support ffmpeg too, so we're not super Debian oriented.
+ *
+ * Video support will depend on your avconv.
  */
 
 class VideoThumbnailsPlugin extends Plugin
@@ -48,27 +51,17 @@ class VideoThumbnailsPlugin extends Plugin
     {
         // The calling function might accidentally pass application/ogg videos.
         // If that's a problem, let's fix it in the calling function.
-        if ($media !== 'video') {
+        if ($media !== 'video' || empty($file->filename)) {
             return true;
         }
 
-        $movie = new ffmpeg_movie($file->getPath(), false);
+        // Let's save our frame to a temporary file. If we fail, remove it.
+        $imgPath = tempnam(sys_get_temp_dir(), 'socialthumb-');
 
-        $frames = $movie->getFrameCount();
-        if ($frames > 0) {
-            $frame = $movie->getFrame(floor($frames/2));
-        } else {
-            $frame = $movie->getNextKeyFrame();
-        }
+        $result = exec('avconv -i '.escapeshellarg($file->getPath()).' -vcodec mjpeg -vframes 1 -f image2 -an '.escapeshellarg($imgPath));
 
-        // We failed to get a frame.
-        if (!$frame instanceof ffmpeg_frame) {
-            return true;
-        }
-
-        // Let's save our frame to a temporary file. If we fail, remove it.
-        $imgPath = tempnam(common_get_temp_dir(), 'socialthumb');
-        if (!imagejpeg($frame->toGDImage(), $imgPath)) {
+        if (!getimagesize($imgPath)) {
+            common_debug('exec of "avconv" produced a bad/nonexisting image it seems');
             @unlink($imgPath);
             return true;
         }
index 80da17dff6977c31bf671bc345a83fb6ffb67531..dff3c86bc1d8f27c671aae04ef8e67f1163f3481 100644 (file)
@@ -31,6 +31,13 @@ if (!defined('GNUSOCIAL')) { exit(1); }
 
 class WebFingerPlugin extends Plugin
 {
+    public $http_alias = false;
+
+    public function initialize()
+    {
+        common_config_set('webfinger', 'http_alias', $this->http_alias);
+    }
+
     public function onRouterInitialized(URLMapper $m)
     {
         $m->connect('.well-known/host-meta', array('action' => 'hostmeta'));
index d473d95628f4a73f3ea28068ba3002fc4108e94c..61b2cc09adbedcd81350ed2d82db256aa59fb151 100644 (file)
@@ -34,7 +34,12 @@ abstract class WebFingerResource
         $aliases = array();
 
         // Add the URI as an identity, this is _not_ necessarily an HTTP url
-        $aliases[] = $this->object->getUri();
+        $uri = $this->object->getUri();
+        $aliases[] = $uri;
+        if (common_config('webfinger', 'http_alias')
+                && strtolower(parse_url($uri, PHP_URL_SCHEME)) === 'https') {
+            $aliases[] = preg_replace('/^https:/', 'http:', $uri, 1);
+        }
 
         try {
             $aliases[] = $this->object->getUrl();
diff --git a/plugins/XCache/locale/XCache.pot b/plugins/XCache/locale/XCache.pot
deleted file mode 100644 (file)
index 8840592..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANS: Plugin description.
-#: XCachePlugin.php:117
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
diff --git a/plugins/XCache/locale/ast/LC_MESSAGES/XCache.po b/plugins/XCache/locale/ast/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 6253db6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Asturian (asturianu)
-# Exported from translatewiki.net
-#
-# Author: Xuacu
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:29+0000\n"
-"Language-Team: Asturian <https://translatewiki.net/wiki/Portal:ast>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ast\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Usar la cache variable <a href=\"http://xcache.lighttpd.net/\">XCache</a> pa "
-"cachear los resultaos de la consulta."
diff --git a/plugins/XCache/locale/br/LC_MESSAGES/XCache.po b/plugins/XCache/locale/br/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 50a3993..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Breton (brezhoneg)
-# Exported from translatewiki.net
-#
-# Author: Fulup
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:29+0000\n"
-"Language-Team: Breton <https://translatewiki.net/wiki/Portal:br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Ober gant ar grubuilh hegemm <a href=\"http://xcache.lighttpd.net/\">XCache</"
-"a> da grubuilhañ disoc'hoù ar rekedoù."
diff --git a/plugins/XCache/locale/de/LC_MESSAGES/XCache.po b/plugins/XCache/locale/de/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 4ba1878..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: Giftpflanze
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:29+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Benutze den <a href=\"http://xcache.lighttpd.net/\">XCache</a> variablen "
-"Cache um Suchergebnisse zu cachen."
diff --git a/plugins/XCache/locale/es/LC_MESSAGES/XCache.po b/plugins/XCache/locale/es/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 7ed35e5..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Locos epraix
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:29+0000\n"
-"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Utilice la caché variable <a href=\"http://xcache.lighttpd.net/\">XCache</a> "
-"para guardar los resultados de consultas."
diff --git a/plugins/XCache/locale/eu/LC_MESSAGES/XCache.po b/plugins/XCache/locale/eu/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 7e449b1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of StatusNet - XCache to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:29+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Erabili <a href=\"http://xcache.lighttpd.net/\">XCache</a> aldagairen katxea "
-"kontsultako emaitzak katxeatzeko."
diff --git a/plugins/XCache/locale/fi/LC_MESSAGES/XCache.po b/plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 005b216..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Finnish (suomi)
-# Exported from translatewiki.net
-#
-# Author: Centerlink
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Finnish <https://translatewiki.net/wiki/Portal:fi>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fi\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Käytä <a href=\"http://xcache.lighttpd.net/\">XCache</a>-muuttujavälimuistia "
-"kyselyn tulosten tallentamiseksi välimuistiin."
diff --git a/plugins/XCache/locale/fr/LC_MESSAGES/XCache.po b/plugins/XCache/locale/fr/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index f55f398..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to French (français)
-# Exported from translatewiki.net
-#
-# Author: Verdy p
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Utilisez le cache variable <a href=\"http://xcache.lighttpd.net/\">XCache</"
-"a> pour mettre en cache les résultats de requêtes."
diff --git a/plugins/XCache/locale/gl/LC_MESSAGES/XCache.po b/plugins/XCache/locale/gl/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 6fc7b00..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Usar a caché variable <a href=\"http://xcache.lighttpd.net/\">XCache</a> "
-"para gardar os resultados das pescudas na memoria caché."
diff --git a/plugins/XCache/locale/he/LC_MESSAGES/XCache.po b/plugins/XCache/locale/he/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 23deac8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Hebrew (עברית)
-# Exported from translatewiki.net
-#
-# Author: YaronSh
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Hebrew <https://translatewiki.net/wiki/Portal:he>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"שימוש במשתנה <a href=\"http://xcache.lighttpd.net/\">XCache</a> לשמירת "
-"תוצאות השאילתות במטמון."
diff --git a/plugins/XCache/locale/ia/LC_MESSAGES/XCache.po b/plugins/XCache/locale/ia/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index d72209d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Usar le cache de variabiles <a href=\"http://xcache.lighttpd.net/\">XCache</"
-"a> pro immagazinar le resultatos de consultas."
diff --git a/plugins/XCache/locale/id/LC_MESSAGES/XCache.po b/plugins/XCache/locale/id/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 16e0073..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Indonesian (Bahasa Indonesia)
-# Exported from translatewiki.net
-#
-# Author: Farras
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Indonesian <https://translatewiki.net/wiki/Portal:id>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: id\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Gunakan tembolok variabel <a href=\"http://xcache.lighttpd.net/\">XCache</a> "
-"untuk menembolokkan hasil pencarian."
diff --git a/plugins/XCache/locale/mk/LC_MESSAGES/XCache.po b/plugins/XCache/locale/mk/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 83bc937..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Користи променлив кеш <a href=\"http://xcache.lighttpd.net/\">XCache</a> за "
-"кеширање на резултати од барања."
diff --git a/plugins/XCache/locale/ms/LC_MESSAGES/XCache.po b/plugins/XCache/locale/ms/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index ac9b524..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Malay <https://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Gunakan ''cache'' pembolehubah <a href=\"http://xcache.lighttpd.net/"
-"\">XCache</a> untuk menyimpan hasil pertanyaan dalam ''cache''."
diff --git a/plugins/XCache/locale/nb/LC_MESSAGES/XCache.po b/plugins/XCache/locale/nb/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 232638b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Norwegian Bokmål (‪norsk (bokmål)‬)
-# Exported from translatewiki.net
-#
-# Author: Nghtwlkr
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:30+0000\n"
-"Language-Team: Norwegian Bokmål <https://translatewiki.net/wiki/Portal:nb>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nb\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Bruk <a href=\"http://xcache.lighttpd.net/\">XCache</a>-"
-"variabelhurtiglageret til å hurtiglagre søkeresultat."
diff --git a/plugins/XCache/locale/nl/LC_MESSAGES/XCache.po b/plugins/XCache/locale/nl/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index eab2395..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"<a href=\"http://xcache.lighttpd.net/\">XCache</a> cache gebruiken voor het "
-"cachen van zoekopdrachtresultaten."
diff --git a/plugins/XCache/locale/pl/LC_MESSAGES/XCache.po b/plugins/XCache/locale/pl/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 8098b3a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Translation of StatusNet - XCache to Polish (polski)
-# Exported from translatewiki.net
-#
-# Author: BeginaFelicysym
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
-"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Używa zmiennej pamięci podręcznej <a href=\"http://xcache.lighttpd.net/"
-"\">XCache</a> do buforowania wyników kwerendy."
diff --git a/plugins/XCache/locale/pt/LC_MESSAGES/XCache.po b/plugins/XCache/locale/pt/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 7f60405..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Portuguese (português)
-# Exported from translatewiki.net
-#
-# Author: Waldir
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Utilizar a cache variável <a href=\"http://xcache.lighttpd.net/\">XCache</a> "
-"para armazenar resultados de consultas."
diff --git a/plugins/XCache/locale/pt_BR/LC_MESSAGES/XCache.po b/plugins/XCache/locale/pt_BR/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 9a679b0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - XCache to Brazilian Portuguese (português do Brasil)
-# Exported from translatewiki.net
-#
-# Author: Giro720
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Brazilian Portuguese <https://translatewiki.net/wiki/Portal:"
-"pt-br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: pt-br\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Utilizar o cache variável <a href=\"http://xcache.lighttpd.net/\">XCache</a> "
-"para guardar os resultados de consultas."
diff --git a/plugins/XCache/locale/ru/LC_MESSAGES/XCache.po b/plugins/XCache/locale/ru/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 76d5c05..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - XCache to Russian (русский)
-# Exported from translatewiki.net
-#
-# Author: Александр Сигачёв
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Использование <a href=\"http://xcache.lighttpd.net/\">XCache</a> для "
-"кеширования результатов запросов."
diff --git a/plugins/XCache/locale/tl/LC_MESSAGES/XCache.po b/plugins/XCache/locale/tl/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 62a5ae6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Gamitin ang nababagong taguan na <a href=\"http://xcache.lighttpd.net/"
-"\">XCache</a> upang ikubli ang mga kinalabasan ng pagtatanong."
diff --git a/plugins/XCache/locale/tr/LC_MESSAGES/XCache.po b/plugins/XCache/locale/tr/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index 453cdac..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Translation of StatusNet - XCache to Turkish (Türkçe)
-# Exported from translatewiki.net
-#
-# Author: Maidis
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Turkish <https://translatewiki.net/wiki/Portal:tr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Sorgulama sonuçlarını saklamak için <a href=\"http://xcache.lighttpd.net/"
-"\">XCache</a> değişken önbelleğini kullan."
diff --git a/plugins/XCache/locale/uk/LC_MESSAGES/XCache.po b/plugins/XCache/locale/uk/LC_MESSAGES/XCache.po
deleted file mode 100644 (file)
index b607bd1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Translation of StatusNet - XCache to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - XCache\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:31+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:14+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-xcache\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Plugin description.
-msgid ""
-"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
-"cache query results."
-msgstr ""
-"Використання <a href=\"http://xcache.lighttpd.net/\">XCache</a> для "
-"різноманітних запитів щодо кешу."
diff --git a/plugins/YammerImport/README b/plugins/YammerImport/README
deleted file mode 100644 (file)
index 47fc070..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-Yammer Import Plugin
-====================
-
-This plugin allows a one-time import pulling user accounts, groups, and
-public messages from an existing Yammer instance, using Yammer's public API.
-
-Requirements
-------------
-
-* An account on the Yammer network you wish to import from
-* An administrator account on the target StatusNet instance, or
-  command-line administrative access
-* This YammerImport plugin enabled on your StatusNet instance
-
-
-Limitations
------------
-
-Yammer API key registrations only work for your own network unless you make
-arrangements for a 'trusted app' key, so for now users will need to register
-the app themselves. There is a helper in the admin panel for this.
-
-In theory any number of users, groups, and messages should be supported, but
-it hasn't been fully tested on non-trivial-sized sites.
-
-No provision has yet been made for dealing with conflicting usernames or
-group names, or names which are not considered valid by StatusNet. Errors
-are possible.
-
-Running via the web admin interface requires having queueing enabled, and is
-fairly likely to have problems with the application key registration step in
-a small installation at this time.
-
-
-Web setup
----------
-
-The import process is runnable through an administration panel on your
-StatusNet site. The user interface is still a bit flaky, however, and if
-errors occur during import the process may stop with no way to restart it
-visible.
-
-The admin interface will probably kinda blow up if JS/AJAX isn't working.
-
-You'll be prompted to register the application and authenticate into Yammer,
-after which a progress screen will display.
-
-Two big warnings:
-* The progress display does not currently auto-refresh.
-* If anything fails once actual import has begun, it'll just keep showing
-  the current state. You won't see an error message, and there's no way
-  to reset or restart from the web UI yet.
-
-You can continue or reset the import state using the command-line script.
-
-
-CLI setup
----------
-
-You'll need to register an application consumer key to allow the importer
-to connect to your Yammer network; this requires logging into Yammer:
-
-  https://www.yammer.com/client_applications/new
-
-Check all the 'read' options; no 'write' options are required, but Yammer
-seems to end up setting them anyway.
-
-You can set the resulting keys directly in config.php:
-
-    $config['yammer']['consumer_key'] = '#####';
-    $config['yammer']['consumer_secret'] = '##########';
-
-Initiate authentication by starting up the importer script:
-
-    php plugins/YammerImport/scripts/yammer-import.php
-
-Since you haven't yet authenticated, this will request an auth token and
-give you a URL to open in your web browser. Once logged in and authorized
-there, you'll be given a confirmation code. Pass this back:
-
-    php plugins/YammerImport/scripts/yammer-import.php --verify=####
-
-If all is well, the import process will begin and run through the end.
-
-In case of error or manual abort, you should be able to continue the
-import from where you left off by running the script again:
-
-    php plugins/YammerImport/scripts/yammer-import.php
-
-To reset the Yammer import state -- without removing any of the items
-that have already been imported -- you can pass the --reset option:
-
-    php plugins/YammerImport/scripts/yammer-import.php --reset
-
-This'll let you start over from the requesting-authentication stage.
-Any users, groups, or notices that have already been imported will be
-retained.
-
-
-Subscriptions and group memberships
------------------------------------
-
-Yammer's API does not expose user/tag subscriptions or group memberships
-except for the authenticating user. As a result, users will need to re-join
-groups and re-follow their fellow users after the import.
-
-(This limitation may be lifted in future for sites on the Silver or Gold
-plans where the import is done by a verified admin, as it should be possible
-to fetch the information for each user via the admin account.)
-
-
-Authentication
---------------
-
-Account passwords cannot be retrieved, but the primary e-mail address is
-retained so users can reset their passwords by mail if you're not using a
-custom authentication system like LDAP.
-
-
-Private messages and groups
----------------------------
-
-At this time, only public messages are imported; private direct and group
-messages are ignored. (This may change with Silver and Gold plans in future.)
-
-Yammer groups may be either public or private. Groups in StatusNet currently
-have no privacy option, so any private groups will become public groups in the
-imported site.
-
-
-Attachments
------------
-
-Attached image and document files will be copied in as if they had been
-uploaded to the StatusNet site. Currently images do not display inline like
-they do on Yammer; they will be linked instead.
-
-File type and size limitations on attachments will be applied, so beware some
-attachments may not make it through.
-
-
-Code structure
-==============
-
-Standalone classes
-------------------
-
-YammerRunner: encapsulates the iterative process of retrieving the various users,
-              groups, and messages via SNYammerClient and saving them locally
-              via YammerImporter.
-
-SNYammerClient: encapsulates HTTP+OAuth interface to Yammer API, returns data
-                 as straight decoded JSON object trees.
-
-YammerImporter: encapsulates logic to pull information from the returned API data
-                and convert them to native StatusNet users, groups, and messages.
-
-Web UI actions
--------------
-
-YammeradminpanelAction: web panel for site administrator to initiate and monitor
-                        the import process.
-
-Command-line scripts
---------------------
-
-yammer-import.php: CLI script to start a Yammer import run in one go.
-
-Database objects
-----------------
-
-Yammer_state: data object storing YammerRunner's state between iterations.
-
-Yammer_notice_stub: data object for temporary storage of fetched Yammer messages
-                    between fetching them (reverse chron order) and saving them
-                    to local messages (forward chron order).
-Yammer_user,
-Yammer_group,
-Yammer_notice: data objects mapping original Yammer item IDs to their local copies.
diff --git a/plugins/YammerImport/YammerImportPlugin.php b/plugins/YammerImport/YammerImportPlugin.php
deleted file mode 100644 (file)
index f11ebfb..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package YammerImportPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET')) { exit(1); }
-
-class YammerImportPlugin extends Plugin
-{
-    /**
-     * Hook for RouterInitialized event.
-     *
-     * @param URLMapper $m path-to-action mapper
-     * @return boolean hook return
-     */
-    public function onRouterInitialized(URLMapper $m)
-    {
-        $m->connect('panel/yammer',
-                    array('action' => 'yammeradminpanel'));
-        $m->connect('panel/yammer/auth',
-                    array('action' => 'yammerauth'));
-        return true;
-    }
-
-    /**
-     * Set up queue handlers for import processing
-     * @param QueueManager $qm
-     * @return boolean hook return
-     */
-    function onEndInitializeQueueManager(QueueManager $qm)
-    {
-        $qm->connect('yammer', 'YammerQueueHandler');
-
-        return true;
-    }
-
-    /**
-     * Set up all our tables...
-     */
-    function onCheckSchema()
-    {
-        $schema = Schema::get();
-
-        $tables = array('Yammer_state',
-                        'Yammer_user',
-                        'Yammer_group',
-                        'Yammer_notice',
-                        'Yammer_notice_stub');
-        foreach ($tables as $table) {
-            $schemaDef = call_user_func(array($table, 'schemaDef'));
-            $schema->ensureTable(strtolower($table), $schemaDef);
-        }
-
-        return true;
-    }
-
-    /**
-     * If the plugin's installed, this should be accessible to admins.
-     */
-    function onAdminPanelCheck($name, &$isOK)
-    {
-        if ($name == 'yammer') {
-            $isOK = true;
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Add the Yammer admin panel to the list...
-     */
-    function onEndAdminPanelNav($nav)
-    {
-        if (AdminPanelAction::canAdmin('yammer')) {
-            $action_name = $nav->action->trimmed('action');
-
-            $nav->out->menuItem(common_local_url('yammeradminpanel'),
-                                // TRANS: Menu item for Yammer import.
-                                _m('MENU','Yammer'),
-                                // TRANS: Menu item title for Yammer import.
-                                _m('Yammer import module.'),
-                                $action_name == 'yammeradminpanel',
-                                'nav_yammer_admin_panel');
-        }
-
-        return true;
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_common.php b/plugins/YammerImport/classes/Yammer_common.php
deleted file mode 100644 (file)
index f063484..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import mappings
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Common base class for the Yammer import mappings for users, groups, and notices.
- *
- * Child classes must override these static methods, since we need to run
- * on PHP 5.2.x which has no late static binding: (not really anymore)
- * - staticGet (as our other classes)
- * - schemaDef (call self::doSchemaDef)
- * - record (call self::doRecord)
- */
-class Yammer_common extends Managed_DataObject
-{
-    public $__table = 'yammer_XXXX'; // table name
-    public $__field = 'XXXX_id';     // field name to save into
-    public $id;                      // int  primary_key not_null
-    public $user_id;                 // int(4)
-    public $created;                 // datetime
-
-    /**
-     * @todo FIXME: Add a 'references' thing for the foreign key when we support that
-     */
-    protected static function doSchemaDef($field)
-    {
-        return array(new ColumnDef('id', 'bigint', null,
-                                   false, 'PRI'),
-                     new ColumnDef($field, 'integer', null,
-                                   false, 'UNI'),
-                     new ColumnDef('created', 'datetime', null,
-                                   false));
-    }
-
-    /**
-     * return table definition for DB_DataObject
-     *
-     * DB_DataObject needs to know something about the table to manipulate
-     * instances. This method provides all the DB_DataObject needs to know.
-     *
-     * @return array array of column definitions
-     */
-
-    function table()
-    {
-        return array('id'           => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
-                     $this->__field => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
-                     'created'      => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
-    }
-
-    /**
-     * return key definitions for DB_DataObject
-     *
-     * DB_DataObject needs to know about keys that the table has, since it
-     * won't appear in StatusNet's own keys list. In most cases, this will
-     * simply reference your keyTypes() function.
-     *
-     * @return array list of key field names
-     */
-    function keys()
-    {
-        return array_keys($this->keyTypes());
-    }
-
-    /**
-     * return key definitions for Memcached_DataObject
-     *
-     * Our caching system uses the same key definitions, but uses a different
-     * method to get them. This key information is used to store and clear
-     * cached data, so be sure to list any key that will be used for static
-     * lookups.
-     *
-     * @return array associative array of key definitions, field name to type:
-     *         'K' for primary key: for compound keys, add an entry for each component;
-     *         'U' for unique keys: compound keys are not well supported here.
-     */
-    function keyTypes()
-    {
-        return array('id' => 'K', $this->__field => 'U');
-    }
-
-    /**
-     * Magic formula for non-autoincrementing integer primary keys
-     *
-     * If a table has a single integer column as its primary key, DB_DataObject
-     * assumes that the column is auto-incrementing and makes a sequence table
-     * to do this incrementation. Since we don't need this for our class, we
-     * overload this method and return the magic formula that DB_DataObject needs.
-     *
-     * @return array magic three-false array that stops auto-incrementing.
-     */
-    function sequenceKey()
-    {
-        return array(false, false, false);
-    }
-
-    /**
-     * Save a mapping between a remote Yammer and local imported user.
-     *
-     * @param integer $user_id ID of the status in StatusNet
-     * @param integer $orig_id ID of the notice in Yammer
-     *
-     * @return Yammer_common new object for this value
-     */
-    protected static function doRecord($class, $field, $orig_id, $local_id)
-    {
-        $map = Memcached_DataObject::getClassKV($class, 'id', $orig_id);
-
-        if (!empty($map)) {
-            return $map;
-        }
-
-        $map = Memcached_DataObject::getClassKV($class, $field, $local_id);
-
-        if (!empty($map)) {
-            return $map;
-        }
-
-        common_debug("Mapping Yammer $field {$orig_id} to local $field {$local_id}");
-
-        $map = new $class();
-
-        $map->id = $orig_id;
-        $map->$field = $local_id;
-        $map->created = common_sql_now();
-
-        $map->insert();
-
-        return $map;
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_group.php b/plugins/YammerImport/classes/Yammer_group.php
deleted file mode 100644 (file)
index ac4dc79..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import mappings
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-class Yammer_group extends Yammer_common
-{
-    public $__table = 'yammer_group'; // table name
-    public $__field = 'group_id';     // field to map to
-    public $group_id;                 // int
-
-    /**
-     * Return schema definition to set this table up in onCheckSchema
-     */
-    static function schemaDef()
-    {
-        return self::doSchemaDef('group_id');
-    }
-
-    /**
-     * Save a mapping between a remote Yammer and local imported group.
-     *
-     * @param integer $orig_id ID of the notice in Yammer
-     * @param integer $group_id ID of the status in StatusNet
-     *
-     * @return Yammer_group new object for this value
-     */
-    static function record($orig_id, $group_id)
-    {
-        return self::doRecord('Yammer_group', 'group_id', $orig_id, $group_id);
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_notice.php b/plugins/YammerImport/classes/Yammer_notice.php
deleted file mode 100644 (file)
index d903b12..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import mappings
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-class Yammer_notice extends Yammer_common
-{
-    public $__table = 'yammer_notice'; // table name
-    public $__field = 'notice_id';     // field to map to
-    public $notice_id;                 // int
-
-    /**
-     * Return schema definition to set this table up in onCheckSchema
-     */
-    static function schemaDef()
-    {
-        return self::doSchemaDef('notice_id');
-    }
-
-    /**
-     * Save a mapping between a remote Yammer and local imported notice.
-     *
-     * @param integer $orig_id ID of the notice in Yammer
-     * @param integer $notice_id ID of the status in StatusNet
-     *
-     * @return Yammer_notice new object for this value
-     */
-    static function record($orig_id, $notice_id)
-    {
-        return self::doRecord('Yammer_notice', 'notice_id', $orig_id, $notice_id);
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_notice_stub.php b/plugins/YammerImport/classes/Yammer_notice_stub.php
deleted file mode 100644 (file)
index e38d316..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import mappings
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Temporary storage for imported Yammer messages between fetching and saving
- * as local notices.
- *
- * The Yammer API only allows us to page down from the most recent items; in
- * order to start saving the oldest notices first, we have to pull them all
- * down in reverse chronological order, then go back over them from oldest to
- * newest and actually save them into our notice table.
- */
-class Yammer_notice_stub extends Managed_DataObject
-{
-    public $__table = 'yammer_notice_stub'; // table name
-    public $id;                             // int  primary_key not_null
-    public $json_data;                      // text
-    public $created;                        // datetime
-
-    /**
-     * Return schema definition to set this table up in onCheckSchema
-     */
-    static function schemaDef()
-    {
-        return array(new ColumnDef('id', 'bigint', null,
-                                   false, 'PRI'),
-                     new ColumnDef('json_data', 'text', null,
-                                   false),
-                     new ColumnDef('created', 'datetime', null,
-                                   false));
-    }
-
-    /**
-     * return table definition for DB_DataObject
-     *
-     * DB_DataObject needs to know something about the table to manipulate
-     * instances. This method provides all the DB_DataObject needs to know.
-     *
-     * @return array array of column definitions
-     */
-    function table()
-    {
-        return array('id'           => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
-                     'json_data'    => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
-                     'created'      => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
-    }
-
-    /**
-     * return key definitions for DB_DataObject
-     *
-     * DB_DataObject needs to know about keys that the table has, since it
-     * won't appear in StatusNet's own keys list. In most cases, this will
-     * simply reference your keyTypes() function.
-     *
-     * @return array list of key field names
-     */
-
-    function keys()
-    {
-        return array_keys($this->keyTypes());
-    }
-
-    /**
-     * return key definitions for Memcached_DataObject
-     *
-     * Our caching system uses the same key definitions, but uses a different
-     * method to get them. This key information is used to store and clear
-     * cached data, so be sure to list any key that will be used for static
-     * lookups.
-     *
-     * @return array associative array of key definitions, field name to type:
-     *         'K' for primary key: for compound keys, add an entry for each component;
-     *         'U' for unique keys: compound keys are not well supported here.
-     */
-    function keyTypes()
-    {
-        return array('id' => 'K');
-    }
-
-    /**
-     * Magic formula for non-autoincrementing integer primary keys
-     *
-     * If a table has a single integer column as its primary key, DB_DataObject
-     * assumes that the column is auto-incrementing and makes a sequence table
-     * to do this incrementation. Since we don't need this for our class, we
-     * overload this method and return the magic formula that DB_DataObject needs.
-     *
-     * @return array magic three-false array that stops auto-incrementing.
-     */
-    function sequenceKey()
-    {
-        return array(false, false, false);
-    }
-
-    /**
-     * Decode the stored data structure.
-     *
-     * @return mixed
-     */
-    public function getData()
-    {
-        return json_decode($this->json_data, true);
-    }
-
-    /**
-     * Save the native Yammer API representation of a message for the pending
-     * import. Since they come in in reverse chronological order, we need to
-     * record them all as stubs and then go through from the beginning and
-     * save them as native notices, or we'll lose ordering and threading
-     * data.
-     *
-     * @param integer $orig_id ID of the notice on Yammer
-     * @param array $data the message record fetched out of Yammer API returnd data
-     *
-     * @return Yammer_notice_stub new object for this value
-     */
-
-    static function record($orig_id, $data)
-    {
-        common_debug("Recording Yammer message stub {$orig_id} for pending import...");
-
-        $stub = new Yammer_notice_stub();
-
-        $stub->id = $orig_id;
-        $stub->json_data = json_encode($data);
-        $stub->created = common_sql_now();
-
-        $stub->insert();
-
-        return $stub;
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_state.php b/plugins/YammerImport/classes/Yammer_state.php
deleted file mode 100644 (file)
index b0f0dfa..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import state
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-class Yammer_state extends Managed_DataObject
-{
-    public $__table = 'yammer_state'; // table name
-    public $id;                       // int  primary_key not_null
-    public $state;                    // import state key
-    public $last_error;               // text of last-encountered error, if any
-    public $oauth_token;              // actual oauth token! clear when import is done?
-    public $oauth_secret;             // actual oauth secret! clear when import is done?
-    public $users_page;               // last page of users we've fetched
-    public $groups_page;              // last page of groups we've fetched
-    public $messages_oldest;          // oldest message ID we've fetched
-    public $messages_newest;          // newest message ID we've imported
-    public $created;                  // datetime
-    public $modified;                 // datetime
-
-    /**
-     * Return schema definition to set this table up in onCheckSchema
-     */
-    static function schemaDef()
-    {
-        return array(new ColumnDef('id', 'int', null,
-                                   false, 'PRI'),
-                     new ColumnDef('state', 'text'),
-                     new ColumnDef('last_error', 'text'),
-                     new ColumnDef('oauth_token', 'text'),
-                     new ColumnDef('oauth_secret', 'text'),
-                     new ColumnDef('users_page', 'int'),
-                     new ColumnDef('groups_page', 'int'),
-                     new ColumnDef('messages_oldest', 'bigint'),
-                     new ColumnDef('messages_newest', 'bigint'),
-                     new ColumnDef('created', 'datetime'),
-                     new ColumnDef('modified', 'datetime'));
-    }
-
-    /**
-     * return table definition for DB_DataObject
-     *
-     * DB_DataObject needs to know something about the table to manipulate
-     * instances. This method provides all the DB_DataObject needs to know.
-     *
-     * @return array array of column definitions
-     */
-    function table()
-    {
-        return array('id'              => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
-                     'state'           => DB_DATAOBJECT_STR,
-                     'last_error'      => DB_DATAOBJECT_STR,
-                     'oauth_token'     => DB_DATAOBJECT_STR,
-                     'oauth_secret'    => DB_DATAOBJECT_STR,
-                     'users_page'      => DB_DATAOBJECT_INT,
-                     'groups_page'     => DB_DATAOBJECT_INT,
-                     'messages_oldest' => DB_DATAOBJECT_INT,
-                     'messages_newest' => DB_DATAOBJECT_INT,
-                     'created'         => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
-    }
-
-    /**
-     * return key definitions for DB_DataObject
-     *
-     * DB_DataObject needs to know about keys that the table has, since it
-     * won't appear in StatusNet's own keys list. In most cases, this will
-     * simply reference your keyTypes() function.
-     *
-     * @return array list of key field names
-     */
-    function keys()
-    {
-        return array_keys($this->keyTypes());
-    }
-
-    /**
-     * return key definitions for Memcached_DataObject
-     *
-     * Our caching system uses the same key definitions, but uses a different
-     * method to get them. This key information is used to store and clear
-     * cached data, so be sure to list any key that will be used for static
-     * lookups.
-     *
-     * @return array associative array of key definitions, field name to type:
-     *         'K' for primary key: for compound keys, add an entry for each component;
-     *         'U' for unique keys: compound keys are not well supported here.
-     */
-    function keyTypes()
-    {
-        return array('id' => 'K');
-    }
-
-    /**
-     * Magic formula for non-autoincrementing integer primary keys
-     *
-     * If a table has a single integer column as its primary key, DB_DataObject
-     * assumes that the column is auto-incrementing and makes a sequence table
-     * to do this incrementation. Since we don't need this for our class, we
-     * overload this method and return the magic formula that DB_DataObject needs.
-     *
-     * @return array magic three-false array that stops auto-incrementing.
-     */
-    function sequenceKey()
-    {
-        return array(false, false, false);
-    }
-}
diff --git a/plugins/YammerImport/classes/Yammer_user.php b/plugins/YammerImport/classes/Yammer_user.php
deleted file mode 100644 (file)
index 71a025d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * Data class for remembering Yammer import mappings
- *
- * PHP version 5
- *
- * @category Data
- * @package  StatusNet
- * @author   Brion Vibber <brion@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-class Yammer_user extends Yammer_common
-{
-    public $__table = 'yammer_user'; // table name
-    public $__field = 'user_id';     // field to map to
-    public $user_id;                 // int
-
-    /**
-     * Return schema definition to set this table up in onCheckSchema
-     */
-    static function schemaDef()
-    {
-        return self::doSchemaDef('user_id');
-    }
-
-    /**
-     * Save a mapping between a remote Yammer and local imported user.
-     *
-     * @param integer $orig_id ID of the notice in Yammer
-     * @param integer $user_id ID of the status in StatusNet
-     *
-     * @return Yammer_user new object for this value
-     */
-    static function record($orig_id, $user_id)
-    {
-        return self::doRecord('Yammer_user', 'user_id', $orig_id, $user_id);
-    }
-}
diff --git a/plugins/YammerImport/css/admin.css b/plugins/YammerImport/css/admin.css
deleted file mode 100644 (file)
index 80e0e03..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-.yammer-import {
-    padding: 16px;
-}
-
-.import-step {
-    padding: 8px;
-}
-.import-label {
-    font-weight: bold;
-}
-.import-status {
-    margin-left: 20px;
-    padding-left: 20px;
-}
-
-
-.waiting {
-    color: #888;
-}
-
-.progress {
-    background-color: white;
-    border: solid 1px blue;
-    border-radius: 8px;
-    -moz-border-radius: 8px;
-    -webkit-border-radius: 8px;
-    -opera-border-radius: 8px;
-}
-
-.progress .import-label {
-    color: blue;
-}
-
-.progress .import-status {
-    background-image: url(icon_processing.gif);
-    background-repeat: no-repeat;
-}
-
-.complete {
-    color: black;
-}
-
-.complete .import-status {
-    background-image: url(done.png);
-    background-repeat: no-repeat;
-}
-
-.import-step-done .import-status {
-    /* override */
-    background: none !important;
-}
-
-.magiclink {
-    margin-left: 40px;
-}
-
-fieldset.import-error {
-    margin-top: 12px;
-    margin-bottom: 0px !important;
-    background-color: #fee !important;
-}
diff --git a/plugins/YammerImport/css/done.png b/plugins/YammerImport/css/done.png
deleted file mode 100644 (file)
index 1f3f411..0000000
Binary files a/plugins/YammerImport/css/done.png and /dev/null differ
diff --git a/plugins/YammerImport/css/icon_processing.gif b/plugins/YammerImport/css/icon_processing.gif
deleted file mode 100644 (file)
index d0bce15..0000000
Binary files a/plugins/YammerImport/css/icon_processing.gif and /dev/null differ
diff --git a/plugins/YammerImport/forms/yammerapikey.php b/plugins/YammerImport/forms/yammerapikey.php
deleted file mode 100644 (file)
index 72c14c3..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-
-class YammerApikeyForm extends Form
-{
-    private $runner;
-
-    function __construct($out)
-    {
-        parent::__construct($out);
-        $this->runner = $runner;
-    }
-
-    /**
-     * ID of the form
-     *
-     * @return int ID of the form
-     */
-
-    function id()
-    {
-        return 'yammer-apikey-form';
-    }
-
-
-    /**
-     * class of the form
-     *
-     * @return string of the form class
-     */
-
-    function formClass()
-    {
-        return 'form_yammer_apikey form_settings';
-    }
-
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-
-    function action()
-    {
-        return common_local_url('yammeradminpanel');
-    }
-
-
-    /**
-     * Legend of the Form
-     *
-     * @return void
-     */
-    function formLegend()
-    {
-        // TRANS: Form legend for adding details to connect to a remote Yammer API.
-        $this->out->element('legend', null, _m('Yammer API registration'));
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-
-    function formData()
-    {
-        $this->out->hidden('subaction', 'apikey');
-
-        $this->out->elementStart('fieldset');
-
-        $this->out->elementStart('p');
-        // TRANS: Explanation of what needs to be done to connect to a Yammer network.
-        $this->out->text(_m('Before we can connect to your Yammer network, ' .
-                            'you will need to register the importer as an ' .
-                            'application authorized to pull data on your behalf. ' .
-                            'This registration will work only for your own network. ' .
-                            'Follow this link to register the app at Yammer; ' .
-                            'you will be prompted to log in if necessary:'));
-        $this->out->elementEnd('p');
-
-        $this->out->elementStart('p', array('class' => 'magiclink'));
-        $this->out->element('a',
-            array('href' => 'https://www.yammer.com/client_applications/new',
-                  'target' => '_blank'),
-            // TRANS: Link description to a Yammer application registration form.
-            _m('Open Yammer application registration form'));
-        $this->out->elementEnd('p');
-
-        // TRANS: Instructions.
-        $this->out->element('p', array(), _m('Copy the consumer key and secret you are given into the form below:'));
-
-        $this->out->elementStart('ul', array('class' => 'form_data'));
-        $this->out->elementStart('li');
-        // TRANS: Field label for a Yammer consumer key.
-        $this->out->input('consumer_key', _m('Consumer key:'), common_config('yammer', 'consumer_key'));
-        $this->out->elementEnd('li');
-        $this->out->elementStart('li');
-        // TRANS: Field label for a Yammer consumer secret.
-        $this->out->input('consumer_secret', _m('Consumer secret:'), common_config('yammer', 'consumer_secret'));
-        $this->out->elementEnd('li');
-        $this->out->elementEnd('ul');
-
-        // TRANS: Button text for saving a Yammer API registration.
-        $this->out->submit('submit', _m('BUTTON','Save'),
-                           // TRANS: Button title for saving a Yammer API registration.
-                           'submit', null, _m('Save the entered consumer key and consumer secret.'));
-
-        $this->out->elementEnd('fieldset');
-    }
-
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-
-    function formActions()
-    {
-    }
-}
diff --git a/plugins/YammerImport/forms/yammerauthinit.php b/plugins/YammerImport/forms/yammerauthinit.php
deleted file mode 100644 (file)
index c123bbb..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-class YammerAuthInitForm extends Form
-{
-    /**
-     * ID of the form
-     *
-     * @return int ID of the form
-     */
-
-    function id()
-    {
-        return 'yammer-auth-init-form';
-    }
-
-
-    /**
-     * class of the form
-     *
-     * @return string of the form class
-     */
-
-    function formClass()
-    {
-        return 'form_yammer_auth_init form_settings';
-    }
-
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-
-    function action()
-    {
-        return common_local_url('yammeradminpanel');
-    }
-
-
-    /**
-     * Legend of the Form
-     *
-     * @return void
-     */
-    function formLegend()
-    {
-        // TRANS: Form legend.
-        $this->out->element('legend', null, _m('Connect to Yammer'));
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-
-    function formData()
-    {
-        $this->out->hidden('subaction', 'authinit');
-
-        $this->out->elementStart('fieldset');
-        // TRANS: Button text for starting Yammer authentication.
-        $this->out->submit('submit', _m('BUTTON','Start authentication'),
-                           // TRANS: Button title for starting Yammer authentication.
-                           'submit', null, _m('Request authorization to connect to a Yammer account.'));
-        // TRANS: Button text for starting changing a Yammer API key.
-        $this->out->submit('change-apikey', _m('BUTTON','Change API key'));
-        $this->out->elementEnd('fieldset');
-    }
-
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-
-    function formActions()
-    {
-    }
-}
diff --git a/plugins/YammerImport/forms/yammerauthverify.php b/plugins/YammerImport/forms/yammerauthverify.php
deleted file mode 100644 (file)
index bb82eba..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-class YammerAuthVerifyForm extends Form
-{
-    private $runner;
-
-    function __construct($out, YammerRunner $runner)
-    {
-        parent::__construct($out);
-        $this->runner = $runner;
-    }
-
-    /**
-     * ID of the form
-     *
-     * @return int ID of the form
-     */
-
-    function id()
-    {
-        return 'yammer-auth-verify-form';
-    }
-
-
-    /**
-     * class of the form
-     *
-     * @return string of the form class
-     */
-
-    function formClass()
-    {
-        return 'form_yammer_auth_verify form_settings';
-    }
-
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-
-    function action()
-    {
-        return common_local_url('yammeradminpanel');
-    }
-
-
-    /**
-     * Legend of the Form
-     *
-     * @return void
-     */
-    function formLegend()
-    {
-        // TRANS: Form legend.
-        $this->out->element('legend', null, _m('Connect to Yammer'));
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-
-    function formData()
-    {
-        $this->out->hidden('subaction', 'authverify');
-
-        $this->out->elementStart('fieldset');
-
-        $this->out->elementStart('p');
-        // TRANS: Form instructions.
-        $this->out->text(_m('Follow this link to confirm authorization at Yammer; you will be prompted to log in if necessary:'));
-        $this->out->elementEnd('p');
-
-        // iframe would be nice to avoid leaving -- since they don't seem to have callback url O_O
-        /*
-        $this->out->element('iframe', array('id' => 'yammer-oauth',
-                                            'src' => $this->runner->getAuthUrl()));
-        */
-        // yeah, it ignores the callback_url
-        // soo... crappy link. :(
-
-        $this->out->elementStart('p', array('class' => 'magiclink'));
-        $this->out->element('a',
-            array('href' => $this->runner->getAuthUrl(),
-                  'target' => '_blank'),
-            // TRANS: Link description for a link in an external Yammer system.
-            _m('Open Yammer authentication window'));
-        $this->out->elementEnd('p');
-
-        // TRANS: Form instructions.
-        $this->out->element('p', array(), _m('Copy the verification code you are given below:'));
-
-        $this->out->elementStart('ul', array('class' => 'form_data'));
-        $this->out->elementStart('li');
-        // TRANS: Field label.
-        $this->out->input('verify_token', _m('Verification code:'));
-        $this->out->elementEnd('li');
-        $this->out->elementEnd('ul');
-
-        // TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-        $this->out->submit('submit', _m('BUTTON','Continue'),
-                           // TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-                           'submit', null, _m('Save the verification code and begin import.'));
-        $this->out->elementEnd('fieldset');
-    }
-
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-
-    function formActions()
-    {
-    }
-}
diff --git a/plugins/YammerImport/forms/yammerprogress.php b/plugins/YammerImport/forms/yammerprogress.php
deleted file mode 100644 (file)
index 0b73472..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-
-class YammerProgressForm extends Form
-{
-    /**
-     * ID of the form
-     *
-     * @return string ID of the form
-     */
-    function id()
-    {
-        return 'yammer-progress-form';
-    }
-
-    /**
-     * class of the form
-     *
-     * @return string class of the form
-     */
-    function formClass()
-    {
-        $classes = array('form_settings');
-        $runner = YammerRunner::init();
-        if ($runner->lastError()) {
-            $classes[] = 'import-error';
-        } else if ($runner->state() == 'done') {
-            $classes[] = 'import-done';
-        } else {
-            $classes[] = 'import-progress';
-        }
-        return implode(' ', $classes);
-    }
-
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-    function action()
-    {
-        return common_local_url('yammeradminpanel');
-    }
-
-    /**
-     * Data elements of the form
-     *
-     * @return void
-     */
-    function formData()
-    {
-        $this->out->hidden('subaction', 'progress');
-
-        $runner = YammerRunner::init();
-
-        $error = $runner->lastError();
-        $userCount = $runner->countUsers();
-        $groupCount = $runner->countGroups();
-        $fetchedCount = $runner->countFetchedNotices();
-        $savedCount = $runner->countSavedNotices();
-
-        $labels = array(
-            'init' => array(
-                // TRANS: Field label for a Yammer import initialise step.
-                'label' => _m('Initialize'),
-                // TRANS: "In progress" description.
-                'progress' => _m('No import running'),
-                // TRANS: "Complete" description for initialize state.
-                'complete' => _m('Initiated Yammer server connection...'),
-            ),
-            'requesting-auth' => array(
-                // TRANS: Field label for a Yammer import connect step.
-                'label' => _m('Connect to Yammer'),
-                // TRANS: "In progress" description.
-                'progress' => _m('Awaiting authorization...'),
-                // TRANS: "Complete" description for connect state.
-                'complete' => _m('Connected.'),
-            ),
-            'import-users' => array(
-                // TRANS: Field label for a Yammer user import users step.
-                'label' => _m('Import user accounts'),
-                // TRANS: "In progress" description.
-                // TRANS: %d is the number of users to be imported.
-                'progress' => sprintf(_m('Importing %d user...',
-                                         'Importing %d users...',
-                                         $userCount),
-                                      $userCount),
-                // TRANS: "Complete" description for step.
-                // TRANS: %d is the number of users imported.
-                'complete' => sprintf(_m('Imported %d user.',
-                                         'Imported %d users.',
-                                         $userCount),
-                                      $userCount),
-            ),
-            'import-groups' => array(
-                // TRANS: Field label for a Yammer group import step.
-                'label' => _m('Import user groups'),
-                // TRANS: "In progress" description.
-                // TRANS: %d is the number of groups to be imported.
-                'progress' => sprintf(_m('Importing %d group...',
-                                         'Importing %d groups...',
-                                         $groupCount),
-                                      $groupCount),
-                // TRANS: "Complete" description for step.
-                // TRANS: %d is the number of groups imported.
-                'complete' => sprintf(_m('Imported %d group.',
-                                         'Imported %d groups.',
-                                         $groupCount),
-                                      $groupCount),
-            ),
-            'fetch-messages' => array(
-                // TRANS: Field label for a Yammer import prepare notices step.
-                'label' => _m('Prepare public notices for import'),
-                // TRANS: "In progress" description.
-                // TRANS: %d is the number of notices to be prepared for import.
-                'progress' => sprintf(_m('Preparing %d notice...',
-                                         'Preparing %d notices...',
-                                         $fetchedCount),
-                                      $fetchedCount),
-                // TRANS: "Complete" description for step.
-                // TRANS: %d is the number of notices prepared for import.
-                'complete' => sprintf(_m('Prepared %d notice.',
-                                         'Prepared %d notices.',
-                                         $fetchedCount),
-                                      $fetchedCount),
-            ),
-            'save-messages' => array(
-                // TRANS: Field label for a Yammer import notices step.
-                'label' => _m('Import public notices'),
-                // TRANS: "In progress" description.
-                // TRANS: %d is the number of notices to be imported.
-                'progress' => sprintf(_m('Importing %d notice...',
-                                         'Importing %d notices...',
-                                         $savedCount),
-                                      $savedCount),
-                // TRANS: "Complete" description for step.
-                // TRANS: %d is the number of notices imported.
-                'complete' => sprintf(_m('Imported %d notice.',
-                                         'Imported %d notices.',
-                                         $savedCount),
-                                      $savedCount),
-            ),
-            'done' => array(
-                // TRANS: Field label for a Yammer import done step.
-                'label' => _m('Done'),
-                // TRANS: "In progress" description for done step.
-                'progress' => sprintf(_m('Import is complete!')),
-                // TRANS: "Complete" description for done step.
-                'complete' => sprintf(_m('Import is complete!')),
-            )
-        );
-        $steps = array_keys($labels);
-        $currentStep = array_search($runner->state(), $steps);
-
-        $classes = array('yammer-import');
-        if ($error) {
-            $classes[] = 'yammer-error';
-        } else {
-            $classes[] = 'yammer-running';
-        }
-        $this->out->elementStart('fieldset', array('class' => implode(' ', $classes)));
-        // TRANS: Fieldset legend.
-        $this->out->element('legend', array(), _m('Import status'));
-        foreach ($steps as $step => $state) {
-            if ($state == 'init') {
-                // Don't show 'init', it's boring.
-                continue;
-            }
-            if ($step < $currentStep) {
-                // This step is done
-                $this->progressBar($state,
-                                   'complete',
-                                   $labels[$state]['label'],
-                                   $labels[$state]['complete']);
-            } else if ($step == $currentStep) {
-                // This step is in progress
-                $this->progressBar($state,
-                                   'progress',
-                                   $labels[$state]['label'],
-                                   $labels[$state]['progress'],
-                                   $error);
-            } else {
-                // This step has not yet been done.
-                $this->progressBar($state,
-                                   'waiting',
-                                   $labels[$state]['label'],
-                                   // TRANS: Progress bar status.
-                                   _m('Waiting...'));
-            }
-        }
-        $this->out->elementEnd('fieldset');
-    }
-
-    private function progressBar($state, $class, $label, $status, $error=null)
-    {
-        // @fixme prettify ;)
-        $this->out->elementStart('div', array('class' => "import-step import-step-$state $class"));
-        $this->out->element('div', array('class' => 'import-label'), $label);
-        $this->out->element('div', array('class' => 'import-status'), $status);
-        if ($class == 'progress') {
-            if ($state == 'done') {
-                // TRANS: Button text for resetting the import state.
-                $this->out->submit('abort-import', _m('Reset import state'));
-            } else {
-                if ($error) {
-                    $this->errorBox($error);
-                } else {
-                    // TRANS: Button text for pausing an import.
-                    $this->out->submit('pause-import', _m('Pause import'));
-                }
-            }
-        }
-        $this->out->elementEnd('div');
-    }
-
-    private function errorBox($msg)
-    {
-        // TRANS: Error message. %s are the error details.
-        $errline = sprintf(_m('Encountered error "%s".'), $msg);
-        $this->out->elementStart('fieldset', array('class' => 'import-error'));
-        // TRANS: Fieldset legend for a paused import.
-        $this->out->element('legend', array(), _m('Paused'));
-        $this->out->element('p', array(), $errline);
-        // TRANS: Button text for continuing a paused import.
-        $this->out->submit('continue-import', _m('Continue'));
-        // TRANS: Button text for aborting a paused import.
-        $this->out->submit('abort-import', _m('Abort import'));
-        $this->out->elementEnd('fieldset');
-    }
-}
diff --git a/plugins/YammerImport/lib/snyammerclient.php b/plugins/YammerImport/lib/snyammerclient.php
deleted file mode 100644 (file)
index a322157..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * Basic client class for Yammer's OAuth/JSON API.
- *
- * @package YammerImportPlugin
- * @author Brion Vibber <brion@status.net>
- */
-class SNYammerClient
-{
-    protected $apiBase = "https://www.yammer.com";
-    protected $consumerKey, $consumerSecret;
-    protected $token, $tokenSecret, $verifier;
-
-    public function __construct($consumerKey, $consumerSecret, $token=null, $tokenSecret=null)
-    {
-        $this->consumerKey = $consumerKey;
-        $this->consumerSecret = $consumerSecret;
-        $this->token = $token;
-        $this->tokenSecret = $tokenSecret;
-    }
-
-    /**
-     * Make an HTTP GET request with OAuth headers and return an HTTPResponse
-     * with the returned body and codes.
-     *
-     * @param string $url
-     * @return HTTPResponse
-     *
-     * @throws Exception on low-level network error
-     */
-    protected function httpGet($url)
-    {
-        $headers = array('Authorization: ' . $this->authHeader());
-
-        $client = HTTPClient::start();
-        return $client->get($url, $headers);
-    }
-
-    /**
-     * Make an HTTP GET request with OAuth headers and return the response body
-     * on success.
-     *
-     * @param string $url
-     * @return string
-     *
-     * @throws Exception on low-level network or HTTP error
-     */
-    public function fetchUrl($url)
-    {
-        $response = $this->httpGet($url);
-        if ($response->isOk()) {
-            return $response->getBody();
-        } else {
-            // TRANS: Exeption thrown when an external Yammer system gives an error.
-            // TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-            throw new Exception(sprintf(_m('Yammer API returned HTTP code %1$s: %2$s'),
-                                $response->getStatus(),
-                                $response->getBody()));
-        }
-    }
-
-    /**
-     * Make an HTTP hit with OAuth headers and return the response body on success.
-     *
-     * @param string $path URL chunk for the API method
-     * @param array $params
-     * @return string
-     *
-     * @throws Exception on low-level network or HTTP error
-     */
-    protected function fetchApi($path, $params=array())
-    {
-        $url = $this->apiBase . '/' . $path;
-        if ($params) {
-            $url .= '?' . http_build_query($params, null, '&');
-        }
-        return $this->fetchUrl($url);
-    }
-
-    /**
-     * Hit the main Yammer API point and decode returned JSON data.
-     *
-     * @param string $method
-     * @param array $params
-     * @return array from JSON data
-     *
-     * @throws Exception for HTTP error or bad JSON return
-     */
-    public function api($method, $params=array())
-    {
-        $body = $this->fetchApi("api/v1/$method.json", $params);
-        $data = json_decode($body, true);
-        if ($data === null) {
-            common_log(LOG_ERR, "Invalid JSON response from Yammer API: " . $body);
-            // TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-            throw new Exception(_m('Invalid JSON response from Yammer API.'));
-        }
-        return $data;
-    }
-
-    /**
-     * Build an Authorization header value from the keys we have available.
-     */
-    protected function authHeader()
-    {
-        // token
-        // token_secret
-        $params = array('realm' => '',
-                        'oauth_consumer_key' => $this->consumerKey,
-                        'oauth_signature_method' => 'PLAINTEXT',
-                        'oauth_timestamp' => time(),
-                        'oauth_nonce' => time(),
-                        'oauth_version' => '1.0');
-        if ($this->token) {
-            $params['oauth_token'] = $this->token;
-        }
-        if ($this->tokenSecret) {
-            $params['oauth_signature'] = $this->consumerSecret . '&' . $this->tokenSecret;
-        } else {
-            $params['oauth_signature'] = $this->consumerSecret . '&';
-        }
-        if ($this->verifier) {
-            $params['oauth_verifier'] = $this->verifier;
-        }
-        $parts = array_map(array($this, 'authHeaderChunk'), array_keys($params), array_values($params));
-        return 'OAuth ' . implode(', ', $parts);
-    }
-
-    /**
-     * Encode a key-value pair for use in an authentication header.
-     *
-     * @param string $key
-     * @param string $val
-     * @return string
-     */
-    protected function authHeaderChunk($key, $val)
-    {
-        return urlencode($key) . '="' . urlencode($val) . '"';
-    }
-
-    /**
-     * Ask the Yammer server for a request token, which can be passed on
-     * to authorizeUrl() for the user to start the authentication process.
-     *
-     * @return array of oauth return data; should contain nice things
-     */
-    public function requestToken()
-    {
-        if ($this->token || $this->tokenSecret) {
-            // TRANS: Exeption thrown when a trust relationship has already been established.
-            throw new Exception(_m('Requesting a token, but already set up with a token.'));
-        }
-        $data = $this->fetchApi('oauth/request_token');
-        $arr = array();
-        parse_str($data, $arr);
-        return $arr;
-    }
-
-    /**
-     * Get a final access token from the verifier/PIN code provided to
-     * the user from Yammer's auth pages.
-     *
-     * @return array of oauth return data; should contain nice things
-     */
-    public function accessToken($verifier)
-    {
-        $this->verifier = $verifier;
-        $data = $this->fetchApi('oauth/access_token');
-        $this->verifier = null;
-        $arr = array();
-        parse_str($data, $arr);
-        return $arr;
-    }
-
-    /**
-     * Give the URL to send users to to authorize a new app setup.
-     *
-     * @param string $token as returned from accessToken()
-     * @return string URL
-     */
-    public function authorizeUrl($token)
-    {
-        return $this->apiBase . '/oauth/authorize?oauth_token=' . urlencode($token);
-    }
-
-    /**
-     * High-level API hit: fetch all messages in the network (up to 20 at a time).
-     * Return data is the full JSON array returned, including meta and references
-     * sections.
-     *
-     * The matching messages themselves will be in the 'messages' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function messages($params=array())
-    {
-        return $this->api('messages', $params);
-    }
-
-    /**
-     * High-level API hit: fetch all users in the network (up to 50 at a time).
-     * Return data is the full JSON array returned, listing user items.
-     *
-     * The matching messages themselves will be in the 'users' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array of JSON-sourced user data arrays
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function users($params=array())
-    {
-        return $this->api('users', $params);
-    }
-
-    /**
-     * High-level API hit: fetch all groups in the network (up to 20 at a time).
-     * Return data is the full JSON array returned, listing user items.
-     *
-     * The matching messages themselves will be in the 'users' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array of JSON-sourced user data arrays
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function groups($params=array())
-    {
-        return $this->api('groups', $params);
-    }
-}
diff --git a/plugins/YammerImport/lib/yammerqueuehandler.php b/plugins/YammerImport/lib/yammerqueuehandler.php
deleted file mode 100644 (file)
index 0c4e8ae..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Queue handler for bumping the next chunk of Yammer import activity!
- *
- * @package YammerImportPlugin
- * @author Brion Vibber <brion@status.net>
- */
-class YammerQueueHandler extends QueueHandler
-{
-    function transport()
-    {
-        return 'yammer';
-    }
-
-    function handle($notice)
-    {
-        $runner = YammerRunner::init();
-        if ($runner->hasWork()) {
-            try {
-                if ($runner->iterate()) {
-                    if ($runner->hasWork()) {
-                        // More to do? Shove us back on the queue...
-                        $runner->startBackgroundImport();
-                    }
-                }
-            } catch (Exception $e) {
-                try {
-                    $runner->recordError($e->getMessage());
-                } catch (Exception $f) {
-                    common_log(LOG_ERR, "Error while recording error in Yammer background import: " . $e->getMessage() . " " . $f->getMessage());
-                }
-            }
-        } else {
-            // We're done!
-            common_log(LOG_INFO, "Yammer import has no work to do at this time; discarding.");
-        }
-        return true;
-    }
-}
diff --git a/plugins/YammerImport/lib/yammerrunner.php b/plugins/YammerImport/lib/yammerrunner.php
deleted file mode 100644 (file)
index 0da2fc9..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * State machine for running through Yammer import.
- *
- * @package YammerImportPlugin
- * @author Brion Vibber <brion@status.net>
- */
-class YammerRunner
-{
-    private $state;
-    private $client;
-    private $importer;
-
-    /**
-     * Normalize our singleton state and give us a YammerRunner object to play with!
-     *
-     * @return YammerRunner
-     */
-    public static function init()
-    {
-        $state = Yammer_state::getKV('id', 1);
-        if (!$state) {
-            $state = self::initState();
-        }
-        return new YammerRunner($state);
-    }
-
-    private static function initState()
-    {
-        $state = new Yammer_state();
-        $state->id = 1;
-        $state->state = 'init';
-        $state->created = common_sql_now();
-        $state->modified = common_sql_now();
-        $state->insert();
-        return $state;
-    }
-
-    private function __construct($state)
-    {
-        $this->state = $state;
-
-        $this->client = new SNYammerClient(
-            common_config('yammer', 'consumer_key'),
-            common_config('yammer', 'consumer_secret'),
-            $this->state->oauth_token,
-            $this->state->oauth_secret);
-
-        $this->importer = new YammerImporter($this->client);
-    }
-
-    /**
-     * Check which state we're in
-     *
-     * @return string
-     */
-    public function state()
-    {
-        return $this->state->state;
-    }
-
-    /**
-     * Is the import done, finished, complete, finito?
-     *
-     * @return boolean
-     */
-    public function isDone()
-    {
-        $workStates = array('import-users', 'import-groups', 'fetch-messages', 'save-messages');
-        return ($this->state() == 'done');
-    }
-
-    /**
-     * Check if we have work to do in iterate().
-     *
-     * @return boolean
-     */
-    public function hasWork()
-    {
-        $workStates = array('import-users', 'import-groups', 'fetch-messages', 'save-messages');
-        return in_array($this->state(), $workStates);
-    }
-
-    /**
-     * Blow away any current state!
-     */
-    public function reset()
-    {
-        $this->state->delete();
-        $this->state = self::initState();
-    }
-
-    /**
-     * Start the authentication process! If all goes well, we'll get back a URL.
-     * Have the user visit that URL, log in on Yammer and verify the importer's
-     * permissions. They'll get back a verification code, which needs to be passed
-     * on to saveAuthToken().
-     *
-     * @return string URL
-     */
-    public function requestAuth()
-    {
-        if ($this->state->state != 'init') {
-            // TRANS: Server exception thrown if a Yammer authentication request is already present.
-            throw new ServerException(_m('Cannot request Yammer auth; already there!'));
-        }
-
-        $data = $this->client->requestToken();
-
-        $old = clone($this->state);
-        $this->state->state = 'requesting-auth';
-        $this->state->oauth_token = $data['oauth_token'];
-        $this->state->oauth_secret = $data['oauth_token_secret'];
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-
-        return $this->getAuthUrl();
-    }
-
-    /**
-     * When already in requesting-auth state, grab the URL to send the user to
-     * to complete OAuth setup.
-     *
-     * @return string URL
-     */
-    function getAuthUrl()
-    {
-        if ($this->state() == 'requesting-auth') {
-            return $this->client->authorizeUrl($this->state->oauth_token);
-        } else {
-            // TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-            throw new ServerException(_m('Cannot get Yammer auth URL when not in requesting-auth state!'));
-        }
-    }
-
-    /**
-     * Now that the user's given us this verification code from Yammer, we can
-     * request a final OAuth token/secret pair which we can use to access the
-     * API.
-     *
-     * After success here, we'll be ready to move on and run through iterate()
-     * until the import is complete.
-     *
-     * @param string $verifier
-     * @return boolean success
-     */
-    public function saveAuthToken($verifier)
-    {
-        if ($this->state->state != 'requesting-auth') {
-            // TRANS: Server exception thrown if a Yammer authentication token could not be saved in a certain import state.
-            // TRANS: %s is the import state in the which the error occurred.
-            throw new ServerException(_m('Cannot save auth token in Yammer import state %s.',$this->state->state));
-        }
-
-        $data = $this->client->accessToken($verifier);
-
-        $old = clone($this->state);
-        $this->state->state = 'import-users';
-        $this->state->oauth_token = $data['oauth_token'];
-        $this->state->oauth_secret = $data['oauth_token_secret'];
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-
-        return true;
-    }
-
-    /**
-     * Once authentication is complete, we need to call iterate() a bunch of times
-     * until state() returns 'done'.
-     *
-     * @return boolean success
-     */
-    public function iterate()
-    {
-        switch($this->state())
-        {
-            case 'init':
-            case 'requesting-auth':
-                // Neither of these should reach our background state!
-                common_log(LOG_ERR, "Non-background YammerImport state '$state->state' during import run!");
-                return false;
-            case 'import-users':
-                return $this->iterateUsers();
-            case 'import-groups':
-                return $this->iterateGroups();
-            case 'fetch-messages':
-                return $this->iterateFetchMessages();
-            case 'save-messages':
-                return $this->iterateSaveMessages();
-            default:
-                common_log(LOG_ERR, "Invalid YammerImport state '$state->state' during import run!");
-                return false;
-        }
-    }
-
-    /**
-     * Trundle through one 'page' return of up to 50 user accounts retrieved
-     * from the Yammer API, importing them as we go.
-     *
-     * When we run out of users, move on to groups.
-     *
-     * @return boolean success
-     */
-    private function iterateUsers()
-    {
-        $old = clone($this->state);
-
-        $page = intval($this->state->users_page) + 1;
-        $data = $this->client->users(array('page' => $page));
-
-        if (count($data) == 0) {
-            common_log(LOG_INFO, "Finished importing Yammer users; moving on to groups.");
-            $this->state->state = 'import-groups';
-        } else {
-            foreach ($data as $item) {
-                $user = $this->importer->importUser($item);
-                common_log(LOG_INFO, "Imported Yammer user " . $item['id'] . " as $user->nickname ($user->id)");
-            }
-            $this->state->users_page = $page;
-        }
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-        return true;
-    }
-
-    /**
-     * Trundle through one 'page' return of up to 20 user groups retrieved
-     * from the Yammer API, importing them as we go.
-     *
-     * When we run out of groups, move on to messages.
-     *
-     * @return boolean success
-     */
-    private function iterateGroups()
-    {
-        $old = clone($this->state);
-
-        $page = intval($this->state->groups_page) + 1;
-        $data = $this->client->groups(array('page' => $page));
-
-        if (count($data) == 0) {
-            common_log(LOG_INFO, "Finished importing Yammer groups; moving on to messages.");
-            $this->state->state = 'fetch-messages';
-        } else {
-            foreach ($data as $item) {
-                $group = $this->importer->importGroup($item);
-                common_log(LOG_INFO, "Imported Yammer group " . $item['id'] . " as $group->nickname ($group->id)");
-            }
-            $this->state->groups_page = $page;
-        }
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-        return true;
-    }
-
-    /**
-     * Trundle through one 'page' return of up to 20 public messages retrieved
-     * from the Yammer API, saving them to our stub table for future import in
-     * correct chronological order.
-     *
-     * When we run out of messages to fetch, move on to saving the messages.
-     *
-     * @return boolean success
-     */
-    private function iterateFetchMessages()
-    {
-        $old = clone($this->state);
-
-        $oldest = intval($this->state->messages_oldest);
-        if ($oldest) {
-            $params = array('older_than' => $oldest);
-        } else {
-            $params = array();
-        }
-        $data = $this->client->messages($params);
-        $messages = $data['messages'];
-
-        if (count($messages) == 0) {
-            common_log(LOG_INFO, "Finished fetching Yammer messages; moving on to save messages.");
-            $this->state->state = 'save-messages';
-        } else {
-            foreach ($messages as $item) {
-                $stub = Yammer_notice_stub::getKV($item['id']);
-                if (!$stub) {
-                    Yammer_notice_stub::record($item['id'], $item);
-                }
-                $oldest = $item['id'];
-            }
-            $this->state->messages_oldest = $oldest;
-        }
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-        return true;
-    }
-
-    private function iterateSaveMessages()
-    {
-        $old = clone($this->state);
-
-        $newest = intval($this->state->messages_newest);
-
-        $stub = new Yammer_notice_stub();
-        if ($newest) {
-            $stub->whereAdd('id > ' . $newest);
-        }
-        $stub->limit(20);
-        $stub->orderBy('id');
-        $stub->find();
-
-        if ($stub->N == 0) {
-            common_log(LOG_INFO, "Finished saving Yammer messages; import complete!");
-            $this->state->state = 'done';
-        } else {
-            while ($stub->fetch()) {
-                $item = $stub->getData();
-                $notice = $this->importer->importNotice($item);
-                common_log(LOG_INFO, "Imported Yammer notice " . $item['id'] . " as $notice->id");
-                $newest = $item['id'];
-            }
-            $this->state->messages_newest = $newest;
-        }
-        $this->state->modified = common_sql_now();
-        $this->state->update($old);
-        return true;
-    }
-
-    /**
-     * Count the number of Yammer users we've mapped into our system!
-     *
-     * @return int
-     */
-    public function countUsers()
-    {
-        $map = new Yammer_user();
-        return $map->count();
-    }
-
-    /**
-     * Count the number of Yammer groups we've mapped into our system!
-     *
-     * @return int
-     */
-    public function countGroups()
-    {
-        $map = new Yammer_group();
-        return $map->count();
-    }
-
-    /**
-     * Count the number of Yammer notices we've pulled down for pending import...
-     *
-     * @return int
-     */
-    public function countFetchedNotices()
-    {
-        $map = new Yammer_notice_stub();
-        return $map->count();
-    }
-
-    /**
-     * Count the number of Yammer notices we've mapped into our system!
-     *
-     * @return int
-     */
-    public function countSavedNotices()
-    {
-        $map = new Yammer_notice();
-        return $map->count();
-    }
-
-    /**
-     * Start running import work in the background queues...
-     */
-    public function startBackgroundImport()
-    {
-        $qm = QueueManager::get();
-        $qm->enqueue('YammerImport', 'yammer');
-    }
-
-    /**
-     * Record an error condition from a background run, which we should
-     * display in progress state for the admin.
-     *
-     * @param string $msg
-     */
-    public function recordError($msg)
-    {
-        // HACK HACK HACK
-        try {
-            $temp = new Yammer_state();
-            $temp->query('ROLLBACK');
-        } catch (Exception $e) {
-            common_log(LOG_ERR, 'Exception while confirming rollback while recording error: ' . $e->getMessage());
-        }
-        $old = clone($this->state);
-        $this->state->last_error = $msg;
-        $this->state->update($old);
-    }
-
-    /**
-     * Clear the error state.
-     */
-    public function clearError()
-    {
-        $this->recordError('');
-    }
-
-    /**
-     * Get the last recorded background error message, if any.
-     *
-     * @return string
-     */
-    public function lastError()
-    {
-        return $this->state->last_error;
-    }
-}
diff --git a/plugins/YammerImport/locale/YammerImport.pot b/plugins/YammerImport/locale/YammerImport.pot
deleted file mode 100644 (file)
index 1263ae1..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-#: actions/yammerauth.php:70 lib/yammerauthinitform.php:49
-#: lib/yammerprogressform.php:72 lib/yammerauthverifyform.php:57
-msgid "Connect to Yammer"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-#: actions/yammeradminpanel.php:46
-msgid "Yammer Import"
-msgstr ""
-
-#. TRANS: Instructions for Yammer import administration panel.
-#: actions/yammeradminpanel.php:57
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-#: actions/yammeradminpanel.php:105
-msgid "Paused from admin panel."
-msgstr ""
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-#: actions/yammeradminpanel.php:118
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-#: actions/yammeradminpanel.php:140
-msgid "Yammer import"
-msgstr ""
-
-#. TRANS: Menu item for Yammer import.
-#: YammerImportPlugin.php:99
-msgctxt "MENU"
-msgid "Yammer"
-msgstr ""
-
-#. TRANS: Menu item title for Yammer import.
-#: YammerImportPlugin.php:101
-msgid "Yammer import module."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-#: lib/yammerimporter.php:184
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-#: lib/yammerimporter.php:232
-msgid "Expertise:"
-msgstr ""
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-#: lib/yammerimporter.php:268
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-#: lib/yammerimporter.php:309
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#: lib/yammerimporter.php:438
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#: lib/yammerimporter.php:448
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr ""
-
-#. TRANS: Button text for starting Yammer authentication.
-#: lib/yammerauthinitform.php:64
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr ""
-
-#. TRANS: Button title for starting Yammer authentication.
-#: lib/yammerauthinitform.php:66
-msgid "Request authorization to connect to a Yammer account."
-msgstr ""
-
-#. TRANS: Button text for starting changing a Yammer API key.
-#: lib/yammerauthinitform.php:68
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr ""
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-#: lib/yammerrunner.php:127
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-#: lib/yammerrunner.php:154
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#: lib/sn_yammerclient.php:74
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-#: lib/sn_yammerclient.php:114
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-#: lib/sn_yammerclient.php:169
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-#: lib/yammerprogressform.php:64
-msgid "Initialize"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#: lib/yammerprogressform.php:66
-msgid "No import running"
-msgstr ""
-
-#. TRANS: "Complete" description for initialize state.
-#: lib/yammerprogressform.php:68
-msgid "Initiated Yammer server connection..."
-msgstr ""
-
-#. TRANS: "In progress" description.
-#: lib/yammerprogressform.php:74
-msgid "Awaiting authorization..."
-msgstr ""
-
-#. TRANS: "Complete" description for connect state.
-#: lib/yammerprogressform.php:76
-msgid "Connected."
-msgstr ""
-
-#. TRANS: Field label for a Yammer user import users step.
-#: lib/yammerprogressform.php:80
-msgid "Import user accounts"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#: lib/yammerprogressform.php:83
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#: lib/yammerprogressform.php:89
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: Field label for a Yammer group import step.
-#: lib/yammerprogressform.php:96
-msgid "Import user groups"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#: lib/yammerprogressform.php:99
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#: lib/yammerprogressform.php:105
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-#: lib/yammerprogressform.php:112
-msgid "Prepare public notices for import"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#: lib/yammerprogressform.php:115
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#: lib/yammerprogressform.php:121
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: Field label for a Yammer import notices step.
-#: lib/yammerprogressform.php:128
-msgid "Import public notices"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#: lib/yammerprogressform.php:131
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#: lib/yammerprogressform.php:137
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] ""
-msgstr[1] ""
-
-#. TRANS: Field label for a Yammer import done step.
-#: lib/yammerprogressform.php:144
-msgid "Done"
-msgstr ""
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-#: lib/yammerprogressform.php:146 lib/yammerprogressform.php:148
-msgid "Import is complete!"
-msgstr ""
-
-#. TRANS: Fieldset legend.
-#: lib/yammerprogressform.php:162
-msgid "Import status"
-msgstr ""
-
-#. TRANS: Progress bar status.
-#: lib/yammerprogressform.php:187
-msgid "Waiting..."
-msgstr ""
-
-#. TRANS: Button text for resetting the import state.
-#: lib/yammerprogressform.php:202
-msgid "Reset import state"
-msgstr ""
-
-#. TRANS: Button text for pausing an import.
-#: lib/yammerprogressform.php:208
-msgid "Pause import"
-msgstr ""
-
-#. TRANS: Error message. %s are the error details.
-#: lib/yammerprogressform.php:218
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr ""
-
-#. TRANS: Fieldset legend for a paused import.
-#: lib/yammerprogressform.php:221
-msgid "Paused"
-msgstr ""
-
-#. TRANS: Button text for continuing a paused import.
-#: lib/yammerprogressform.php:224
-msgid "Continue"
-msgstr ""
-
-#. TRANS: Button text for aborting a paused import.
-#: lib/yammerprogressform.php:226
-msgid "Abort import"
-msgstr ""
-
-#. TRANS: Form instructions.
-#: lib/yammerauthverifyform.php:74
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-#: lib/yammerauthverifyform.php:90
-msgid "Open Yammer authentication window"
-msgstr ""
-
-#. TRANS: Form instructions.
-#: lib/yammerauthverifyform.php:94
-msgid "Copy the verification code you are given below:"
-msgstr ""
-
-#. TRANS: Field label.
-#: lib/yammerauthverifyform.php:99
-msgid "Verification code:"
-msgstr ""
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-#: lib/yammerauthverifyform.php:104
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr ""
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-#: lib/yammerauthverifyform.php:106
-msgid "Save the verification code and begin import."
-msgstr ""
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-#: lib/yammerapikeyform.php:57
-msgid "Yammer API registration"
-msgstr ""
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-#: lib/yammerapikeyform.php:74
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-#: lib/yammerapikeyform.php:87
-msgid "Open Yammer application registration form"
-msgstr ""
-
-#. TRANS: Instructions.
-#: lib/yammerapikeyform.php:91
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-#: lib/yammerapikeyform.php:96
-msgid "Consumer key:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer secret.
-#: lib/yammerapikeyform.php:100
-msgid "Consumer secret:"
-msgstr ""
-
-#. TRANS: Button text for saving a Yammer API registration.
-#: lib/yammerapikeyform.php:105
-msgctxt "BUTTON"
-msgid "Save"
-msgstr ""
-
-#. TRANS: Button title for saving a Yammer API registration.
-#: lib/yammerapikeyform.php:107
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
diff --git a/plugins/YammerImport/locale/br/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/br/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 8486315..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-# Translation of StatusNet - YammerImport to Breton (brezhoneg)
-# Exported from translatewiki.net
-#
-# Author: Fulup
-# Author: Y-M D
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Language-Team: Breton <https://translatewiki.net/wiki/Portal:br>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Kevreañ da Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Enporzh Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Emeur c'hoazh oc'h arnodiñ an ostilh enporzhiañ Yammer-mañ. Diglok eo "
-"c'hoazh evit lodennoù zo. N'eo ket bet treuzkaset ar c'houmanantoù implijer "
-"hag an enrolladnenoù er strolladoù evit c'hoazh ; Kemeret e kont e c'hallfe "
-"bezañ en amzer da zont evit an enporzhiadennoù sevenet gant ar verourien "
-"aotreet eus tu YAMMER."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Ehanet adalek ar banell verañ."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Enporzh Yammer"
-
-#. TRANS: Menu item for Yammer import.
-#, fuzzy
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-#, fuzzy
-msgid "Yammer import module."
-msgstr "Enporzh Yammer"
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Prizacha :"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Direizh eo URL an avatar %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Dibosupl eo adtapout an avatar adalek %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Digeriñ prenestr emzisklêriañ Yammer"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr ""
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr ""
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Deraouekaat"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Enporzhiadenn ebet o treiñ"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Loc'het ar gevreadenn d'ar servijer Yammer"
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "O c'hortoz an aotre..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Kevreet."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Enporzhiañ ar c'hontoù implijer"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Oc'h enporzhiañ %d implijer..."
-msgstr[1] "Oc'h enporzhiañ %d implijer..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Enporzhiet %d implijer."
-msgstr[1] "Enporzhiet %d implijer."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Enporzhiañ strolladoù implijer"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Oc'h enporzhiañ %d strollad..."
-msgstr[1] "Oc'h enporzhiañ %d strollad..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Enporzhiet %d strollad..."
-msgstr[1] "Enporzhiet %d strollad..."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "O prientiñ enporzh ar c'hemennoù foran"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "O prientiñ %d kemenn..."
-msgstr[1] "O prientiñ %d kemenn..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "Prientet %d kemenn."
-msgstr[1] "Prientet %d kemenn."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Enporzh kemennoù foran"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Oc'h enporzhiañ %d kemenn..."
-msgstr[1] "Oc'h enporzhiañ %d kemenn..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Enporzhiet %d kemenn."
-msgstr[1] "Enporzhiet %d kemenn."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Graet"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Enporzh kaset da benn vat !"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Stad an enporzh"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "O c'hortoz..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Adderaouekaat stad an enporzh"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Ober un tamm ehan gant an enporzh"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "C'hoarvezet eo ar fazi \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Ehanet"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Kenderc'hel"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Nullañ an enporzh"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Heuliañ al liamm-mañ da gadarnaat an aotre war Yammer ; mar bez ret e vo "
-"goulennet ouzhoc'h kevreañ :"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Digeriñ prenestr emzisklêriañ Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Eilit a-is ar c'hod gwiriañ bet roet deoc'h :"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Kod gwiriekaat :"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Kenderc'hel"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgid "Save the verification code and begin import."
-msgstr "Enrollañ ar c'hod ha kregiñ da enporzhiañ"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Enrolladenn an API Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Kent gallout kevreañ ouzh ho rouedad Yammer e rankit enrollañ an arload "
-"enporzhiañ evel un arload aotreet da zastum roadennoù en hoc'h anv. Ne "
-"dalvezo an enrolladenn-se nemet evit ho rouedad deoc'h. Heuilhit al liamm-"
-"mañ evit enrollañ an arload war Yammer ; mar bez ret e vo goulennet ouzhoc'h "
-"kevreañ."
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Digeriñ furmskrid enrollañ Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Eilit er furmskrid a-is an alc'hwez hag ar sekred implijer bet roet deoc'h :"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Alc'hwez implijer :"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Sekred an implijer :"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Enrollañ"
-
-#. TRANS: Button title for saving a Yammer API registration.
-#, fuzzy
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Enrollañ an alc'hwezioù implijer-mañ"
diff --git a/plugins/YammerImport/locale/de/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/de/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index de0e123..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-# Translation of StatusNet - YammerImport to German (Deutsch)
-# Exported from translatewiki.net
-#
-# Author: George Animal
-# Author: Giftpflanze
-# Author: Habi
-# Author: PtM
-# Author: Tiin
-# Author: Welathêja
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Verbinden mit Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Yammer-Import"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Dieses Yammer-Importwerkzeug ist immer noch im Testen inbegriffen, und ist "
-"in manchen Bereichen fertiggestellt. Zur Zeit werden Benutzerabonnements und "
-"Gruppenmitgliedschaften werden nicht übertragen; zukünftig mag dies für "
-"Importe unterstützt werden, die von beglaubigten Administratoren auf Seiten "
-"von Yammer getätigt werden."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Angehalten über das Admin-Panel."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "Ungültiger POST"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Yammer-Import"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Yammer-Import-Modul"
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr "Falscher Itemtyp zu Yammers Benutzerimport-Verarbeitung gesendet."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Expertise:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr "Falscher Itemtyp zu Yammers Gruppenimport-Verarbeitung gesendet."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr "Falscher Itemtyp zu Yammers Nachrichtenimport-Verarbeitung gesendet."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Ungültige Avatar-URL %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Kann Avatar nicht von %s holen."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Starte Authentifizierung"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Beantrage Authentifizierung zur Verbindung mit einem Yammer-Account."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Ändere API-Schlüssel"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr "Kann Yammer-Auth. nicht beantragen; bereits vorhanden!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Kann Yammers Auth.-URL nicht erhalten, wenn nicht im Auth.-Anforderungs-"
-"Modus!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "Yammer-API gab HTTP-Code %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Ungültige JSON-Antwort vom Yammer-API."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Ein Token anfordert, aber bereits mit einem Token ausgestattet."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Initialisieren"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Zur Zeit kein Import"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Yammer-Server-Verbindung initiiert …"
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Authentifizierung wird abgewartet …"
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Verbunden."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Benutzerkonten importieren"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Importiere %d Benutzer …"
-msgstr[1] "Importiere %d Benutzer …"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Importierte %d Benutzer."
-msgstr[1] "Importierte %d Benutzer."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importiere Benutzergruppen"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Importiere %d Gruppe …"
-msgstr[1] "Importiere %d Gruppen …"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Importierte %d Gruppe."
-msgstr[1] "Importierte %d Gruppen."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Bereite öffentliche Nachrichten für Import vor"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Bereite %d Nachricht vor …"
-msgstr[1] "Bereite %d Nachrichten vor …"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d Nachricht vorbereitet."
-msgstr[1] "%d Nachrichten vorbereitet."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Importiere öffentliche Nachrichten"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Importiere %d Nachricht …"
-msgstr[1] "Importiere %d Nachrichten …"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Importierte %d Nachricht."
-msgstr[1] "Importierte %d Nachrichten."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Erledigt"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Import abgeschlossen!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Import-Status"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Warten..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Import-Status zurücksetzen"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Import pausieren"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Fehler aufgetreten: \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Angehalten"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Fortfahren"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Import abbrechen"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Folge diesem Link, um die Authentifikation bei Yammer zu bestätigen; "
-"nötigenfalls wirst du aufgefordert, dich anzumelden:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Öffne Yammer-Authentifizierungsfenster"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Kopiere den untenstehenden Bestätigungscode"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Bestätigunts-Code:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Fortfahren"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Speichere Bestätigungs-Code und starte Import."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Yammer-API-Registrierung"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Bevor wir zu Ihrem Yammer-Netzwerk verbinden können, müssen Sie das Import-"
-"Skript als eine Anwendung autorisieren, die Daten in Ihrem Namen beziehen "
-"darf. Diese Autorisation funktioniert nur für Ihr eigenes Netzwerk. Folgen "
-"Sie diesem Link, um diese Applikation bei Yammer zu registrieren; Sie werden "
-"gegebenenfalls aufgefordert, sich anzumelden:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Öffne Yammer-Anwendungsregistrierungsformular"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Kopiere den Verbraucherschlüssel und das Geheimnis, beide untenstehend:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Verbraucherschlüssel:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Verbrauchergeheimnis:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Speichern"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Speichere eingegebenen Verbraucherschlüssel und Verbrauchergeheimnis."
diff --git a/plugins/YammerImport/locale/es/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/es/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 50b21a4..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-# Translation of StatusNet - YammerImport to Spanish (español)
-# Exported from translatewiki.net
-#
-# Author: Armando-Martin
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Conectarse a Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Importación Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Esta herramienta de importación de Yammer aún está sometida a pruebas y está "
-"incompleta en algunas áreas. Actualmente no se transfieren las suscripciones "
-"de usuario y la pertenencia a grupos; en el futuro esto puede estar "
-"soportado para las importaciones realizadas por los administradores "
-"verificados del lado de Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "En pausa desde el panel de administración."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "POST no válido"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Importación Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Módulo de importación Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para el proceso de importación de "
-"usuarios de Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Experiencia:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para el proceso de importación de grupos "
-"de Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para el proceso de importación de "
-"mensajes de Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "La dirección URL del avatar, %s, es incorrecta."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "No se pudo recuperar el avatar desde %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Iniciar la autenticación"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Solicitar autorización para conectarse a una cuenta de Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Cambiar la clave de la API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr "No puede solicitar la autenticación Yammer; ¡ya lo hizo!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"¡No puede obtener la dirección URL de autenticación Yammer cuando no está en "
-"modo de solicitud de autenticación!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "La API de Yammer ha devuelto el código HTTP %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Respuesta JSON inválida desde la API de Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Solicitando una clave (token), pero ya está configurado con una clave."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Inicializar"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "No hay ninguna importación en curso"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Conexión al servidor de Yammer iniciada..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "A la espera de autorización..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Conectado."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Importar cuentas de usuario"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Importando %d usuario..."
-msgstr[1] "Importando %d usuarios..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "%d usuario importado."
-msgstr[1] "%d usuarios importados."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importar grupos de usuario"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Importando %d grupo..."
-msgstr[1] "Importando %d grupos..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "%d grupo importado."
-msgstr[1] "%d grupos importados."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Preparar notas públicas para importación"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Preparando %d nota..."
-msgstr[1] "Preparando %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d nota preparada."
-msgstr[1] "%d notas preparadas."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Importar notas públicas"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Importando %d nota..."
-msgstr[1] "Importando %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "%d nota importada."
-msgstr[1] "%d notas importadas."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Hecho"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "¡La importación se ha completado!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Estado de importación"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Esperando..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Reiniciar el estado de la importación"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Pausar la importación"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Se ha encontrado el error \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "En pausa"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Anular la importación"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Siga este enlace para confirmar la autorización en Yammer; se le pedirá que "
-"inicie sesión si es necesario:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Abrir la ventana de autenticación Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Copie a continuación el código de verificación que ha obtenido:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Código de verificación:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Guardar el código de verificación y empezar a importar."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Registro de la API de Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Antes de que nos podemos conectar a su red de Yammer, necesita registrar el "
-"importador con una solicitud de autorización para que podamos extraer datos "
-"en su nombre. Este registro funcionará sólo en su propia red. Siga este "
-"enlace para registrar la aplicación en Yammer; se le pedirá que inicie "
-"sesión si es necesario:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Abrir el formulario de registro de la aplicación de Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Copie  en el siguiente formulario la clave de consumidor y la frase secreta "
-"que recibió:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Clave de consumidor:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Frase secreta del consumidor:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Guardar"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
-"Guarde la clave de consumidor introducida y la frase secreta del consumidor."
diff --git a/plugins/YammerImport/locale/eu/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/eu/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 8955645..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-# Translation of StatusNet - YammerImport to Basque (euskara)
-# Exported from translatewiki.net
-#
-# Author: Artsuaga
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Yammerrera konektatu"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Yammer Inportazioa"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr ""
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "POST baliogabea"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Yammer inportazioa"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr ""
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Yammer inportazio modulua."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr ""
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "%s abatar URL okerra."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Ezin izan da abatarra lortu %s helbidetik."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Hasi egiaztatzea"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr ""
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Aldatu API gakoa"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr ""
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Inportazioa abiatu gabe"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr ""
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Baimenaren zai..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Konektaturik."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Inportatu erabiltzaileen kontuak"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Erabiltzaile %d inportatzen..."
-msgstr[1] "%d erabiltzaile inportatzen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Erabiltzaile %d inportatu da."
-msgstr[1] "%d erabiltzaile inportatu dira."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Inportatu erabiltzaileen taldeak"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Talde %d inportatzen..."
-msgstr[1] "%d talde inportatzen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Talde %d inportatu da."
-msgstr[1] "%d talde inportatu dira."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Ohar %d prestatzen..."
-msgstr[1] "%d ohar prestatzen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "Ohar %d prestatua."
-msgstr[1] "%d ohar prestatuak."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Inportatu ohar publikoak"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Ohar %d inportatzen..."
-msgstr[1] "%d ohar inportatzen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Ohar %d inportatua."
-msgstr[1] "%d ohar inportatuak."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr ""
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Inportazioa bete da!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Inportazio egoera"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr ""
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Reseteatu inportazio egoera"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Pausatu inportazioa"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "\"%s\" akatsa aurkitu da."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr ""
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Jarraitu"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Utzi inportazioa"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr ""
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr ""
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Baieztapen-kodea:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Jarraitu"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr ""
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Yammer API erregistroa"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr ""
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Kontsumitzaile gakoa:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Kontsumitzaile sekretua:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gorde"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Gorde kontsumitzaile gako eta sekretua."
diff --git a/plugins/YammerImport/locale/fr/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/fr/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 01304fc..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-# Translation of StatusNet - YammerImport to French (français)
-# Exported from translatewiki.net
-#
-# Author: Gomoko
-# Author: Hashar
-# Author: Od1n
-# Author: Peter17
-# Author: Tititou36
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Connexion à Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Import Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Cet outil d’import Yammer est encore en phase de test et est en partie "
-"incomplet. Les abonnements d’utilisateurs et les appartenances aux groupes "
-"ne sont actuellement pas transférés ; ceci pourrait être pris en charge dans "
-"le futur pour les imports réalisés par les administrateurs autorisés du côté "
-"de Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Mis en pause depuis le panneau d’administration"
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "POST invalide."
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Import Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Module d'import Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Mauvais type d'élément envoyé au processus d'import d'utilisateur de Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Expertise :"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"Mauvais type d'élément envoyé au processus d'import de groupe de Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"Mauvais type d'élément envoyé au processus d'import de message de Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "URL d’avatar invalide : %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Impossible de récupérer l’avatar depuis « %s »."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Démarrer l’identification"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Demander l’autorisation de se connecter à un compte Yammer"
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Changer la clé de l’API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr "Impossible de demander une authentification Yammer; déjà présent!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Impossible d'obtenir une URL d'authentification Yammer en n'étant pas dans "
-"un état demandant une authentification!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "L'API Yammer a renvoyé le code HTTP %1$s : %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Réponse JSON non valide en provenance de l'API Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Jeton demandé, mais un jeton a déjà été accordé."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Initialiser"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Aucun import en cours d’exécution"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Connexion au serveur Yammer initiée..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "En attente d’autorisation..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Connecté."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Importer des comptes utilisateur"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Import de %d utilisateur..."
-msgstr[1] "Import de %d utilisateurs..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "%d utilisateur importé."
-msgstr[1] "%d utilisateurs importés."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importer des groupes utilisateur"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Import de %d groupe..."
-msgstr[1] "Import de %d groupes..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "%d groupe importé."
-msgstr[1] "%d groupes importés."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Préparation de l’import d’avis publiques"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Préparation de %d avis..."
-msgstr[1] "Préparation de %d avis..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d avis prépara."
-msgstr[1] "%d avis préparés."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Import d’avis publiques"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Import de %d avis..."
-msgstr[1] "Import de %d avis..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "%d avis importé."
-msgstr[1] "%d avis importés."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Fait"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "L’import est terminé !"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "État de l’import"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Attente..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Réinitialiser l’état de l’import"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Mettre l’import en pause"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "L’erreur « %s » est survenue"
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "En pause"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Continuer"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Abandonner l’import"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Suivez ce lien pour confirmer l’autorisation sur Yammer ; il vous sera "
-"demandé de vous identifier si nécessaire :"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Ouvrir la fenêtre d’identification Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Copiez ci-dessous le code de vérification qui vous est donné :"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Code de vérification :"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Continuer"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Enregistrer le code de vérification et commencer l’import"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Enregistrement de l’API Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Avant de pouvoir nous connecter à votre réseau Yammer, vous devez "
-"enregistrer l’application d’import comme étant autorisée à recueillir des "
-"données en votre nom. Cet enregistrement ne sera valable que pour votre "
-"propre réseau. Suivez ce lien pour enregistrer l’application sur Yammer ; si "
-"cela est nécessaire, il vous sera demandé de vous identifier :"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Ouvrir le formulaire d’enregistrement de l’application Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Copiez dans le formulaire ci-dessous la clé et le secret utilisateur qui "
-"vous sont donnés :"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Clé de l'utilisateur :"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Secret de l'utilisateur :"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Enregistrer"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
-"Enregistrer les clés d'utilisateur entrées et le mot de passe de "
-"l'utilisateur."
diff --git a/plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 8557aba..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-# Translation of StatusNet - YammerImport to Galician (galego)
-# Exported from translatewiki.net
-#
-# Author: Toliño
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Conectar ao Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Importación Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Esta ferramenta de importación do Yammer está aínda baixo probas e está "
-"incompleta nalgúns aspectos. Arestora, non se transfiren as subscricións de "
-"usuarios e as pertenzas aos grupos; no futuro, isto pode estar soportado "
-"para as importacións feitas por administradores verificados no Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "En pausa desde o panel de administración."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "POST inválido."
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Importación Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Módulo de importación Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para o proceso de importación de "
-"usuarios do Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Experiencia:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para o proceso de importación de grupos "
-"do Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"Tipo de elemento incorrecto enviado para o proceso de importación de "
-"mensaxes do Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "O enderezo URL do avatar, %s, é incorrecto."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Non se puido recuperar o avatar desde %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Comezar a autenticación"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Solicitar autorización para conectarse a unha conta do Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Cambiar a clave da API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-"Non se pode solicitar a autenticación do Yammer; a solicitude xa está "
-"presente!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Non se pode obter a autenticación do Yammer sen estar no modo de solicitude "
-"de autenticación!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "A API do Yammer devolveu o código HTTP %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Resposta JSON inválida desde a API do Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Solicitando un pase, pero o pase xa está configurado."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Iniciar"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Non hai ningunha importación en curso"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Conexión ao servidor do Yammer iniciada..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Agardando a autorización..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Conectado."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Importar contas de usuario"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Importando %d usuario..."
-msgstr[1] "Importando %d usuarios..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "%d usuario importado."
-msgstr[1] "%d usuarios importados."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importar grupos de usuario"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Importando %d grupo..."
-msgstr[1] "Importando %d grupos..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "%d grupo importado."
-msgstr[1] "%d grupos importados."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Preparar a importación de notas públicas"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Preparando %d nota..."
-msgstr[1] "Preparando %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d nota preparada."
-msgstr[1] "%d notas preparadas."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Importar notas públicas"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Importando %d nota..."
-msgstr[1] "Importando %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "%d nota importada."
-msgstr[1] "%d notas importadas."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Feito"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Completouse a importación!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Estado da importación"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Agarde..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Reiniciar o estado da importación"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Pausar a importación"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Atopouse o erro \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "En pausa"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Abortar a importación"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Siga esta ligazón para confirmar a autorización no Yammer; pedirémoslle que "
-"inicie sesión se fose necesario:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Abrir a ventá de importación do Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Copie o código de verificación que recibiu a continuación:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Código de verificación:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Gardar o código de verificación e comezar a importación."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Rexistro da API do Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Antes de que poidamos conectar coa rede do Yammer, terá que rexistrar a "
-"aplicación de importación co fin de autorizala para que recolla datos no seu "
-"nome. Este rexistro funcionará unicamente na súa propia rede. Siga esta "
-"ligazón para rexistrar a aplicación no Yammer; pedirémoslle que inicie "
-"sesión se fose necesario:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Abrir o formulario de rexistro da aplicación do Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Copie a clave e a frase de consumidor secreta que recibiu a continuación:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Clave do consumidor:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Pregunta secreta do consumidor:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gardar"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Gardar a clave e a frase de consumidor secreta inseridas."
diff --git a/plugins/YammerImport/locale/ia/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/ia/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 8873358..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-# Translation of StatusNet - YammerImport to Interlingua (interlingua)
-# Exported from translatewiki.net
-#
-# Author: McDutchie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:33+0000\n"
-"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Connecter a Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Importation de Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Iste instrumento de importation de Yammer es ancora in phase de test, e es "
-"incomplete in alcun areas. Actualmente le subscriptiones de usator e "
-"membratos de gruppos non es transferite; in le futuro isto pote esser "
-"supportate pro importationes facite per administratores verificate al latere "
-"de Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Pausate ab le pannello admin."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "POST invalide"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Importation de Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Modulo de importation de Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr "Mal typo de elemento inviate pro le importation de usatores de Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Expertise:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr "Mal typo de elemento inviate pro le importation de gruppos de Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr "Mal typo de elemento inviate pro le importation de messages de Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "URL de avatar %s invalide."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Incapace de obtener avatar ab %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Comenciar authentication"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Requestar autorisation pro connecter a un conto Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Cambiar clave API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-"Impossibile requestar un authentication de Yammer; le requesta es jam "
-"presente!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Impossibile obtener un URL de authentication Yammer si non in modo de "
-"requestar authentication!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "Le API de Yammer retornava le codice HTTP %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Responsa JSON invalide ab le API de Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Un indicio es requestate, ma un indicio ha jam essite installate."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Initialisar"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Nulle importation in curso"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Connexion al servitor Yammer initiate..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Attende autorisation..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Connectite."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Importar contos de usator"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Importa %d usator..."
-msgstr[1] "Importa %d usatores..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "%d usator importate."
-msgstr[1] "%d usatores importate."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importar gruppos de usatores"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Importa %d gruppo..."
-msgstr[1] "Importa %d gruppos..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "%d gruppo importate."
-msgstr[1] "%d gruppos importate."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Preparar notas public pro importation"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Prepara %d nota..."
-msgstr[1] "Prepara %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d nota preparate."
-msgstr[1] "%d notas preparate."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Importar notas public"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Importa %d nota..."
-msgstr[1] "Importa %d notas..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "%d nota importate."
-msgstr[1] "%d notas importate."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Finite"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Le importation es complete!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Stato de importation"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Attende..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Reinitialisar stato de importation"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Pausar importation"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Incontrava error \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Pausate"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Abortar importation"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Seque iste ligamine pro confirmar autorisation a Yammer; tu essera demandate "
-"de aperir session si necessari:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Aperir fenestra de authentication a Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Copia hic infra le codice de verification que tu recipe:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Codice de verification:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Continuar"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Salveguardar le codice de verification e comenciar le importation."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Registration in API de Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Ante que nos pote connecter a tu rete Yammer, tu debe registrar le "
-"importator como application autorisate a colliger datos in tu nomine. Iste "
-"registration functionara solmente pro tu proprie rete. Seque iste ligamine "
-"pro registrar le application a Yammer; tu essera demandate de aperir session "
-"si necessari:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Aperir formulario de registration del application Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Copia le clave e secreto de consumitor que tu recipe in le formulario hic "
-"infra:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Clave de consumitor:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Secreto de consumitor:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Salveguardar"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Salveguardar le clave de consumitor e secreto de consumitor entrate."
diff --git a/plugins/YammerImport/locale/mk/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/mk/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 6235fcd..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-# Translation of StatusNet - YammerImport to Macedonian (македонски)
-# Exported from translatewiki.net
-#
-# Author: Bjankuloski06
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:34+0000\n"
-"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Поврзување со Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Увоз од Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Оваа алатка за увоз од Yammer сè уште е во фаза на испробување, а наместа е "
-"недработена. Моментално не можат да се префрлаат кориснички претплати и "
-"членства во групи. Ваквите префрлања може да се поддржани во иднина, и тие "
-"би ги вршеле овластени администратори на Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Паузирано од администраторската табла."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "Неважечки POST"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Увоз од Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Модул за увоз од Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr "На увозот на корисник од Yammer му е испратен погрешен тип на ставка."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Стручност:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"На групниот увоз на корисници од Yammer му е испратен погрешен тип на ставка."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr "На увозот на пораки од Yammer му е испратен погрешен тип на ставка."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Неважечка URL-адреса на аватарот: %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Не можев да го преземам аватарот од %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Започни заверка"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Побарај овластување за поврзување со сметката на Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Смени API-клуч"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr "Не можам да побарам заверка од Yammer. Веќе сте таму!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Не можам да ја добијам URL-адрсата за заверка на Yammer кога не сте во таков "
-"режим!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "API на Yammer го даде HTTP-кодот %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Неважечки JSON-одговор од API на Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Жетонот е веќе поставен."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Започни"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Увозот не е во тек"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Започнав со поврзувањето со опслужувачот на Yammer..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Чекам на овластување..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Поврзано."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Увези кориснички сметки"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Увезувам %d корисник..."
-msgstr[1] "Увезувам %d корисници..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Увезов %d корисник."
-msgstr[1] "Увезов %d корисници."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Увези кориснички групи"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Увезувам %d група..."
-msgstr[1] "Увезувам %d групи..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Увезов %d група."
-msgstr[1] "Увезов %d групи."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Подготви јавни известувања за увоз"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Подготвувам %d известување..."
-msgstr[1] "Подготвувам %d известувања..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "Подготвив %d известување."
-msgstr[1] "Подготвив %d известувања."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Увези јавни известувања"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Увезувам %d известување..."
-msgstr[1] "Увезувам %d известувања..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Увезов %d известување..."
-msgstr[1] "Увезов %d известувања..."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Готово"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Увозот заврши!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Увези статус"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Чекам..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Врати основна состојба на увозот"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Паузирај увоз"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Наидов на грешка „%s“."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Паузирано"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Продолжи"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Прекини увоз"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Проследете ја врскава за да го потврдите овластувањето на страницата на "
-"Yammer. Ако е потребно, ќе Ви биде побарано да се најавите:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Отвори прозорец за потврда на Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Ископирајте го долунаведениот потврден код:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Потврден код:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Продолжи"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Зачувај го потврдниот код и почни со увоз."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Регистрација на API за Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Пред да можеме да Ве поврземе на Вашата Yammer-мрежа, ќе треба да го "
-"регистрирате увозникот како програм овластен за преземање на податоци во "
-"Ваше име. Оваа регистрација ќе работи само за Вашата мрежа. Проследете ја "
-"врската за да го регистрирате програмот на Yammer. Ако е потребно, ќе Ви "
-"биде побарано да се најавите:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Отвори образец за регистрација на програм на Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Ископирајте ги потрошувачкиот клуч и тајната што се наведени во образецот "
-"подолу:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Потрошувачки клуч:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Потрошувачка тајна:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Зачувај"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Зачувај го внесениот потрошувачки клуч и потрошувачка тајна."
diff --git a/plugins/YammerImport/locale/ms/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/ms/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 675d700..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-# Translation of StatusNet - YammerImport to Malay (Bahasa Melayu)
-# Exported from translatewiki.net
-#
-# Author: Anakmalaysia
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-19 13:18+0000\n"
-"PO-Revision-Date: 2011-06-19 13:18:15+0000\n"
-"Language-Team: Malay <http://translatewiki.net/wiki/Portal:ms>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:16+0000\n"
-"X-Generator: MediaWiki 1.19alpha (r90375); Translate extension (2011-06-02)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: ms\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Import dari Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Berhenti dari panel pentadbir."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Import dari Yammer"
-
-#. TRANS: Menu item for Yammer import.
-#, fuzzy
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-#, fuzzy
-msgid "Yammer import module."
-msgstr "Import dari Yammer"
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Kepakaran:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "URL avatar %s tidak sah."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Avatar tidak dapat diambil dari %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Mulakan pengesahan"
-
-#. TRANS: Button title for starting Yammer authentication.
-#, fuzzy
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Minta kebenaran untuk bersambung dengan akaun Yammer"
-
-#. TRANS: Button text for starting changing a Yammer API key.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Tukar kunci API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Mulakan"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Proses import tidak berjalan"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Sambungan pelayan Yammer dimulakan..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Menunggu kebenaran..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Bersambung."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Import akaun pengguna"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Siap"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Proses import selesai!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr ""
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Menunggu..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr ""
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Hentikan import"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr ""
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Terhenti"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Sambung"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr ""
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr ""
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr ""
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr ""
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Sambung"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr ""
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr ""
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr ""
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Kunci pengguna:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Rahsia pengguna:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Simpan"
-
-#. TRANS: Button title for saving a Yammer API registration.
-#, fuzzy
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Simpan kunci pengguna ini"
diff --git a/plugins/YammerImport/locale/nl/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/nl/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index d6c0401..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-# Translation of StatusNet - YammerImport to Dutch (Nederlands)
-# Exported from translatewiki.net
-#
-# Author: SPQRobin
-# Author: Siebrand
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:34+0000\n"
-"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Verbinden met Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Yammerimport"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Dit Yammerimportprogramma wordt nog getest en bepaalde onderdelen zijn nog "
-"niet afgerond. Op dit moment worden gebruikersabonnementen en "
-"groepslidmaatschappen nog niet overgenomen. In de toekomst is dit wellicht "
-"mogelijk voor imports die door bevestigde beheerders in Yammer worden "
-"uitgevoerd."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Gepauzeerd vanuit het beheerpaneel."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "Ongeldige POST."
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Yammerimport"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "De importmodule voor Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Er is een incorrect type verzonden naar de verwerking van de "
-"gebruikersimport van Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Expertise:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"Er is een incorrect type verzonden naar de verwerking van de groepenimport "
-"van Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"Er is een incorrect type verzonden naar de verwerking van de berichtenimport "
-"van Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Ongeldige avatar-URL %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Het was niet mogelijk om de avatar op te halen van %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Authenticatie starten"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Autorisatie verzoeken om te verbinden met een Yammergebruiker."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "API-sleutel wijzigen"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-"Het authenticatieverzoek voor Yammer kan niet uitgevoerd worden. Het bestaat "
-"al!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Het is niet mogelijk een authenticatie-URL voor Yammer te verkrijgen als de "
-"workflowstatus niet \"requesting-auth\" is!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "De Yammer-API heeft de HTTP-code %1$s teruggegeven: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Er is een ongeldig JSON-antwoord van de Yammer-API ontvangen."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Er is om een token gevraagd, maar er is al een token beschikbaar."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Initialiseren"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Er loopt geen import"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Er is verbinding gemaakt met de Yammerserver..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Wachten op autorisatie..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Verbonden."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Gebruikers importeren"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Bezig met het importeren van %d gebruiker..."
-msgstr[1] "Bezig met het importeren van %d gebruikers..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "%d gebruiker geïmporteerd."
-msgstr[1] "%d gebruikers geïmporteerd."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Gebruikersgroepen importeren"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Bezig met het importeren van %d gebruikersgroep..."
-msgstr[1] "Bezig met het importeren van %d gebruikersgroepen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "%d gebruikersgroep geïmporteerd."
-msgstr[1] "%d gebruikersgroepen geïmporteerd."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Publieke mededelingen voorbereiden op import"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Bezig met het voorbereiden van %d mededeling..."
-msgstr[1] "Bezig met het voorbereiden van %d mededelingen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "%d mededeling voorbereid."
-msgstr[1] "%d mededelingen voorbereid."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Publieke mededelingen importeren"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Bezig met het importeren van %d mededeling..."
-msgstr[1] "Bezig met het importeren van %d mededelingen..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "%d mededeling geïmporteerd."
-msgstr[1] "%d mededelingen geïmporteerd."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Afgerond"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Het importeren is voltooid!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Importstatus"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Even geduld alstublieft..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Importstatus herstellen"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Import pauzeren"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Er is een fout opgetreden: \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Gepauzeerd"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Doorgaan"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Import afbreken"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Volg deze verwijzing om de autorisatie bij Yammer te bevestigen. Als u moet "
-"aanmelden wordt daarom gevraagd:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Authenticatievenster voor Yammer openen"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Kopieer de verificatiecode die u hebt gekregen hieronder:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Verificatiecode:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Doorgaan"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "De verificatiecode opslaan en beginnen met importeren."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "API-registratie voor Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Voordat er verbinding gemaakt kan worden met uw Yammernetwerk, moet u het "
-"importprogramma eerst registreren als een applicatie die namens u gegevens "
-"mag ophalen. Deze registratie geldt alleen voor uw eigen netwerk. Volg de "
-"onderstaande verwijzing om de applicatie bij Yammer te registreren. Als het "
-"nodig is om aan te melden, wordt u dat gevraagd:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Applicatieregistratieformulier voor Yammer openen"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Kopieer de gebruikerssleutel en het gebruikersgeheim dat u hebt gekregen in "
-"het formulier hieronder:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Gebruikerssleutel:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Gebruikersgeheim:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Opslaan"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "De ingevoerde gebruikerssleutel en het gebruikersgeheim opslaan."
diff --git a/plugins/YammerImport/locale/pl/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/pl/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 0f39c47..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-# Translation of StatusNet - YammerImport to Polish (polski)
-# Exported from translatewiki.net
-#
-# Author: BeginaFelicysym
-# Author: Woytecr
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:34+0000\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
-"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Połączenie z Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Import Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"To narzędzie importu Yammer nadal przechodzi badania i w niektórych "
-"dziedzinach jest niekompletne. Obecnie są nie przenoszone subskrypcje "
-"użytkownika i członkostwa w grupach; w przyszłości może to być obsługiwane w "
-"importach wykonywanych przez administratorów zweryfikowanych po stronie "
-"Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Wstrzymane z panelu administratora."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "Nieprawidłowy POST"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Import Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Moduł importu Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Niewłaściwy typ elementu wysłany do importu przetwarzanego użytkownika "
-"Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Ekspertyza:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"Niewłaściwy typ elementu wysłany do importu przetwarzanej grupy Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"Niewłaściwy typ elementu wysłany do importu przetwarzanej wiadomości Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Nieprawidłowy adres URL awataru %s ."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Nie udało się pobrać awatara z  %s ."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Początek uwierzytelnienia"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Żądanie autoryzacji wejścia na konto Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Zmiana klucza API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Inicjowanie"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr ""
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Zanicjowano połączenie z serwerem Yammer..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Oczekiwanie na autoryzacjię..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Połączono."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Importuj konta użytkowników"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Importuj grupy użytkowników"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Gotowe"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Import zakończony!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Stan importu"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Oczekiwanie..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Zresetuj stan importu"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Wstrzymaj import"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Wystąpił błąd \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Wstrzymano"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Kontynuuj"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Przerwij import"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr ""
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr ""
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Kod weryfikacyjny:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Kontynuuj"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Zapisz kod weryfikacji i rozpocznij import."
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "API rejestracji Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Otwórz formularz rejestracji aplikacji Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr ""
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Zapisz"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
diff --git a/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index 6dba551..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-# Translation of StatusNet - YammerImport to Russian (Русский)
-# Exported from translatewiki.net
-#
-# Author: Eleferen
-# Author: MaxSem
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-19 13:18+0000\n"
-"PO-Revision-Date: 2011-06-19 13:18:15+0000\n"
-"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-06-05 21:52:16+0000\n"
-"X-Generator: MediaWiki 1.19alpha (r90375); Translate extension (2011-06-02)\n"
-"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr ""
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr ""
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr ""
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr ""
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr ""
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr ""
-
-#. TRANS: Button text for starting Yammer authentication.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Начало проверки подлинности"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr ""
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr ""
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Инициализация"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Импорт не запущен"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr ""
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Ожидание авторизации…"
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Подсоединено."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Импорт учётных записей пользователей"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Импорт %d пользователя…"
-msgstr[1] "Импорт %d пользователей…"
-msgstr[2] "Импорт %d пользователей…"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Импортирован %d пользователь."
-msgstr[1] "Импортировано %d пользователя."
-msgstr[2] "Импортировано %d пользователей."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Импорт групп пользователей"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, fuzzy, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Импорт %d группы…"
-msgstr[1] "Импорт %d группы…"
-msgstr[2] "Импорт %d группы…"
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr ""
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Готово"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Импорт завершён!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Статус процесса импорта"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Ожидание…"
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr ""
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Приостановить импорт"
-
-#. TRANS: Error message. %s are the error details.
-#, fuzzy, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Обнаружена ошибка «%s»"
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Приостановлено"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Продолжить"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Прервать импорт"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr ""
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr ""
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Код подтверждения:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Продолжить"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgid "Save the verification code and begin import."
-msgstr "Сохранить код и начать импорт"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr ""
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr ""
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr ""
-
-#. TRANS: Button text for saving a Yammer API registration.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Сохранить"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
diff --git a/plugins/YammerImport/locale/tl/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/tl/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index d2fd499..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-# Translation of StatusNet - YammerImport to Tagalog (Tagalog)
-# Exported from translatewiki.net
-#
-# Author: AnakngAraw
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:34+0000\n"
-"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tl\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Umugnay sa Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Pang-angkat ng Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Ang kasangkapang pang-angkat na ito ng Yammer ay sumasailalim pa rin ng "
-"pagsubok, at hindi buo sa loob ng ilang mga lugar.  Pangkasalukuyang hindi "
-"naililipat ang mga pagpapasipi ng tagagamit at pagsapi sa mga pangkat; "
-"maaaring tangkilikin ito sa hinaharap para sa mga pag-aangkat na ginagawa ng "
-"napatunayang mga tagapangasiwa na nasa gawi ng Yammer."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Pansamantalang itinigil mula sa inampalan ng tagapangasiwa."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr "Hindi katanggap-tanggap na PASKIL"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Pang-angkat ng Yammer"
-
-#. TRANS: Menu item for Yammer import.
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-msgid "Yammer import module."
-msgstr "Modulo na pang-angkat ng Yammer."
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-"Maling uri ng bagay ang naipadala sa pagpuproseso ng pag-angkat ng tagagamit "
-"ng Yammer."
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Kadalubhasaan:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-"aling uri ng bagay ang naipadala sa pagpuproseso ng pag-angkat ng pangkat ng "
-"Yammer."
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-"aling uri ng bagay ang naipadala sa pagpuproseso ng pag-angkat ng mensahe ng "
-"Yammer."
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Hindi katanggap-tanggap na URL ng abatar ang %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Hindi nagawang damputin ang huwaran mula sa %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Simulan ang pagpapatunay"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Humiling ng pahintulot upang makakabit sa isang akawnt ng Yammer."
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Baguhin ang susi ng API"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr "Hindi mahihiling ang awtorisasyon ng Yammer; naroon na!"
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-"Hindi makukuha ang URL ng awtorisasyon ng Yammer kapag hindi nasa katayuan "
-"ng paghiling ng awtorisasyon!"
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr "Ibinalik ng API ng Yammer ang kodigo ng HTTP na %1$s: %2$s"
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr "Hindi katanggap-tanggap na tugong JSON mula sa API ng Yammer."
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr "Humihiling ng isang panghalip, ngunit nakatakda na sa isang panghalip."
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Magpasimula"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Walang tumatakbong pag-aangkat"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Pinasimulan ang pag-ugnay sa tagapaghain ng Yammer..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Naghihintay ng kapahintulutan..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Naiugnay na."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Angkatin ang mga akawnt ng tagagamit"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Inaangkat ang tagagamit ng %d... "
-msgstr[1] "Inaangkat ang mga tagagamit ng %d..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Naangkat na tagagamit ng %d."
-msgstr[1] "Naangkat na mga tagagamit ng %d."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Angkatin ang mga pangkat ng tagagamit"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Inaangkat ang pangkat ng %d... "
-msgstr[1] "Inaangkat ang mga pangkat ng %d..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Naangkat na pangkat ng %d."
-msgstr[1] "Naangkat na mga pangkat ng %d."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Ihanda ang aangkating mga pabatid na pangmadla"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Inihahanda ang pabatid na %d..."
-msgstr[1] "Inihahanda ang mga pabatid na %d..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "Naihanda na ang pabatid na %d..."
-msgstr[1] "Naihanda na ang mga pabatid na %d..."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Angkatin ang mga pabatid na pangmadla"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Inaangkat ang pabatid na %d... "
-msgstr[1] "Inaangkat ang mga pabatid na %d..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Naangkat na ang pabatid na %d"
-msgstr[1] "Naangkat na ang mga pabatid na %d."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Nagawa na"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Buo na ang pag-aangkat!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Katayuan ng pag-aangkat"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Naghihintay..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Muling itakda ang katayuan ng pag-aangkat"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Pansamantalang itigil ang pag-aangkat"
-
-#. TRANS: Error message. %s are the error details.
-#, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Nakatagpo ng kamaliang \"%s\"."
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Pansamantalang inihinto"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Magpatuloy"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Pigilin ang pag-angkat"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Sundan ang kawing na ito upang tiyakin ang pahintulot sa Yammer; ikay ay "
-"uudyuking lumagdang papasok kung kailangan:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Buksan ang bintana ng pagpapatotoo ng Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Kopyahin ang kodigo ng pagpapatotoo na ibinigay sa iyo sa ibaba:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Kodigo ng pagpapatotoo:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Magpatuloy"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-msgid "Save the verification code and begin import."
-msgstr "Sagipin ang kodigo ng pagpapatunay at simulan ang pag-aangkat"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Pagpapatala sa API ng Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Bago kami maka-ugnay sa lambatan mo ng Yammer, kakailanganin mong ipatala "
-"ang pang-angkat bilang isang aplikasyon na may pahintulot na humila ng dato "
-"sa ilalim ng iyong pangalan.  Ang pagpapatalang ito ay gagana lamang para sa "
-"iyong lambatan.  Sundan ang kawing na ito upang ipatala ang aplikasyon sa "
-"Yammer; uudyukin kang lumagdang papasok kung kinakailangan:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Buksan ang pormularyo ng pagpapatala ng aplikasyon ng Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Kopyahin ang susi at lihim ng tagaubos na ibinigay sa iyo papasok sa "
-"pormularyong nasa ibaba:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Susi ng tagaubos:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Lihim ng tagaubos:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Sagipin"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Sagipin ang ipinasok na susi ng tagaubos at lihim ng mang-uubos."
diff --git a/plugins/YammerImport/locale/tr/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/tr/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index dabe979..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-# Translation of StatusNet - YammerImport to Turkish (Türkçe)
-# Exported from translatewiki.net
-#
-# Author: Maidis
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:34+0000\n"
-"Language-Team: Turkish <https://translatewiki.net/wiki/Portal:tr>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "Yammer'a Bağlan"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Yammer İçeri Aktar"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Yönetim panelinden durduruldu."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Yammer içeri aktarma"
-
-#. TRANS: Menu item for Yammer import.
-#, fuzzy
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-#, fuzzy
-msgid "Yammer import module."
-msgstr "Yammer içeri aktarma"
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr ""
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Geçersiz kullanıcı resmi bağlantısı %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr ""
-
-#. TRANS: Button text for starting Yammer authentication.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Kimlik doğrulamaya başla"
-
-#. TRANS: Button title for starting Yammer authentication.
-msgid "Request authorization to connect to a Yammer account."
-msgstr ""
-
-#. TRANS: Button text for starting changing a Yammer API key.
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr ""
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "İlk kullanıma hazırla"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Çalışan içeri aktarma yok"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Başlatılan Yammer sunucu bağlantısı..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Yetkilendirme bekleniyor..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Bağlandı."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Kullanıcı hesaplarını içeri aktar"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Kullanıcı gruplarını içeri aktar"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Genel durum mesajlarını içeri aktarmak için hazırla"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Genel durum mesajlarını içeri aktar"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] ""
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] ""
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Tamamlandı"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "İçeri aktarma tamamlandı!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "İçeri aktarma durumu"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Bekleniyor..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "İçeri aktarma durumunu sıfırla"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "İçeri aktarmayı duraklat"
-
-#. TRANS: Error message. %s are the error details.
-#, fuzzy, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Karşılaşılan hata \"%s\""
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Duraklatıldı"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Devam et"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "İçeri aktarmayı iptal et"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Open Yammer kimlik doğrulama penceresi"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Aşağıda verilen doğrulama kodunu kopyalayın:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Doğrulama kodu:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Devam et"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgid "Save the verification code and begin import."
-msgstr "Kodu kaydet ve içeri aktarmaya başla"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr ""
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr ""
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr ""
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr ""
-
-#. TRANS: Button text for saving a Yammer API registration.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Kaydet"
-
-#. TRANS: Button title for saving a Yammer API registration.
-msgid "Save the entered consumer key and consumer secret."
-msgstr ""
diff --git a/plugins/YammerImport/locale/uk/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/uk/LC_MESSAGES/YammerImport.po
deleted file mode 100644 (file)
index e90407e..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-# Translation of StatusNet - YammerImport to Ukrainian (українська)
-# Exported from translatewiki.net
-#
-# Author: Boogie
-# --
-# This file is distributed under the same license as the StatusNet package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: StatusNet - YammerImport\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-30 11:07+0000\n"
-"PO-Revision-Date: 2012-06-30 11:10:35+0000\n"
-"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2011-12-03 13:51:41+0000\n"
-"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
-"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
-"X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
-"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
-"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-
-#. TRANS: Page title for Yammer administration panel.
-#. TRANS: Form legend.
-#. TRANS: Field label for a Yammer import connect step.
-#. TRANS: Form legend.
-msgid "Connect to Yammer"
-msgstr "З’єднання з Yammer"
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer Import"
-msgstr "Імпорт з Yammer"
-
-#. TRANS: Instructions for Yammer import administration panel.
-msgid ""
-"This Yammer import tool is still undergoing testing, and is incomplete in "
-"some areas. Currently user subscriptions and group memberships are not "
-"transferred; in the future this may be supported for imports done by "
-"verified administrators on the Yammer side."
-msgstr ""
-"Цей додаток імпорту даних з Yammer все ще проходить випробовування і працює "
-"десь неповною мірою. На даний момент неможливо імпортувати дані щодо "
-"підписок та спільнот користувача; втім, можливо у майбутньому, адміністрація "
-"сайту Yammer піде нам на зустріч і тоді роботу над цим додатком буде "
-"завершено."
-
-#. TRANS: Error message about an import job being paused from the admin panel.
-msgid "Paused from admin panel."
-msgstr "Призупинено з адміністраторської панелі."
-
-#. TRANS: Client exception thrown when encountering an unhandled sub action.
-msgid "Invalid POST"
-msgstr ""
-
-#. TRANS: Page title for Yammer import administration panel.
-msgid "Yammer import"
-msgstr "Імпорт з Yammer"
-
-#. TRANS: Menu item for Yammer import.
-#, fuzzy
-msgctxt "MENU"
-msgid "Yammer"
-msgstr "Yammer"
-
-#. TRANS: Menu item title for Yammer import.
-#, fuzzy
-msgid "Yammer import module."
-msgstr "Імпорт з Yammer"
-
-#. TRANS: Exception thrown when a non-user item type is used, but expected.
-msgid "Wrong item type sent to Yammer user import processing."
-msgstr ""
-
-#. TRANS: Used as a prefix for the Yammer expertise field contents.
-msgid "Expertise:"
-msgstr "Експертиза:"
-
-#. TRANS: Exception thrown when a non-group item type is used, but expected.
-msgid "Wrong item type sent to Yammer group import processing."
-msgstr ""
-
-#. TRANS: Exception thrown when a non-message item type is used, but expected.
-msgid "Wrong item type sent to Yammer message import processing."
-msgstr ""
-
-#. TRANS: Server exception thrown when an avatar URL is invalid.
-#. TRANS: %s is the invalid avatar URL.
-#, php-format
-msgid "Invalid avatar URL %s."
-msgstr "Невірна URL-адреса аватари %s."
-
-#. TRANS: Server exception thrown when an avatar could not be fetched.
-#. TRANS: %s is the failed avatar URL.
-#, php-format
-msgid "Unable to fetch avatar from %s."
-msgstr "Неможливо завантажити аватару з %s."
-
-#. TRANS: Button text for starting Yammer authentication.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Start authentication"
-msgstr "Початок автентифікації"
-
-#. TRANS: Button title for starting Yammer authentication.
-#, fuzzy
-msgid "Request authorization to connect to a Yammer account."
-msgstr "Запит дозволу на підключення до Yammer"
-
-#. TRANS: Button text for starting changing a Yammer API key.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Change API key"
-msgstr "Змінити API-ключ"
-
-#. TRANS: Server exception thrown if a Yammer authentication request is already present.
-msgid "Cannot request Yammer auth; already there!"
-msgstr ""
-
-#. TRANS: Server exception thrown when requesting a Yammer authentication URL while in an incorrect state.
-msgid "Cannot get Yammer auth URL when not in requesting-auth state!"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system gives an error.
-#. TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-#, php-format
-msgid "Yammer API returned HTTP code %1$s: %2$s"
-msgstr ""
-
-#. TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-msgid "Invalid JSON response from Yammer API."
-msgstr ""
-
-#. TRANS: Exeption thrown when a trust relationship has already been established.
-msgid "Requesting a token, but already set up with a token."
-msgstr ""
-
-#. TRANS: Field label for a Yammer import initialise step.
-msgid "Initialize"
-msgstr "Ініціалізація"
-
-#. TRANS: "In progress" description.
-msgid "No import running"
-msgstr "Імпорт не працює"
-
-#. TRANS: "Complete" description for initialize state.
-msgid "Initiated Yammer server connection..."
-msgstr "Розпочато з’єднання з сервером Yammer..."
-
-#. TRANS: "In progress" description.
-msgid "Awaiting authorization..."
-msgstr "Чекаємо дозволу..."
-
-#. TRANS: "Complete" description for connect state.
-msgid "Connected."
-msgstr "Під’єднано."
-
-#. TRANS: Field label for a Yammer user import users step.
-msgid "Import user accounts"
-msgstr "Імпорт облікових записів користувачів"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of users to be imported.
-#, php-format
-msgid "Importing %d user..."
-msgid_plural "Importing %d users..."
-msgstr[0] "Імпорт %d користувача..."
-msgstr[1] "Імпорт %d користувачів..."
-msgstr[2] "Імпорт %d користувачів..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of users imported.
-#, php-format
-msgid "Imported %d user."
-msgid_plural "Imported %d users."
-msgstr[0] "Імпортовано %d користувача."
-msgstr[1] "Імпортовано %d користувачів."
-msgstr[2] "Імпортовано %d користувачів."
-
-#. TRANS: Field label for a Yammer group import step.
-msgid "Import user groups"
-msgstr "Імпорт спільнот"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of groups to be imported.
-#, php-format
-msgid "Importing %d group..."
-msgid_plural "Importing %d groups..."
-msgstr[0] "Імпорт %d спільноти..."
-msgstr[1] "Імпорт %d спільнот..."
-msgstr[2] "Імпорт %d спільнот..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of groups imported.
-#, php-format
-msgid "Imported %d group."
-msgid_plural "Imported %d groups."
-msgstr[0] "Імпортовано %d спільноту."
-msgstr[1] "Імпортовано %d спільнот."
-msgstr[2] "Імпортовано %d спільнот."
-
-#. TRANS: Field label for a Yammer import prepare notices step.
-msgid "Prepare public notices for import"
-msgstr "Підготовка до імпорту стрічки дописів"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be prepared for import.
-#, php-format
-msgid "Preparing %d notice..."
-msgid_plural "Preparing %d notices..."
-msgstr[0] "Підготовка %d допису..."
-msgstr[1] "Підготовка %d дописів..."
-msgstr[2] "Підготовка %d дописів..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices prepared for import.
-#, php-format
-msgid "Prepared %d notice."
-msgid_plural "Prepared %d notices."
-msgstr[0] "Готовий %d допис."
-msgstr[1] "Готово %d дописів."
-msgstr[2] "Готово %d дописів."
-
-#. TRANS: Field label for a Yammer import notices step.
-msgid "Import public notices"
-msgstr "Імпорт стрічки дописів"
-
-#. TRANS: "In progress" description.
-#. TRANS: %d is the number of notices to be imported.
-#, php-format
-msgid "Importing %d notice..."
-msgid_plural "Importing %d notices..."
-msgstr[0] "Імпорт %d допису..."
-msgstr[1] "Імпорт %d дописів..."
-msgstr[2] "Імпорт %d дописів..."
-
-#. TRANS: "Complete" description for step.
-#. TRANS: %d is the number of notices imported.
-#, php-format
-msgid "Imported %d notice."
-msgid_plural "Imported %d notices."
-msgstr[0] "Імпортовано %d допис."
-msgstr[1] "Імпортовано %d дописів."
-msgstr[2] "Імпортовано %d дописів."
-
-#. TRANS: Field label for a Yammer import done step.
-msgid "Done"
-msgstr "Виконано"
-
-#. TRANS: "In progress" description for done step.
-#. TRANS: "Complete" description for done step.
-msgid "Import is complete!"
-msgstr "Імпорт завершено!"
-
-#. TRANS: Fieldset legend.
-msgid "Import status"
-msgstr "Статус процесу імпорту"
-
-#. TRANS: Progress bar status.
-msgid "Waiting..."
-msgstr "Очікування..."
-
-#. TRANS: Button text for resetting the import state.
-msgid "Reset import state"
-msgstr "Перезапустити імпорт"
-
-#. TRANS: Button text for pausing an import.
-msgid "Pause import"
-msgstr "Призупинити імпорт"
-
-#. TRANS: Error message. %s are the error details.
-#, fuzzy, php-format
-msgid "Encountered error \"%s\"."
-msgstr "Виявлено помилку «%s»"
-
-#. TRANS: Fieldset legend for a paused import.
-msgid "Paused"
-msgstr "Призупинено"
-
-#. TRANS: Button text for continuing a paused import.
-msgid "Continue"
-msgstr "Продовжити"
-
-#. TRANS: Button text for aborting a paused import.
-msgid "Abort import"
-msgstr "Перервати імпорт"
-
-#. TRANS: Form instructions.
-msgid ""
-"Follow this link to confirm authorization at Yammer; you will be prompted to "
-"log in if necessary:"
-msgstr ""
-"Перейдіть за цим посиланням для підтвердження дозволу від Yammer; вам буде "
-"запропоновано увійти до системи, якщо це необхідно:"
-
-#. TRANS: Link description for a link in an external Yammer system.
-msgid "Open Yammer authentication window"
-msgstr "Відкрити вікно автентифікації Yammer"
-
-#. TRANS: Form instructions.
-msgid "Copy the verification code you are given below:"
-msgstr "Скопіюйте наданий вам код підтвердження до віконця нижче:"
-
-#. TRANS: Field label.
-msgid "Verification code:"
-msgstr "Код підтвердження:"
-
-#. TRANS: Button text for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Continue"
-msgstr "Продовжити"
-
-#. TRANS: Button title for saving  Yammer authorisation data and starting Yammer import.
-#, fuzzy
-msgid "Save the verification code and begin import."
-msgstr "Зберегти код і почати імпорт"
-
-#. TRANS: Form legend for adding details to connect to a remote Yammer API.
-msgid "Yammer API registration"
-msgstr "Реєстрація API Yammer"
-
-#. TRANS: Explanation of what needs to be done to connect to a Yammer network.
-msgid ""
-"Before we can connect to your Yammer network, you will need to register the "
-"importer as an application authorized to pull data on your behalf. This "
-"registration will work only for your own network. Follow this link to "
-"register the app at Yammer; you will be prompted to log in if necessary:"
-msgstr ""
-"Перш ніж ми зможемо підключитися до вашого акаунту Yammer, вам необхідно "
-"зареєструвати у якості імпортера цей авторизований додаток, аби той забирав "
-"дані від вашого імені. Ця реєстрація буде працювати тільки для вашої власної "
-"мережі. Перейдіть за цим посиланням, щоб зареєструвати додаток на Yammer; "
-"вам буде запропоновано увійти до системи, якщо це необхідно:"
-
-#. TRANS: Link description to a Yammer application registration form.
-msgid "Open Yammer application registration form"
-msgstr "Відкрити реєстраційну форму додатку для Yammer"
-
-#. TRANS: Instructions.
-msgid "Copy the consumer key and secret you are given into the form below:"
-msgstr ""
-"Скопіюйте ключ споживача та секретний код, котрі вам було надано, до віконця "
-"нижче:"
-
-#. TRANS: Field label for a Yammer consumer key.
-msgid "Consumer key:"
-msgstr "Ключ споживача:"
-
-#. TRANS: Field label for a Yammer consumer secret.
-msgid "Consumer secret:"
-msgstr "Секретний код:"
-
-#. TRANS: Button text for saving a Yammer API registration.
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Зберегти"
-
-#. TRANS: Button title for saving a Yammer API registration.
-#, fuzzy
-msgid "Save the entered consumer key and consumer secret."
-msgstr "Зберегти ключі споживача"
diff --git a/plugins/YammerImport/scripts/yammer-import.php b/plugins/YammerImport/scripts/yammer-import.php
deleted file mode 100644 (file)
index 22b6422..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-if (php_sapi_name() != 'cli') {
-    die('no');
-}
-
-define('INSTALLDIR', dirname(dirname(dirname(dirname(__FILE__)))));
-
-$longoptions = array('verify=', 'reset');
-require INSTALLDIR . "/scripts/commandline.inc";
-
-echo "Checking current state...\n";
-$runner = YammerRunner::init();
-
-if (have_option('reset')) {
-    echo "Resetting Yammer import state...\n";
-    $runner->reset();
-    echo "done.\n";
-    exit(0);
-}
-
-switch ($runner->state())
-{
-    case 'init':
-        echo "Requesting authentication to Yammer API...\n";
-        $url = $runner->requestAuth();
-        echo "Log in to Yammer at the following URL and confirm permissions:\n";
-        echo "\n";
-        echo "    $url\n";
-        echo "\n";
-        echo "Pass the resulting code back by running:\n";
-        echo "\n";
-        echo "    php yammer-import.php --verify=####\n";
-        echo "\n";
-        break;
-
-    case 'requesting-auth':
-        if (!have_option('verify')) {
-            echo "Awaiting authentication...\n";
-            echo "\n";
-            echo "If you need to start over, reset the state:\n";
-            echo "\n";
-            echo "    php yammer-import.php --reset\n";
-            echo "\n";
-            exit(1);
-        }
-        echo "Saving final authentication token for Yammer API...\n";
-        $runner->saveAuthToken(get_option_value('verify'));
-        // Fall through...
-
-    default:
-        while ($runner->hasWork()) {
-            echo "... {$runner->state()}\n";
-            if (!$runner->iterate()) {
-                echo "FAIL??!?!?!\n";
-            }
-        }
-        if ($runner->isDone()) {
-            echo "... done.\n";
-        } else {
-            echo "... no more import work scheduled.\n";
-        }
-        break;
-}
diff --git a/scripts/clean_file_table.php b/scripts/clean_file_table.php
new file mode 100755 (executable)
index 0000000..573abf1
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'y';
+$longoptions = array('yes');
+
+$helptext = <<<END_OF_HELP
+clean_file_table.php [options]
+Deletes all local files where the filename cannot be found in the filesystem.
+
+  -y --yes      do not wait for confirmation
+
+Will print '.' for each file, except for deleted ones which are marked as 'x'.
+
+END_OF_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (!have_option('y', 'yes')) {
+    print "About to delete local file entries where the file cannot be found. Are you sure? [y/N] ";
+    $response = fgets(STDIN);
+    if (strtolower(trim($response)) != 'y') {
+        print "Aborting.\n";
+        exit(0);
+    }
+}
+
+print "Deleting";
+$file = new File();
+$file->whereAdd('filename IS NOT NULL');        // local files
+$file->whereAdd('filehash IS NULL', 'AND');     // without filehash value
+if ($file->find()) {
+    while ($file->fetch()) {
+        try {
+            $file->getPath();
+            print '.';
+        } catch (FileNotFoundException $e) {
+            $file->delete();
+            print 'x';
+        }
+    }
+}
+print "\nDONE.\n";
diff --git a/scripts/clean_profiles.php b/scripts/clean_profiles.php
new file mode 100755 (executable)
index 0000000..470d6c1
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'y';
+$longoptions = array('yes');
+
+$helptext = <<<END_OF_HELP
+clean_profiles.php [options]
+Deletes all profile table entries where the profile does not occur in the
+notice table, is not a group and is not a local user. Very MySQL specific I think.
+
+WARNING: This has not been tested thoroughly. Maybe we've missed a table to compare somewhere.
+
+  -y --yes      do not wait for confirmation
+
+END_OF_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (!have_option('y', 'yes')) {
+    print "About to delete profiles that we think are useless to save. Are you sure? [y/N] ";
+    $response = fgets(STDIN);
+    if (strtolower(trim($response)) != 'y') {
+        print "Aborting.\n";
+        exit(0);
+    }
+}
+
+print "Deleting";
+$profile = new Profile();
+$profile->query('SELECT * FROM profile WHERE ' .
+                'NOT (SELECT COUNT(*) FROM notice WHERE profile_id=profile.id) ' .
+                'AND NOT (SELECT COUNT(*) FROM user WHERE user.id=profile.id) ' .
+                'AND NOT (SELECT COUNT(*) FROM user_group WHERE user_group.profile_id=profile.id) ' .
+                'AND NOT (SELECT COUNT(*) FROM subscription WHERE subscriber=profile.id OR subscribed=profile.id) ');
+while ($profile->fetch()) {
+    echo ' '.$profile->getID().':'.$profile->getNickname();
+    $profile->delete();
+}
+print "\nDONE.\n";
index ec859e8f43e4c4eb033e305763ebff3c181e7b8b..2873146b3d90dce5e143cdc474acceb08890fdc4 100644 (file)
@@ -48,6 +48,7 @@ function main()
         fixupFileGeometry();
         deleteLocalFileThumbnailsWithoutFilename();
         deleteMissingLocalFileThumbnails();
+        setFilehashOnLocalFiles();
 
         initGroupProfileId();
         initLocalGroup();
@@ -490,7 +491,9 @@ function deleteMissingLocalFileThumbnails()
     // Checking if there were any File_thumbnail entries without filename
     if ($thumbs->find()) {
         while ($thumbs->fetch()) {
-            if (!file_exists(File_thumbnail::path($thumbs->filename))) {
+            try {
+                $thumbs->getPath();
+            } catch (FileNotFoundException $e) {
                 $thumbs->delete();
             }
         }
@@ -499,4 +502,30 @@ function deleteMissingLocalFileThumbnails()
     printfnq("DONE.\n");
 }
 
+/*
+ * Files are now stored with their hash, so let's generate for previously uploaded files.
+ */
+function setFilehashOnLocalFiles()
+{
+    printfnq('Ensuring all local files have the filehash field set...');
+
+    $file = new File();
+    $file->whereAdd('filename IS NOT NULL');        // local files
+    $file->whereAdd('filehash IS NULL', 'AND');     // without filehash value
+
+    if ($file->find()) {
+        while ($file->fetch()) {
+            try {
+                $orig = clone($file);
+                $file->filehash = hash_file(File::FILEHASH_ALG, $file->getPath());
+                $file->update($orig);
+            } catch (FileNotFoundException $e) {
+                echo "\n    WARNING: file ID {$file->id} does not exist on path '{$e->path}'. Clean up the file table?";
+            }
+        }
+    }
+
+    printfnq("DONE.\n");
+}
+
 main();
index cfc644d96be160774339f4bf2b900338776b4bfa..ed6a57e000b9ae165010f61a7c42321bcc4aed7d 100644 (file)
@@ -389,7 +389,7 @@ address .poweredby {
 
 .form_notice .count {
     position: absolute;
-    top: 50px;
+    bottom: 72px;
     right: 32px;
     z-index: 99;
     font-size: 0.8em;
@@ -713,6 +713,10 @@ font-style:italic;
     overflow-y: auto;
 }
 
+.notice .e-content img {
+    max-width: 100%;
+}
+
 .notice-options {
     margin-bottom: 7px;
     margin-top: 12px;
@@ -789,7 +793,7 @@ position:static;
 .notice.h-entry .attachments {
     clear: both;
     position: relative;
-    top: 1em;
+    margin-bottom: 1em;
 }
 
 .notice.h-entry .attachments .inline-attachment * {
@@ -1452,6 +1456,15 @@ margin-left:0;
     margin-left: 56px;
 }
 
+.notice > footer > h3 {
+    margin-bottom: 0;
+    margin-top: 1em;
+}
+
+.threaded-replies .notice > footer, .section .notice > footer {
+    margin-left:33px;
+}
+
 .notice > footer .timestamp span.p-name {
     display: none;
 }
index c65027ea6bced8d2a4e38f6227c66f711a1a0640..8892966de929602172c048a8d31f740763a847e3 100644 (file)
@@ -7,7 +7,3 @@ http://www.openclipart.org/detail/34957
 Some icons by Mark James
 http://www.famfamfam.com/lab/icons/silk/
 http://creativecommons.org/licenses/by/2.5/ Creative Commons Attribution 2.5 License
-
-Lato font by Łukasz Dziedzic (http://www.typoland.com) via Google Web Fonts (http://www.google.com/webfonts)
-SIL Open Font License, 1.1 (http://scripts.sil.org/OFL)
-Prepared for web with Font Squirrel (http://www.fontsquirrel.com/fontface/generator)
index 1daedf92824d407882e39efb93b9bf22cfff7c5c..ea5309b3265ed17a320f51926222d99030f680b5 100644 (file)
@@ -8,27 +8,6 @@
  * @link      http://gnu.io/
  */
 
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/lato-regular-webfont.eot?') format('eot'), url('../fonts/lato-regular-webfont.woff') format('woff'), url('../fonts/lato-regular-webfont.ttf') format('truetype'), url('../fonts/lato-regular-webfont.svg#webfontCjmEHx3G') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/lato-bold-webfont.eot?') format('eot'), url('../fonts/lato-bold-webfont.woff') format('woff'), url('../fonts/lato-bold-webfont.ttf') format('truetype'), url('../fonts/lato-bold-webfont.svg#webfontCjmEHx3G') format('svg');
-    font-weight: bold;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/lato-italic-webfont.eot?') format('eot'), url('../fonts/lato-italic-webfont.woff') format('woff'), url('../fonts/lato-italic-webfont.ttf') format('truetype'), url('../fonts/lato-italic-webfont.svg#webfontCjmEHx3G') format('svg');
-    font-weight: normal;
-    font-style: italic;
-}
-
 @media screen, projection, tv {
 
 /* general styles and layout */
@@ -37,12 +16,12 @@ body {
     /* background-color: #C6C8CC;
     background-image: url(../images/bg.png); */
     background-color: #e9eaed;
-    font-family: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif; 
+    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
     color: #222;
 }
 
 input, textarea, select, option {
-    font-family: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif; 
+    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
 }
 
 a {color: #666;}
diff --git a/theme/neo-gnu/fonts/lato-bold-webfont.eot b/theme/neo-gnu/fonts/lato-bold-webfont.eot
deleted file mode 100644 (file)
index 3119694..0000000
Binary files a/theme/neo-gnu/fonts/lato-bold-webfont.eot and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-bold-webfont.svg b/theme/neo-gnu/fonts/lato-bold-webfont.svg
deleted file mode 100644 (file)
index 90e8e25..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-This is a custom SVG webfont generated by Font Squirrel.
-Copyright   : Copyright c 2010 by tyPoland Lukasz Dziedzic with Reserved Font Name Lato Licensed under the SIL Open Font License Version 11 
-Designer    : Lukasz Dziedzic
-Foundry     : tyPoland Lukasz Dziedzic
-Foundry URL : httpwwwtypolandcom
-</metadata>
-<defs>
-<font id="webfontRFDbyVDk" horiz-adv-x="1187" >
-<font-face units-per-em="2048" ascent="1649" descent="-399" />
-<missing-glyph horiz-adv-x="395" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="0" />
-<glyph unicode="&#xd;" horiz-adv-x="0" />
-<glyph unicode=" "  horiz-adv-x="395" />
-<glyph unicode="&#x09;" horiz-adv-x="395" />
-<glyph unicode="&#xa0;" horiz-adv-x="395" />
-<glyph unicode="!" horiz-adv-x="738" d="M492 1481v-586q0 -93 -9.5 -182.5t-24.5 -190.5h-171q-15 100 -24.5 190t-9.5 183v586h239zM214 139q0 32 12 60.5t33 49t49.5 33t61.5 12.5q32 0 60.5 -12.5t49 -33t32.5 -49t12 -60.5q0 -33 -12 -61t-32.5 -48.5t-49.5 -32t-60 -11.5q-33 0 -61.5 11.5t-49.5 32 t-33 48.5t-12 61z" />
-<glyph unicode="&#x22;" horiz-adv-x="864" d="M354 1481v-295l-23 -160q-7 -45 -26 -69t-62 -24q-37 0 -58.5 24t-27.5 69l-23 160v295h220zM731 1481v-295l-23 -160q-7 -45 -26 -69t-62 -24q-37 0 -58.5 24t-27.5 69l-23 160v295h220z" />
-<glyph unicode="#" d="M851 418l-79 -418h-116q-31 0 -53 24.5t-22 60.5q0 5 0.5 9.5t1.5 9.5l60 314h-210l-59 -326q-9 -49 -42 -70.5t-73 -21.5h-112l78 418h-117q-33 0 -50.5 16t-17.5 52q0 14 3 33l13 81h195l53 283h-219l19 105q7 39 32 58t80 19h114l63 330q8 41 38 63.5t70 22.5h114 l-77 -416h208l79 416h113q36 0 58.5 -20.5t22.5 -52.5q0 -10 -1 -15l-64 -328h208l-19 -106q-7 -39 -32.5 -57.5t-79.5 -18.5h-102l-52 -283h145q33 0 50 -16t17 -54q0 -14 -4 -32l-12 -80h-222zM459 600h210l52 283h-209z" />
-<glyph unicode="$" d="M474 -9q-120 16 -225 65t-178 122l77 116q10 15 27.5 25t35.5 10q23 0 48 -16l58 -38q33 -22 75 -43t100 -31l38 458q-73 20 -144 48t-127.5 73.5t-91.5 115.5t-35 174q0 78 31.5 152t90.5 132.5t146 96.5t200 43l11 129q2 25 20.5 44.5t48.5 19.5h93l-17 -202 q109 -17 187.5 -61.5t136.5 -99.5l-61 -93q-14 -20 -28.5 -30.5t-35.5 -10.5q-15 0 -36 9.5t-48 23.5t-60 28.5t-73 23.5l-36 -424q74 -23 146.5 -50t130 -70t93.5 -107t36 -160q0 -95 -32 -178.5t-92.5 -147.5t-150 -104t-203.5 -48l-13 -151q-2 -24 -20 -43.5t-48 -19.5 h-93zM868 425q0 39 -13.5 68t-38.5 51.5t-59 39t-74 29.5l-35 -415q109 14 164.5 73t55.5 154zM371 1095q0 -39 13 -69t37 -53t57 -41t72 -32l32 379q-56 -7 -96.5 -24t-66 -41.5t-37 -54.5t-11.5 -64z" />
-<glyph unicode="%" horiz-adv-x="1644" d="M746 1122q0 -84 -28 -151.5t-75 -115t-109.5 -73t-130.5 -25.5q-74 0 -136 25.5t-107.5 73t-71.5 115t-26 151.5q0 86 26 156t71.5 118t108 74t135.5 26q74 0 137 -26t109 -74t71.5 -118t25.5 -156zM551 1122q0 59 -11.5 99.5t-31.5 65t-47 35t-58 10.5t-57.5 -10.5 t-45.5 -35t-30 -64.5t-11 -100q0 -57 11 -95.5t30 -62t46 -33.5t57 -10q31 0 58 10t47 33.5t31.5 62t11.5 95.5zM1239 1441q12 15 30.5 27.5t51.5 12.5h183l-1100 -1443q-12 -16 -31 -27t-45 -11h-189zM1582 348q0 -84 -28 -151.5t-75 -115t-109.5 -73.5t-130.5 -26 q-74 0 -136.5 26t-108 73.5t-71 115t-25.5 151.5q0 86 25.5 155.5t71 118t108 74.5t136.5 26t137 -26t109 -74.5t71.5 -118t25.5 -155.5zM1388 348q0 59 -12 99t-32 65t-47 35.5t-58 10.5t-57.5 -10.5t-45.5 -35.5t-30 -64.5t-11 -99.5q0 -57 11 -96t30 -62.5t45.5 -34 t57.5 -10.5t58 10.5t47 34t32 62.5t12 96z" />
-<glyph unicode="&#x26;" horiz-adv-x="1462" d="M679 1497q90 0 161 -27.5t122 -73.5t80 -105.5t34 -123.5l-161 -33q-3 -1 -6 -1h-7q-17 0 -31 9.5t-22 29.5q-9 27 -23.5 51t-35 42t-48 29t-63.5 11q-43 0 -77 -15t-57.5 -40t-35.5 -58.5t-12 -70.5q0 -31 6.5 -59.5t21 -57t37.5 -59t56 -64.5l394 -409q34 65 54 136.5 t27 145.5q2 24 15 38t37 14h159q-1 -135 -39 -258t-109 -226l310 -322h-247q-19 0 -34.5 2t-28.5 7.5t-25.5 15t-25.5 23.5l-103 106q-98 -80 -218 -125t-261 -45q-86 0 -168 29t-146.5 84.5t-103.5 133.5t-39 177q0 69 22.5 130.5t62 115t94.5 96.5t121 73 q-54 77 -79.5 150.5t-25.5 145.5q0 77 28 146t82 120.5t132 81.5t176 30zM323 428q0 -56 19 -101t53 -76.5t78.5 -48.5t94.5 -17q90 0 164.5 28.5t135.5 78.5l-389 399q-82 -53 -119 -119.5t-37 -143.5z" />
-<glyph unicode="'" horiz-adv-x="487" d="M354 1481v-295l-23 -160q-7 -45 -26 -69t-62 -24q-37 0 -58.5 24t-27.5 69l-23 160v295h220z" />
-<glyph unicode="(" horiz-adv-x="614" d="M328 642q0 -211 51 -414.5t146 -383.5q7 -13 10 -24t3 -21q0 -20 -10.5 -33t-24.5 -21l-113 -69q-76 117 -129 235t-87 237.5t-49.5 242.5t-15.5 251t15.5 251.5t49.5 243t87 237t129 234.5l113 -68q14 -8 24.5 -21t10.5 -32t-14 -46q-94 -179 -145 -383.5t-51 -415.5z " />
-<glyph unicode=")" horiz-adv-x="614" d="M287 642q0 211 -51.5 415.5t-145.5 383.5q-13 27 -13 46t10 32t25 21l112 68q76 -117 129.5 -234.5t87 -237t49.5 -243t16 -251.5t-16 -251t-49.5 -242.5t-87 -237.5t-129.5 -235l-112 69q-14 8 -24.5 21t-10.5 33q0 9 2.5 20.5t9.5 24.5q95 179 146.5 383t51.5 415z" />
-<glyph unicode="*" horiz-adv-x="819" d="M348 857v187q0 20 2.5 40t8.5 37q-11 -14 -26.5 -25.5t-32.5 -22.5l-162 -94l-60 102l163 95q18 11 36 18t37 10q-19 2 -37 10.5t-36 19.5l-163 95l59 103l163 -97q17 -11 33 -23t27 -26q-7 17 -9.5 36.5t-2.5 40.5v189h121v-187q0 -22 -2.5 -41.5t-9.5 -37.5 q11 14 26.5 26t33.5 23l162 95l60 -103l-162 -93q-18 -11 -36.5 -19t-37.5 -11q35 -6 74 -28l162 -96l-59 -102l-163 95q-18 11 -33.5 22.5t-27.5 25.5q13 -33 13 -75v-189h-121z" />
-<glyph unicode="+" d="M694 1201v-420h399v-187h-399v-422h-205v422h-396v187h396v420h205z" />
-<glyph unicode="," horiz-adv-x="460" d="M82 156q0 29 10.5 53.5t30 43.5t47.5 30t60 11q39 0 68 -14t48.5 -38t28.5 -55t9 -66q0 -49 -15 -103.5t-43.5 -108.5t-70.5 -105.5t-96 -94.5l-44 40q-18 15 -19 38q0 8 6 18.5t14 18.5l27 30q16 18 33 41t30.5 50t19.5 58q-32 0 -58.5 12t-45.5 32.5t-29.5 48 t-10.5 60.5z" />
-<glyph unicode="-" horiz-adv-x="735" d="M102 724h531v-211h-531v211z" />
-<glyph unicode="." horiz-adv-x="460" d="M75 139q0 32 11.5 60.5t32.5 49t50 33t61 12.5t60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61z" />
-<glyph unicode="/" horiz-adv-x="792" d="M223 -3q-9 -24 -23.5 -41t-33 -29t-38.5 -18t-40 -6h-106l598 1530q17 43 50 66t79 23h107z" />
-<glyph unicode="0" d="M1137 740q0 -194 -41.5 -336.5t-115 -235.5t-173 -138.5t-215.5 -45.5t-214.5 45.5t-171.5 138.5t-114 236t-41 336q0 195 41 337.5t114 235.5t171.5 138.5t214.5 45.5t215.5 -45.5t173 -138.5t115 -235.5t41.5 -337.5zM876 740q0 161 -24 266.5t-63 168t-90.5 87.5 t-106.5 25q-54 0 -105 -25t-90 -87.5t-62 -168t-23 -266.5t23 -266t62 -167.5t90 -87.5t105 -25q55 0 106.5 25t90.5 87.5t63 167.5t24 266z" />
-<glyph unicode="1" d="M275 189h300v864q0 50 4 105l-213 -178q-13 -11 -27 -15t-28 -4q-20 0 -37 8.5t-25 19.5l-80 110l452 384h207v-1294h267v-189h-820v189z" />
-<glyph unicode="2" d="M616 1497q102 0 187.5 -30t146 -85.5t94 -133.5t33.5 -173q0 -82 -24 -151.5t-64.5 -133t-94.5 -122.5l-114 -121l-334 -341q49 14 96.5 22t90.5 8h380q41 0 65 -23.5t24 -60.5v-152h-1016v84q0 26 11 53.5t34 50.5l450 451q56 57 100.5 109.5t74.5 103.5t46 104t16 111 q0 53 -15.5 93.5t-44 68t-68 41.5t-88.5 14q-91 0 -150 -46t-82 -124q-11 -39 -34 -56t-57 -17q-15 0 -34 3l-133 24q15 106 59 186.5t110 134.5t151.5 81t183.5 27z" />
-<glyph unicode="3" d="M640 1497q102 0 184.5 -29t141 -81t89.5 -121.5t31 -150.5q0 -71 -15.5 -124.5t-46 -93.5t-74 -67.5t-98.5 -46.5q133 -42 198.5 -128t65.5 -216q0 -111 -41 -195.5t-110.5 -142.5t-161 -87.5t-194.5 -29.5q-112 0 -194.5 25.5t-144 75.5t-104.5 123t-74 168l112 46 q29 12 58 12q27 0 48 -11t32 -33q18 -36 40 -70.5t53 -62t72.5 -44t98.5 -16.5q65 0 113 21t80 54.5t48 75t16 83.5q0 53 -11 96.5t-47 74.5t-103 48.5t-180 17.5v180q93 1 154.5 17.5t98 45.5t51 70t14.5 90q0 105 -57.5 159t-156.5 54q-90 0 -149.5 -47.5t-83.5 -122.5 q-12 -39 -33.5 -56t-56.5 -17q-16 0 -35 3l-133 24q15 106 59.5 186.5t110.5 134.5t151.5 81t183.5 27z" />
-<glyph unicode="4" d="M965 558h186v-146q0 -20 -13.5 -35.5t-38.5 -15.5h-134v-361h-222v361h-624q-26 0 -45.5 16t-24.5 40l-25 128l701 937h240v-924zM743 1042q0 33 2.5 71t7.5 79l-460 -634h450v484z" />
-<glyph unicode="5" d="M1013 1373q0 -54 -34.5 -88t-114.5 -34h-407l-54 -309q100 20 184 21q117 0 205.5 -35t148.5 -96.5t91 -144t31 -177.5q0 -118 -41.5 -215t-115 -166.5t-174.5 -107t-220 -37.5q-70 0 -132.5 14t-117 38t-101 55.5t-83.5 66.5l78 107q25 35 65 35q26 0 52 -16.5t61 -36 t81 -35.5t111 -16q70 0 123 22.5t88.5 63t53.5 96t18 121.5q0 121 -70 189t-207 68q-108 0 -216 -39l-157 45l123 719h731v-108z" />
-<glyph unicode="6" d="M686 925q84 0 163.5 -28t140 -83.5t97 -138.5t36.5 -194q0 -103 -37.5 -193.5t-106.5 -158.5t-165.5 -106.5t-213.5 -38.5q-119 0 -213 37.5t-160.5 106t-102 164t-35.5 212.5q0 104 42.5 214t131.5 229l353 474q18 25 54 42.5t82 17.5h225l-439 -538l-28 -33 q-13 -15 -25 -31q43 22 93 34t108 12zM332 465q0 -61 17 -112t50 -87t82 -56t114 -20q60 0 111 20.5t87 57.5t56.5 86.5t20.5 108.5q0 63 -19.5 114t-55 86t-86 53.5t-110.5 18.5t-109.5 -20.5t-84.5 -56.5t-54 -86t-19 -107z" />
-<glyph unicode="7" d="M1122 1481v-110q0 -49 -10.5 -79t-20.5 -51l-561 -1155q-17 -36 -48.5 -61t-86.5 -25h-183l573 1132q36 70 80 119h-708q-24 0 -41.5 17.5t-17.5 41.5v171h1024z" />
-<glyph unicode="8" d="M594 -16q-115 0 -209.5 30.5t-162 87t-105 136t-37.5 178.5q0 131 64.5 221.5t200.5 134.5q-109 45 -162.5 128t-53.5 200q0 84 34.5 156.5t96 126.5t147 84t187.5 30t187.5 -30t147 -84t96 -126.5t34.5 -156.5q0 -117 -54.5 -200t-161.5 -128q136 -44 200.5 -134.5 t64.5 -221.5q0 -98 -37.5 -178t-105 -136.5t-162 -87t-209.5 -30.5zM594 181q62 0 109.5 18t79.5 50t48.5 76t16.5 95q0 122 -67.5 184.5t-186.5 62.5t-186.5 -62.5t-67.5 -184.5q0 -51 16.5 -95t48.5 -76t79.5 -50t109.5 -18zM594 865q61 0 103 19.5t68 52t36.5 74 t10.5 85.5q0 42 -13.5 79.5t-40 67t-67.5 47t-97 17.5t-97 -17.5t-68.5 -47t-40 -67t-12.5 -79.5q0 -44 10.5 -85.5t36.5 -74t68 -52t103 -19.5z" />
-<glyph unicode="9" d="M543 591q-77 0 -151 26.5t-131.5 80.5t-92.5 133t-35 186q0 99 37 186t103.5 152.5t159.5 103.5t206 38q114 0 204.5 -36t154.5 -100.5t98 -154.5t34 -197q0 -69 -11.5 -130.5t-33.5 -118.5t-53 -110.5t-68 -107.5l-339 -484q-17 -25 -51.5 -41.5t-78.5 -16.5h-233 l460 574l33 42l29 41q-51 -33 -112 -49.5t-129 -16.5zM888 1034q0 60 -18.5 108t-52.5 80.5t-80.5 50t-101.5 17.5q-57 0 -103.5 -19t-78.5 -52.5t-49.5 -80t-17.5 -102.5q0 -124 64 -189t182 -65q61 0 108.5 19.5t80.5 53.5t50 80t17 99z" />
-<glyph unicode=":" horiz-adv-x="542" d="M116 139q0 32 11.5 60.5t32.5 49t50 33t61 12.5t60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61zM116 869q0 32 11.5 60.5t32.5 49t50 33t61 12.5t60.5 -12.5t49 -33t33 -49 t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61z" />
-<glyph unicode=";" horiz-adv-x="542" d="M123 156q0 29 10.5 53.5t30 43.5t47.5 30t60 11q39 0 68 -14t48.5 -38t28.5 -55t9 -66q0 -49 -15 -103.5t-43.5 -108.5t-70.5 -105.5t-96 -94.5l-44 40q-18 15 -19 38q0 8 5.5 18.5t14.5 18.5l27 30q16 18 32.5 41t30.5 50t20 58q-32 0 -58.5 12t-45.5 32.5t-29.5 48 t-10.5 60.5zM116 869q0 32 11.5 60.5t32.5 49t50 33t61 12.5t60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61z" />
-<glyph unicode="&#x3c;" d="M142 741l811 423v-180q0 -20 -10 -37t-34 -29l-371 -191q-24 -12 -50 -21t-56 -16q30 -7 56 -15.5t50 -21.5l371 -191q24 -12 34 -29t10 -38v-180l-811 424v102z" />
-<glyph unicode="=" d="M139 602h908v-188h-908v188zM139 963h908v-188h-908v188z" />
-<glyph unicode="&#x3e;" d="M234 215v180q0 20 10.5 37.5t34.5 29.5l371 191q45 23 106 37q-30 7 -56 16t-50 21l-371 191q-24 12 -34.5 29t-10.5 37v180l812 -423v-102z" />
-<glyph unicode="?" horiz-adv-x="861" d="M38 1347q35 31 76.5 58.5t89.5 48t104.5 32t121.5 11.5q89 0 162.5 -24.5t125.5 -70t80.5 -110t28.5 -144.5q0 -78 -22.5 -135t-56.5 -99t-74 -72l-76 -58q-36 -27 -62 -53t-31 -59l-24 -150h-173l-17 167q-1 5 -1 9v9q0 45 22.5 78t56 62.5t72.5 57t73 59.5t56.5 73 t22.5 97q0 37 -14 66t-38.5 50t-59 32t-73.5 11q-58 0 -99 -12.5t-69 -28.5t-47.5 -29t-34.5 -13q-37 0 -54 31zM231 139q0 32 12 60.5t33 49t49.5 33t61.5 12.5q32 0 60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5 t-49.5 32t-33 48.5t-12 61z" />
-<glyph unicode="@" horiz-adv-x="1684" d="M1194 188q-70 0 -124.5 33t-76.5 106q-60 -74 -127.5 -106t-145.5 -32q-65 0 -112.5 22.5t-79.5 62t-48 93.5t-16 117q0 58 15 118.5t44.5 116t74 104t105 85t135 57.5t166.5 21q79 0 135 -12t108 -35l-98 -380q-16 -66 -16 -109q0 -31 7.5 -51.5t20.5 -33t31 -17 t40 -4.5q43 0 81.5 27t67 76.5t45.5 117t17 147.5q0 133 -41.5 234.5t-116 169.5t-177.5 102t-226 34q-134 0 -249.5 -50.5t-200 -138.5t-132 -208t-47.5 -258q0 -168 52 -295.5t143.5 -213t214.5 -128.5t267 -43q79 0 147.5 8.5t126 23.5t104.5 34t84 41q20 11 34 11 q30 0 42 -33l35 -91q-106 -70 -248.5 -114t-324.5 -44q-185 0 -343 58.5t-273 167.5t-180 265.5t-65 352.5q0 110 28 213t80 194t126 166.5t164 130t195 84.5t220 30q145 0 278.5 -48.5t236.5 -139t164.5 -221t61.5 -294.5q0 -110 -32 -205.5t-90 -166.5t-136.5 -111.5 t-170.5 -40.5zM770 352q27 0 54 8.5t51.5 29.5t45 55.5t33.5 86.5l75 289q-33 6 -67 6q-63 0 -119 -27.5t-96 -74.5t-64 -108t-24 -127t28.5 -102t82.5 -36z" />
-<glyph unicode="A" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5z" />
-<glyph unicode="B" horiz-adv-x="1334" d="M150 0v1481h510q145 0 248.5 -28t169.5 -79t96.5 -123.5t30.5 -164.5q0 -52 -15 -99.5t-47.5 -89t-82 -75.5t-118.5 -57q305 -69 305 -330q0 -94 -35.5 -174t-104.5 -137.5t-169 -90.5t-229 -33h-559zM425 649v-434h280q77 0 128.5 18.5t82.5 49t45 71.5t14 87 q0 48 -15.5 86.5t-48 66t-84 41.5t-124.5 14h-278zM425 840h220q140 0 213 51t73 163q0 116 -65.5 165t-205.5 49h-235v-428z" />
-<glyph unicode="C" horiz-adv-x="1373" d="M1167 349q23 0 39 -17l109 -118q-90 -112 -221.5 -171t-316.5 -59q-165 0 -296.5 56t-224.5 156.5t-143 239.5t-50 304q0 167 55.5 306t156 239t240 156t308.5 56q165 0 288.5 -52.5t211.5 -139.5l-92 -128q-8 -12 -21 -21.5t-35 -9.5q-24 0 -48.5 18.5t-62.5 40t-96 40 t-147 18.5q-104 0 -191.5 -36.5t-150.5 -104t-98.5 -164.5t-35.5 -218q0 -125 35.5 -222t96 -163.5t142 -102t176.5 -35.5q56 0 101.5 6t84 19.5t72.5 34.5t68 52q10 9 21.5 14.5t24.5 5.5z" />
-<glyph unicode="D" horiz-adv-x="1530" d="M1464 740q0 -163 -54 -299t-152.5 -234t-236.5 -152.5t-306 -54.5h-565v1481h565q168 0 306 -55t236.5 -152.5t152.5 -234t54 -299.5zM1183 740q0 122 -33 219t-93.5 164t-147 103t-194.5 36h-288v-1043h288q109 0 195 36t146.5 103t93.5 163.5t33 218.5z" />
-<glyph unicode="E" horiz-adv-x="1172" d="M1083 1481v-219h-656v-411h517v-212h-517v-419h656v-220h-933v1481h933z" />
-<glyph unicode="F" horiz-adv-x="1149" d="M1083 1481v-219h-656v-439h554v-220h-554v-603h-277v1481h933z" />
-<glyph unicode="G" horiz-adv-x="1480" d="M829 203q93 0 162.5 17t131.5 46v270h-185q-27 0 -42 14.5t-15 36.5v155h492v-599q-56 -41 -117 -71t-130 -49.5t-148 -29t-170 -9.5q-162 0 -298 56t-235.5 156.5t-155.5 239.5t-56 304q0 167 54.5 306.5t154.5 239.5t242 155.5t320 55.5q181 0 313.5 -53.5 t224.5 -139.5l-80 -125q-24 -38 -62 -38q-25 0 -50 16l-67 39q-34 19 -76 33.5t-93.5 24t-119.5 9.5q-110 0 -198 -37t-150.5 -105.5t-96.5 -165t-34 -215.5q0 -128 36 -227.5t100.5 -168.5t153.5 -105t194 -36z" />
-<glyph unicode="H" horiz-adv-x="1548" d="M1399 0h-278v647h-694v-647h-277v1481h277v-637h694v637h278v-1481z" />
-<glyph unicode="I" horiz-adv-x="643" d="M460 0h-277v1481h277v-1481z" />
-<glyph unicode="J" horiz-adv-x="894" d="M745 526q0 -125 -30.5 -225t-91.5 -171t-152 -108.5t-212 -37.5q-55 0 -108.5 6.5t-111.5 20.5l14 164q2 23 17 36.5t44 13.5q17 0 45 -7t71 -7q58 0 103.5 17t75.5 53.5t45.5 95.5t15.5 143v961h275v-955z" />
-<glyph unicode="K" horiz-adv-x="1429" d="M434 860h65q39 0 64.5 11t43.5 34l409 517q26 33 54 46t71 13h237l-498 -616q-24 -29 -45.5 -48t-46.5 -32q34 -12 61.5 -34.5t52.5 -57.5l514 -693h-244q-49 0 -73 14t-40 40l-419 547q-20 27 -46 38.5t-73 11.5h-87v-651h-275v1482h275v-622z" />
-<glyph unicode="L" horiz-adv-x="1058" d="M425 227h593v-227h-868v1481h275v-1254z" />
-<glyph unicode="M" horiz-adv-x="1904" d="M893 614q17 -33 32 -68l29 -71q14 37 29.5 73t33.5 68l438 821q8 15 17 24t19.5 13.5t24 5.5t31.5 1h208v-1481h-243v956q0 27 2 59t5 64l-448 -839q-15 -29 -39.5 -45t-57.5 -16h-38q-33 0 -57.5 16t-39.5 45l-454 842q4 -34 5.5 -66t1.5 -60v-956h-242v1481h207 q18 0 31.5 -1t24.5 -5.5t20 -13.5t18 -24z" />
-<glyph unicode="N" horiz-adv-x="1548" d="M294 1481q18 0 30.5 -1.5t22 -6.5t19 -13.5t20.5 -22.5l777 -991q-4 36 -5.5 70.5t-1.5 64.5v900h243v-1481h-143q-33 0 -54 10t-42 37l-774 986q3 -33 4.5 -65t1.5 -59v-909h-242v1481h144z" />
-<glyph unicode="O" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5z" />
-<glyph unicode="P" horiz-adv-x="1280" d="M434 521v-521h-275v1481h482q148 0 257 -35t179.5 -97.5t104 -149.5t33.5 -190q0 -108 -35.5 -197.5t-107.5 -154t-179.5 -100.5t-251.5 -36h-207zM434 736h207q76 0 132 19t93 54.5t55.5 86t18.5 113.5q0 59 -18.5 107t-55.5 82t-93 52t-132 18h-207v-532z" />
-<glyph unicode="Q" horiz-adv-x="1637" d="M1570 740q0 -99 -20.5 -189.5t-59 -169.5t-94 -145t-125.5 -116l376 -410h-228q-49 0 -88.5 13.5t-72.5 49.5l-217 239q-52 -14 -106.5 -21t-114.5 -7q-168 0 -306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5 t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5z" />
-<glyph unicode="R" horiz-adv-x="1341" d="M434 579v-579h-275v1481h451q152 0 260 -31.5t177 -87.5t101.5 -134.5t32.5 -172.5q0 -75 -22 -141.5t-63.5 -121t-102.5 -95.5t-139 -65q52 -30 90 -85l371 -547h-248q-36 0 -61 14.5t-42 40.5l-312 474q-17 27 -38 38.5t-62 11.5h-118zM434 776h172q78 0 136 19.5 t95 54t55.5 81.5t18.5 103q0 113 -74 173.5t-227 60.5h-176v-492z" />
-<glyph unicode="S" horiz-adv-x="1098" d="M943 1211q-11 -23 -26 -32t-35 -9t-46 16t-61 35.5t-81.5 35.5t-109.5 16q-57 0 -100 -14t-72 -38.5t-43.5 -59t-14.5 -75.5q0 -52 29.5 -86.5t77.5 -59.5t109 -44l126 -41q64 -22 125.5 -51.5t109.5 -74t77 -109t29 -156.5q0 -100 -34 -188t-100 -153t-161.5 -102 t-218.5 -37q-71 0 -139.5 13.5t-131.5 39t-117.5 61.5t-97.5 80l80 132q11 14 27 24t35 10q26 0 55.5 -21t70 -46.5t95.5 -46.5t131 -21q118 0 182.5 56t64.5 160q0 58 -29 95t-77 62t-109.5 42.5t-125 38t-125 49t-109.5 75t-77.5 115.5t-29.5 170q0 81 32.5 158t94.5 136 t152 95t206 36q131 0 241.5 -41t188.5 -115z" />
-<glyph unicode="T" horiz-adv-x="1218" d="M1193 1481v-227h-445v-1254h-276v1254h-447v227h1168z" />
-<glyph unicode="U" horiz-adv-x="1490" d="M745 222q80 0 143 26.5t106.5 75t66.5 117t23 153.5v887h276v-887q0 -132 -42.5 -244t-122.5 -193.5t-193.5 -127t-256.5 -45.5q-142 0 -255.5 45.5t-193 127t-122 193.5t-42.5 244v887h276v-886q0 -85 23 -153.5t66 -117.5t105.5 -75.5t142.5 -26.5z" />
-<glyph unicode="V" horiz-adv-x="1454" d="M4 1481h222q36 0 58.5 -17.5t33.5 -45.5l349 -903q17 -44 33 -96.5t30 -111.5q24 118 58 208l348 903q9 24 32.5 43.5t58.5 19.5h222l-598 -1481h-249z" />
-<glyph unicode="W" horiz-adv-x="2143" d="M12 1481h232q36 0 60 -17t32 -46l252 -886q9 -33 16.5 -71l15.5 -81q8 43 17.5 81.5t20.5 70.5l291 886q8 24 32.5 43.5t58.5 19.5h81q36 0 59.5 -17t32.5 -46l289 -886q23 -66 39 -145q7 40 15 77t16 68l252 886q7 26 31.5 44.5t59.5 18.5h216l-460 -1481h-249 l-323 1012l-13 42q-7 23 -13 48q-6 -26 -13 -48l-12 -42l-327 -1012h-249z" />
-<glyph unicode="X" horiz-adv-x="1390" d="M505 762l-472 719h274q29 0 41.5 -8t23.5 -25l337 -544q5 13 11 26t14 26l308 487q23 38 59 38h264l-477 -708l490 -773h-275q-28 0 -45 14.5t-28 32.5l-343 567q-4 -12 -9 -22.5l-10 -20.5l-329 -524q-11 -17 -27.5 -32t-41.5 -15h-258z" />
-<glyph unicode="Y" horiz-adv-x="1340" d="M808 575v-575h-276v575l-539 906h243q36 0 56.5 -17.5t35.5 -44.5l271 -494q24 -44 41 -83.5l32 -77.5q13 39 30 78.5t40 82.5l270 494q11 23 33.5 42.5t57.5 19.5h244z" />
-<glyph unicode="Z" horiz-adv-x="1263" d="M1207 1481v-102q0 -47 -26 -86l-760 -1073h768v-220h-1126v109q0 20 7.5 39t18.5 35l762 1079h-739v219h1095z" />
-<glyph unicode="[" horiz-adv-x="614" d="M118 -315v1899h420v-99q0 -27 -19 -46t-49 -19h-141v-1572h141q30 0 49 -18.5t19 -45.5v-99h-420z" />
-<glyph unicode="\" horiz-adv-x="799" d="M-29 1522h109q45 0 78 -23t51 -66l597 -1530h-107q-40 0 -78 23.5t-56 70.5z" />
-<glyph unicode="]" horiz-adv-x="614" d="M77 -315v99q0 27 19 45.5t48 18.5h142v1572h-142q-30 0 -48.5 19t-18.5 46v99h420v-1899h-420z" />
-<glyph unicode="^" d="M1053 796h-186q-24 0 -38.5 12t-24.5 30l-163 296l-28 54q-13 26 -21 52q-8 -27 -19.5 -53t-26.5 -53l-160 -296q-9 -17 -24.5 -29.5t-42.5 -12.5h-194l382 685h164z" />
-<glyph unicode="_" horiz-adv-x="806" d="M807 -137v-164h-807v164h807z" />
-<glyph unicode="`" horiz-adv-x="653" d="M236 1497q42 0 61.5 -14t35.5 -40l146 -249h-144q-29 0 -47 7.5t-36 28.5l-253 267h237z" />
-<glyph unicode="a" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z" />
-<glyph unicode="b" horiz-adv-x="1167" d="M138 0v1522h253v-600q62 67 141 106t185 39q86 0 157 -35.5t123 -103t80 -166.5t28 -228q0 -118 -32 -218.5t-90.5 -174t-142 -115t-187.5 -41.5q-48 0 -88 9.5t-72.5 27t-61 42.5t-53.5 56l-11 -71q-6 -27 -21 -38t-41 -11h-167zM630 870q-79 0 -135 -33t-104 -94v-471 q43 -53 94 -74t110 -21q57 0 103 21.5t78.5 65.5t50 111t17.5 159t-15 156t-42.5 104t-67 58t-89.5 18z" />
-<glyph unicode="c" horiz-adv-x="976" d="M873 828q-11 -14 -21.5 -22t-31.5 -8q-19 0 -37.5 11.5l-44 26.5t-61 26.5t-87.5 11.5q-67 0 -117 -24t-83.5 -69t-49.5 -109t-16 -145q0 -84 17.5 -149.5t51.5 -110t82 -67.5t109 -23q60 0 97.5 15t63 33l44.5 32.5t42 14.5q31 0 47 -23l72 -92q-42 -49 -91 -82.5 t-101.5 -53.5t-109 -28t-111.5 -8q-97 0 -183.5 36t-150.5 106t-101 170.5t-37 229.5q0 116 33 215t97.5 171t160 113t218.5 41q118 0 206.5 -38t159.5 -108z" />
-<glyph unicode="d" horiz-adv-x="1167" d="M874 0q-49 0 -64 46l-20 101q-33 -37 -69 -66.5t-77.5 -51t-89 -33t-102.5 -11.5q-86 0 -158 35.5t-123.5 104t-80 168.5t-28.5 229q0 117 32 217.5t91.5 174t142.5 115t186 41.5q88 0 150.5 -28t111.5 -75v555h253v-1522h-155zM538 185q79 0 134 33t104 93v471 q-43 52 -93.5 74t-109.5 22q-57 0 -103.5 -21.5t-79 -65t-49.5 -111t-17 -158.5q0 -92 14.5 -156t42.5 -104.5t68 -58.5t89 -18z" />
-<glyph unicode="e" horiz-adv-x="1094" d="M569 1067q99 0 183 -31.5t144 -92.5t94 -149.5t34 -202.5q0 -29 -2.5 -48t-9 -29.5t-18 -15t-28.5 -4.5h-650q11 -162 87 -238t201 -76q61 0 106 14.5t78 32l58 31.5t49 14q15 0 26.5 -6t19.5 -17l74 -92q-42 -49 -94.5 -82.5t-109 -53.5t-115.5 -28t-114 -8 q-110 0 -204 36t-164 107.5t-109.5 176.5t-39.5 243q0 108 34.5 202.5t99.5 164.5t158.5 111t211.5 41zM574 886q-111 0 -173 -62.5t-79 -177.5h475q0 49 -13.5 92.5t-41 76.5t-70 52t-98.5 19z" />
-<glyph unicode="f" horiz-adv-x="717" d="M180 0v860l-91 14q-30 5 -47.5 20.5t-17.5 43.5v103h156v78q0 90 27 162t78 122t123.5 76.5t163.5 26.5q73 0 136 -19l-6 -127q-2 -30 -27.5 -37t-59.5 -7q-45 0 -80 -10t-59.5 -34t-37.5 -63.5t-13 -97.5v-70h273v-180h-265v-861h-253z" />
-<glyph unicode="g" horiz-adv-x="1059" d="M499 1069q68 0 127 -14t108 -40h302v-94q0 -24 -12 -37.5t-42 -18.5l-94 -17q10 -27 15.5 -56.5t5.5 -62.5q0 -78 -31 -141t-86 -107t-130 -68t-163 -24q-59 0 -116 11q-49 -30 -49 -66q0 -32 29 -47t76.5 -21t108 -7.5t124 -6.5t124 -18t108 -40.5t77 -75t29.5 -122.5 q0 -70 -34.5 -135.5t-99.5 -116.5t-159 -82.5t-215 -31.5q-120 0 -208 23t-146 61.5t-86.5 89t-28.5 104.5q0 74 45 124t125 80q-39 22 -62.5 57.5t-23.5 92.5q0 24 8 49t25 49.5t42.5 46.5t60.5 39q-80 43 -125.5 115t-45.5 168q0 78 31 141t87 107.5t132.5 68t166.5 23.5z M776 -47q0 31 -18.5 50.5t-50 30t-74 15.5t-90.5 8l-98 5q-51 3 -98 9q-43 -24 -69 -56t-26 -74q0 -28 14 -52t44 -41.5t78 -27t118 -9.5q71 0 122 10.5t84 29.5t48.5 45t15.5 57zM499 551q47 0 81.5 13t58 35.5t35 54t11.5 69.5q0 78 -46.5 123.5t-139.5 45.5t-140 -45.5 t-47 -123.5q0 -37 12 -68.5t35 -54.5t58.5 -36t81.5 -13z" />
-<glyph unicode="h" horiz-adv-x="1164" d="M135 0v1522h253v-585q61 58 135 94t173 36q86 0 152.5 -29t111.5 -82t68 -126t23 -161v-669h-253v669q0 96 -44.5 148.5t-133.5 52.5q-66 0 -123.5 -29.5t-108.5 -80.5v-760h-253z" />
-<glyph unicode="i" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252zM442 1357q0 -33 -13 -61.5t-35 -50t-52 -34.5t-63 -13t-62.5 13t-51 34.5t-34 50t-12.5 61.5q0 34 12.5 63.5t34 51t51 34.5t62.5 13q34 0 63.5 -13t51.5 -34.5t35 -51t13 -63.5z" />
-<glyph unicode="j" horiz-adv-x="550" d="M404 1051v-1087q0 -69 -17.5 -129t-57 -105.5t-103.5 -72t-156 -26.5q-36 0 -67 5t-62 15l8 136q3 20 16 26t51 6t64 7.5t42 24.5t23 44.5t7 68.5v1087h252zM442 1357q0 -33 -13 -61.5t-35 -50t-52 -34.5t-63 -13t-62.5 13t-51 34.5t-34 50t-12.5 61.5q0 34 12.5 63.5 t34 51t51 34.5t62.5 13q34 0 63.5 -13t51.5 -34.5t35 -51t13 -63.5z" />
-<glyph unicode="k" horiz-adv-x="1129" d="M391 1522v-872h47q26 0 40.5 7.5t30.5 26.5l261 323q17 20 36.5 32t51.5 12h232l-327 -391q-17 -22 -35.5 -39.5t-40.5 -30.5q22 -15 38 -35.5l33 -44.5l350 -510h-228q-30 0 -50.5 10t-36.5 35l-268 398q-15 24 -30.5 31t-45.5 7h-58v-481h-253v1522h253z" />
-<glyph unicode="l" horiz-adv-x="555" d="M404 1522v-1522h-252v1522h252z" />
-<glyph unicode="m" horiz-adv-x="1724" d="M135 0v1051h155q49 0 64 -46l17 -78q28 31 58 56.5t64 44t73.5 29t86.5 10.5q99 0 163.5 -54t95.5 -143q25 52 62 89.5t81 61t93.5 35t99.5 11.5q87 0 154.5 -26.5t114 -78t70.5 -125t24 -168.5v-669h-253v669q0 100 -44 150.5t-129 50.5q-39 0 -72.5 -13t-58.5 -38 t-39.5 -63t-14.5 -87v-669h-254v669q0 105 -42 153t-125 48q-54 0 -102 -27t-89 -74v-769h-253z" />
-<glyph unicode="n" horiz-adv-x="1164" d="M135 0v1051h155q49 0 64 -46l18 -83q32 33 67 59.5t74.5 46t84.5 29.5t98 10q86 0 152.5 -29t111.5 -82t68 -126t23 -161v-669h-253v669q0 96 -44.5 148.5t-133.5 52.5q-66 0 -123.5 -29.5t-108.5 -80.5v-760h-253z" />
-<glyph unicode="o" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5z" />
-<glyph unicode="p" horiz-adv-x="1158" d="M135 -343v1394h155q25 0 42 -11.5t22 -34.5l21 -98q63 73 145.5 118t193.5 45q86 0 157 -36t123 -104t80 -167.5t28 -228.5q0 -118 -32 -218.5t-90.5 -174t-142 -115t-187.5 -41.5q-89 0 -151 27t-111 75v-430h-253zM627 870q-79 0 -135 -33t-104 -94v-471 q43 -53 93.5 -74t109.5 -21q57 0 103.5 21.5t79 65.5t50 111t17.5 159t-15 156t-42.5 104t-67 58t-89.5 18z" />
-<glyph unicode="q" horiz-adv-x="1167" d="M1029 1051v-1394h-253v475q-32 -34 -67 -61t-75 -46t-85 -29.5t-97 -10.5q-86 0 -158 35.5t-123.5 104t-80 168.5t-28.5 229q0 117 32 217.5t91.5 174t142.5 115t186 41.5q49 0 89.5 -8.5t75 -25t63 -39t55.5 -51.5l13 59q5 24 22.5 35t41.5 11h155zM538 185q79 0 134 33 t104 93v471q-43 52 -93.5 74t-109.5 22q-57 0 -103.5 -21.5t-79 -65t-49.5 -111t-17 -158.5q0 -92 14.5 -156t42.5 -104.5t68 -58.5t89 -18z" />
-<glyph unicode="r" horiz-adv-x="836" d="M135 0v1051h149q39 0 54 -14.5t20 -49.5l16 -127q56 97 132 153.5t170 56.5q78 0 129 -36l-33 -189q-3 -18 -13 -26t-28 -8q-15 0 -41.5 7t-71.5 7q-79 0 -135 -43.5t-95 -127.5v-654h-253z" />
-<glyph unicode="s" horiz-adv-x="894" d="M759 846q-10 -16 -21.5 -23t-28.5 -7q-18 0 -40 10l-48 23q-28 13 -63.5 23.5t-83.5 10.5q-75 0 -118 -32t-43 -83q0 -34 22 -57t58.5 -40.5t82.5 -31t94 -30t94.5 -37.5t82.5 -53.5t58 -77.5t22 -108q0 -76 -27.5 -140t-80.5 -110.5t-131.5 -72.5t-179.5 -26 q-54 0 -106 9.5t-99.5 27t-88 41t-71.5 51.5l58 96q11 17 26.5 26.5t39.5 9.5t44.5 -13.5t48.5 -29t65 -28.5t95 -13q45 0 77 10.5t53 28t31 40.5t10 48q0 37 -22 60.5t-58.5 41t-83 31t-95 30t-95.5 38.5t-83 56t-58 83t-22 118q0 65 25.5 123.5t75 102t124 69.5t171.5 26 q109 0 198 -36t148 -94z" />
-<glyph unicode="t" horiz-adv-x="792" d="M480 -16q-136 0 -209.5 77t-73.5 213v587h-107q-20 0 -35 13.5t-15 39.5v101l169 27l53 287q4 20 19 31.5t37 11.5h132v-331h276v-180h-276v-569q0 -49 24.5 -77t65.5 -28q24 0 39.5 6t27 12t21 11.5t18.5 5.5q11 0 18.5 -5.5t15.5 -16.5l76 -123q-55 -46 -127 -69.5 t-149 -23.5z" />
-<glyph unicode="u" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 84q-33 -33 -68 -60t-74.5 -46t-85 -29.5t-97.5 -10.5q-86 0 -152 29t-111 82t-68 126.5t-23 161.5v668h253z" />
-<glyph unicode="v" horiz-adv-x="1092" d="M662 0h-230l-418 1051h210q28 0 47 -13.5t26 -33.5l203 -562q17 -49 29 -96t21 -94q9 47 21 94t30 96l208 562q7 20 25.5 33.5t44.5 13.5h199z" />
-<glyph unicode="w" horiz-adv-x="1619" d="M7 1051h201q29 0 48 -13.5t25 -33.5l150 -562q12 -46 20 -90l15 -88q11 44 24 88l27 90l174 564q6 20 24.5 33.5t43.5 13.5h111q28 0 46.5 -13.5t24.5 -33.5l172 -574q13 -44 24 -85l21 -84q7 44 16 88t22 91l156 562q5 20 24.5 33.5t44.5 13.5h192l-333 -1051h-204 q-33 0 -47 45l-189 607q-9 30 -17 60t-13 60q-6 -31 -13 -61t-17 -61l-191 -605q-14 -45 -55 -45h-194z" />
-<glyph unicode="x" horiz-adv-x="1105" d="M384 542l-345 509h244q28 0 41 -8t23 -25l220 -351q5 17 13 34.5t19 34.5l177 277q12 19 25.5 28.5t33.5 9.5h232l-346 -498l360 -553h-243q-28 0 -45 14.5t-28 32.5l-223 366q-9 -37 -26 -62l-197 -304q-11 -17 -27.5 -32t-40.5 -15h-226z" />
-<glyph unicode="y" horiz-adv-x="1092" d="M508 -289q-11 -27 -29 -40.5t-55 -13.5h-188l196 421l-425 973h221q31 0 47.5 -14.5t24.5 -32.5l224 -545q11 -27 19.5 -55.5t14.5 -57.5q8 30 18 57.5l21 56.5l211 544q8 20 27 33.5t43 13.5h202z" />
-<glyph unicode="z" horiz-adv-x="961" d="M895 946q0 -27 -9.5 -52t-23.5 -42l-500 -657h519v-195h-812v105q0 17 8 41.5t25 46.5l504 664h-508v194h797v-105z" />
-<glyph unicode="{" horiz-adv-x="614" d="M153 420q0 62 -29.5 101.5t-93.5 39.5v147q65 0 94 39t29 102q0 48 -7 95.5t-15.5 96t-15 97t-6.5 98.5q0 78 22.5 142t69 110t117.5 71t167 25h55v-113q0 -13 -6 -22.5t-14.5 -16t-17.5 -9.5t-17 -3h-9q-72 0 -109.5 -45t-37.5 -124q0 -56 6 -107.5t13 -100.5l12 -96 q6 -47 7 -95q0 -39 -11 -74t-32 -63t-50 -49.5t-66 -31.5q37 -11 66 -32t50 -50t32 -63.5t11 -72.5q0 -48 -7 -95l-12 -96q-7 -49 -13 -100.5t-6 -108.5q0 -78 37.5 -123t109.5 -45h9q7 0 16.5 -3t18 -9t14.5 -16t6 -24v-111h-55q-96 0 -167 25t-117.5 70.5t-69 109.5 t-22.5 142q0 50 6.5 98.5t15 96.5t15.5 96.5t7 96.5z" />
-<glyph unicode="|" horiz-adv-x="614" d="M209 1584h197v-1927h-197v1927z" />
-<glyph unicode="}" horiz-adv-x="614" d="M462 420q0 -48 6.5 -96.5t15.5 -96.5t15.5 -96.5t6.5 -98.5q0 -78 -22.5 -142t-69 -109.5t-118 -70.5t-167.5 -25h-54v111q0 13 5.5 23.5t14 16.5t18 9t16.5 3h9q72 0 110 45.5t38 122.5q0 56 -6.5 108l-12.5 101l-13 96q-6 47 -6 95q0 38 10.5 72.5t31 63.5t50.5 50 t67 32q-37 10 -67 31.5t-50.5 49.5t-31 63t-10.5 74q0 48 6 95l13 96q7 49 13 100.5t6 107.5q0 79 -38 124t-110 45h-9q-7 0 -16.5 3t-18 9.5t-14 16t-5.5 22.5v113h54q96 0 167.5 -25t118 -71t69 -110t22.5 -142q0 -50 -6.5 -98.5t-15.5 -97t-15.5 -96t-6.5 -95.5 q0 -62 29 -101.5t94 -39.5v-147q-65 0 -94 -39.5t-29 -101.5z" />
-<glyph unicode="~" d="M763 664q57 0 89 36.5t32 103.5h203q0 -79 -20.5 -143t-60 -109.5t-97 -70t-131.5 -24.5q-54 0 -103.5 14t-94.5 31l-83 32q-39 14 -72 14q-57 0 -89 -37t-32 -103h-204q0 79 21 142.5t60.5 109.5t97 70.5t131.5 24.5q54 0 103.5 -14.5t94.5 -31.5l83 -31q39 -14 72 -14z " />
-<glyph unicode="&#xa1;" horiz-adv-x="738" d="M253 -343v546q0 93 9 182.5t25 189.5h171q15 -100 24.5 -189.5t9.5 -182.5v-546h-239zM214 913q0 33 12 61t32.5 48.5t49 32.5t61.5 12t61 -12t49 -32.5t33 -48.5t12 -61t-12 -61t-33 -48.5t-49.5 -32.5t-60.5 -12q-33 0 -61.5 12t-49 32.5t-32.5 48.5t-12 61z" />
-<glyph unicode="&#xa2;" d="M552 -8q-91 13 -169 54.5t-135.5 109.5t-89.5 161t-32 208q0 112 34 208.5t100 168.5t162.5 115t221.5 48l14 161q2 24 20.5 43.5t48.5 19.5h93l-20 -234q81 -14 146.5 -48.5t120.5 -85.5l-66 -90q-10 -14 -20 -21t-31 -7q-14 0 -29.5 6.5t-35.5 17t-44.5 20.5t-57.5 18 l-59 -689q54 5 90.5 20t62.5 30l46 28q19 12 40 12q31 0 47 -21l69 -90q-36 -42 -79 -72t-90 -50t-98 -30.5t-104 -14.5l-13 -151q-2 -25 -20.5 -44.5t-47.5 -19.5h-93zM376 525q0 -137 50 -221.5t143 -114.5l59 683q-129 -16 -190.5 -106t-61.5 -241z" />
-<glyph unicode="&#xa3;" d="M40 695q0 35 21.5 60t63.5 25h111v242q0 96 28.5 182.5t87 151.5t146.5 103t207 38q82 0 146.5 -21t115.5 -57t88.5 -84.5t63.5 -104.5l-101 -65q-33 -16 -59 -16q-38 0 -67 34q-19 23 -38 41.5t-41 32t-48.5 20.5t-59.5 7q-105 0 -157.5 -69t-52.5 -192v-243h418v-100 q0 -25 -20 -45.5t-51 -20.5h-347v-198q0 -68 -25.5 -120.5t-69.5 -97.5q76 17 151 17h600v-106q0 -18 -7.5 -38t-22 -36t-34.5 -25.5t-45 -9.5h-982v159q35 8 67 23t56 38t38.5 54t14.5 73v267h-196v81z" />
-<glyph unicode="&#xa4;" d="M216 689q0 54 14 103t39 92l-156 155l128 125l153 -153q44 27 94.5 41.5t105.5 14.5q53 0 102 -14t92 -39l156 155l126 -126l-155 -154q27 -44 42 -94.5t15 -105.5q0 -54 -14 -102t-39 -91l156 -156l-128 -126l-154 154q-43 -27 -93.5 -41.5t-105.5 -14.5 q-53 0 -102 13.5t-92 39.5l-156 -156l-126 127l154 153q-27 44 -41.5 94.5t-14.5 105.5zM402 689q0 -39 15 -74t41 -61.5t61 -41.5t75 -15t75.5 15t61.5 41.5t41 61.5t15 74q0 41 -15 76.5t-41 61.5t-61.5 41.5t-75.5 15.5t-75 -15.5t-61 -41.5t-41 -61.5t-15 -76.5z" />
-<glyph unicode="&#xa5;" d="M136 648h283l-408 833h210q36 0 58.5 -17t34.5 -45l225 -499q20 -46 32.5 -85t20.5 -77q8 38 20 77t32 85l222 499q11 24 34 43t57 19h212l-408 -833h282v-141h-326v-97h326v-141h-326v-269h-253v269h-328v141h328v97h-328v141z" />
-<glyph unicode="&#xa6;" horiz-adv-x="614" d="M209 1584h197v-828h-197v828zM209 484h197v-827h-197v827z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1034" d="M847 1275q-10 -16 -21.5 -23.5t-28.5 -7.5q-19 0 -41 10l-48 23q-28 13 -63.5 23.5t-83.5 10.5q-43 0 -75.5 -10t-54.5 -27t-34 -39.5t-12 -47.5q0 -33 24 -57.5t64 -46.5t91 -43l104 -43q53 -23 103.5 -50.5t90.5 -63.5t64 -83t24 -109q0 -83 -38.5 -150t-123.5 -108 q46 -38 75.5 -88t29.5 -120q0 -76 -27 -139.5t-80.5 -110.5t-132 -73t-180.5 -26q-54 0 -106 10t-99.5 27t-88 40.5t-70.5 51.5l59 96q11 17 26 26.5t38 9.5q24 0 45 -13t49.5 -28.5t68.5 -29t101 -13.5q84 0 130.5 35t46.5 96q0 41 -24.5 71t-65.5 53t-93 42l-105 40 q-54 22 -106 48t-93 62t-65.5 85t-24.5 116q0 81 42.5 145t129.5 102q-47 40 -76.5 95t-29.5 133q0 65 25 122.5t75 101.5t124 70t171 26q109 0 198.5 -36t147.5 -94zM321 742q0 -43 29.5 -74t77 -56t107 -48t117.5 -50q41 20 59.5 51.5t18.5 68.5q0 45 -28.5 76t-74.5 57 t-104 48.5t-115 48.5q-46 -25 -66.5 -54t-20.5 -68z" />
-<glyph unicode="&#xa8;" horiz-adv-x="653" d="M276 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM659 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29 t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1620" d="M1041 524q11 0 20.5 -4.5t15.5 -12.5l84 -89q-57 -73 -144 -111.5t-205 -38.5q-102 0 -185 36.5t-142 100.5t-91 150.5t-32 187.5q0 104 36 191.5t99.5 150.5t149 98t186.5 35q115 0 196 -38t136 -99l-66 -91q-6 -8 -16.5 -16t-27.5 -8t-32.5 10t-37 22.5t-54.5 22.5 t-85 10q-61 0 -109.5 -20t-81.5 -57.5t-50.5 -90.5t-17.5 -120q0 -70 18 -123t49.5 -89t75 -55t94.5 -19q50 0 82.5 8t55 19.5t39.5 22.5t40 17zM54 740q0 104 27.5 201t76.5 181t118 153.5t153 118.5t180.5 76t200.5 27t201 -27t181 -76t153 -118.5t118 -153.5t76.5 -180.5 t27.5 -201.5q0 -103 -27.5 -200t-76.5 -180.5t-118 -152.5t-153 -118t-181 -76t-201 -27t-200.5 27t-180.5 76t-153 118t-118 152.5t-76.5 180t-27.5 200.5zM193 740q0 -133 47.5 -248.5t131 -201t196 -135t242.5 -49.5t243.5 49.5t197.5 135t132.5 201t48.5 248.5 q0 89 -22 171t-62 153.5t-97 129t-125.5 99t-148.5 64t-167 22.5t-166.5 -22.5t-148 -64t-124.5 -99t-95.5 -129t-61 -153.5t-21.5 -171z" />
-<glyph unicode="&#xaa;" horiz-adv-x="712" d="M637 861h-85q-25 0 -39 6.5t-23 30.5l-12 37q-25 -20 -47 -35.5t-46 -26t-51 -15.5t-61 -5q-43 0 -77.5 11.5t-59.5 33.5t-39 54t-14 74q0 34 17.5 69t60.5 64t115.5 48t183.5 22v25q0 55 -24 78.5t-70 23.5q-35 0 -57.5 -7.5t-40 -16.5t-33 -16t-36.5 -7q-19 0 -32.5 10 t-21.5 23l-31 59q57 52 125.5 76t148.5 24q57 0 103.5 -18.5t78.5 -51.5t49.5 -78t17.5 -99v-393zM331 977q39 0 68.5 14t60.5 43v83q-60 -2 -99 -9t-62.5 -18t-32.5 -24.5t-9 -30.5q0 -33 19 -45.5t55 -12.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="995" d="M126 535v32l262 406l83 -39q20 -9 29.5 -23.5t9.5 -31.5q0 -22 -13 -44l-142 -241q-14 -27 -32 -43q16 -14 32 -43l142 -242q13 -23 13 -45q0 -35 -39 -53l-83 -39zM463 535v32l262 406l83 -39q20 -9 29.5 -23.5t9.5 -31.5q0 -22 -13 -44l-142 -241q-14 -27 -33 -43 q16 -14 33 -43l142 -242q13 -23 13 -45q0 -35 -39 -53l-83 -39z" />
-<glyph unicode="&#xac;" d="M139 781h908v-477h-214v290h-694v187z" />
-<glyph unicode="&#xad;" horiz-adv-x="0" />
-<glyph unicode="&#xae;" horiz-adv-x="1620" d="M54 740q0 104 27.5 201t76.5 181t118 153.5t153 118.5t180.5 76t200.5 27t201 -27t181 -76t153 -118.5t118 -153.5t76.5 -180.5t27.5 -201.5q0 -103 -27.5 -200t-76.5 -180.5t-118 -152.5t-153 -118t-181 -76t-201 -27t-200.5 27t-180.5 76t-153 118t-118 152.5 t-76.5 180t-27.5 200.5zM193 740q0 -133 47.5 -248.5t131 -201t196 -135t242.5 -49.5t243.5 49.5t197.5 135t132.5 201t48.5 248.5q0 89 -22 171t-62 153.5t-97 129t-125.5 99t-148.5 64t-167 22.5t-166.5 -22.5t-148 -64t-124.5 -99t-95.5 -129t-61 -153.5t-21.5 -171z M695 616v-332h-219v918h329q191 0 280.5 -68.5t89.5 -196.5q0 -91 -47.5 -159t-146.5 -100q24 -13 39 -33t31 -47l185 -314h-211q-46 0 -64 33l-148 270q-10 14 -23 21.5t-38 7.5h-57zM695 773h91q52 0 86 9t53 26t26 43t7 58t-6 56t-23 40t-47 23.5t-77 7.5h-110v-263z" />
-<glyph unicode="&#xaf;" horiz-adv-x="653" d="M20 1405h613v-162h-613v162z" />
-<glyph unicode="&#xb0;" horiz-adv-x="822" d="M56 1150q0 73 27.5 137t75 111t112 74t139.5 27t139.5 -27t113 -74t76 -111t27.5 -137q0 -71 -27.5 -134.5t-76 -111t-113.5 -75t-139 -27.5q-75 0 -139.5 27.5t-112 75t-75 111t-27.5 134.5zM232 1148q0 -38 13.5 -71t37.5 -57t56.5 -37.5t70.5 -13.5t70.5 13.5 t56.5 37.5t37.5 57t13.5 71q0 39 -13.5 72t-37.5 58t-57 39t-70 14q-38 0 -70.5 -14t-56.5 -39t-37.5 -58t-13.5 -72z" />
-<glyph unicode="&#xb1;" d="M694 1271v-363h399v-188h-399v-349h-205v349h-396v188h396v363h205zM93 269h1000v-187h-1000v187z" />
-<glyph unicode="&#xb2;" horiz-adv-x="681" d="M358 1689q59 0 106 -17.5t79 -47.5t48.5 -70.5t16.5 -87.5q0 -42 -12.5 -76.5t-33.5 -66.5t-49 -61l-57 -61l-131 -133q29 8 56.5 12.5t50.5 4.5h132q29 0 45 -15t16 -41v-107h-554v58q0 17 6.5 36.5t22.5 36.5l214 211q23 23 43.5 47.5t35 49.5t23 50.5t8.5 48.5 q0 37 -20 60t-56 23q-34 0 -54.5 -17t-33.5 -48q-11 -18 -24 -27.5t-36 -9.5q-5 0 -11 0.5t-13 1.5l-101 15q17 118 92.5 174.5t190.5 56.5z" />
-<glyph unicode="&#xb3;" horiz-adv-x="681" d="M369 1689q58 0 103 -17t77 -45t48 -63t16 -73q0 -65 -26.5 -109.5t-84.5 -68.5q61 -20 93 -57.5t32 -98.5q0 -63 -23.5 -109t-61.5 -76t-86 -44.5t-98 -14.5q-55 0 -99 11t-78.5 35t-60 63.5t-44.5 96.5l79 32q23 8 41 8q38 0 52 -29q6 -11 14 -23t20.5 -22t29 -16 t37.5 -6q46 0 70.5 25.5t24.5 61.5q0 28 -7 46t-24 29.5t-46 16t-72 4.5v119q43 0 71 6.5t44 18.5t22.5 29.5t6.5 38.5q0 38 -20 60t-60 22q-36 0 -56.5 -17t-32.5 -43q-9 -20 -21 -30t-33 -10q-11 0 -27 3l-93 15q8 58 32.5 102t60 72.5t82 42.5t98.5 14z" />
-<glyph unicode="&#xb4;" horiz-adv-x="653" d="M681 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 85q-32 -32 -63 -54t-62.5 -35.5t-66 -20t-73.5 -6.5q-60 0 -109 18.5t-87 52.5q11 -45 14.5 -93t3.5 -90v-246h-125q-53 0 -82 27t-29 78v1289h253z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1434" d="M1403 1481v-212h-219v-1483h-221v1483h-241v-1483h-221v859q-106 0 -192.5 33.5t-147.5 90t-94 132.5t-33 161q0 93 33 170t94 132t147 86t193 31h902z" />
-<glyph unicode="&#xb7;" horiz-adv-x="572" d="M93 609q0 40 15 75.5t41 61.5t61 41t75 15q41 0 76 -15t61.5 -41t41.5 -61.5t15 -75.5t-15 -74t-41.5 -60t-61.5 -41t-76 -15q-40 0 -75 15t-61 41t-41 60t-15 74z" />
-<glyph unicode="&#xb8;" horiz-adv-x="653" d="M187 -232q7 0 15 -2.5l17.5 -5.5t21.5 -5t28 -2q34 0 51 13t17 31q0 30 -37 43t-114 23l46 151h158l-20 -70q91 -23 128 -61.5t37 -90.5q0 -34 -18 -61.5t-51 -47t-79 -30t-101 -10.5q-42 0 -78.5 6t-72.5 17l24 78q5 24 28 24z" />
-<glyph unicode="&#xb9;" horiz-adv-x="681" d="M165 1038h142v369l5 52l-79 -62q-16 -12 -34 -13q-15 0 -27.5 6.5t-17.5 14.5l-57 77l239 198h152v-642h118v-116h-441v116z" />
-<glyph unicode="&#xba;" horiz-adv-x="794" d="M399 1499q74 0 135.5 -22.5t105.5 -64t68 -101.5t24 -134q0 -76 -24 -137t-68 -103.5t-105.5 -65t-135.5 -22.5q-76 0 -137.5 22.5t-105.5 65t-69 103.5t-25 137q0 75 25 134.5t69 101t105.5 64t137.5 22.5zM399 996q69 0 102.5 43.5t33.5 135.5q0 91 -33.5 134 t-102.5 43q-73 0 -106 -43t-33 -134t33 -135t106 -44z" />
-<glyph unicode="&#xbb;" horiz-adv-x="995" d="M269 129l-83 39q-20 9 -29.5 23.5t-9.5 31.5q0 20 14 43l141 242q16 29 33 43q-18 16 -33 43l-141 241q-13 23 -14 44q0 37 39 55l83 39l262 -406v-32zM606 129l-83 39q-20 9 -29.5 23.5t-9.5 31.5q0 20 14 43l141 242q16 29 33 43q-18 16 -33 43l-141 241q-13 23 -14 44 q0 37 39 55l83 39l262 -406v-32z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1458" d="M466 73q-27 -42 -57 -57.5t-69 -15.5h-109l854 1398q24 39 55.5 61t78.5 22h107zM1352 289h96v-90q0 -13 -9 -23.5t-26 -10.5h-61v-165h-152v165h-296q-25 0 -38.5 10.5t-16.5 27.5l-15 78l343 478h175v-470zM145 840h143v368l5 53l-79 -63q-16 -12 -35 -12 q-15 0 -27.5 6t-17.5 14l-56 77l238 199h153v-642h118v-117h-442v117zM1200 461q0 24 1.5 52.5t5.5 58.5l-207 -283h200v172z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1458" d="M424 73q-27 -42 -57 -57.5t-69 -15.5h-109l854 1398q24 39 55.5 61t78.5 22h107zM1155 767q59 0 106 -17.5t79 -47t48.5 -70t16.5 -87.5q0 -42 -13 -77t-34 -66.5t-48 -61.5l-58 -60l-131 -134q29 8 56.5 13t51.5 5h132q29 0 44.5 -15.5t15.5 -40.5v-108h-554v58 q0 17 7 37t23 36l214 211q23 23 43.5 48t34.5 50t23 50t9 49q0 37 -20 60t-56 23q-34 0 -53.5 -16t-34.5 -50q-16 -37 -61 -37q-5 0 -10.5 0.5t-12.5 1.5l-102 16q17 118 93 174t191 56zM145 840h143v368l5 53l-79 -63q-16 -12 -35 -12q-15 0 -27.5 6t-17.5 14l-56 77 l238 199h153v-642h118v-117h-442v117z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1459" d="M469 73q-27 -42 -57 -57.5t-69 -15.5h-109l855 1398q24 39 55.5 61t77.5 22h107zM1352 289h96v-90q0 -13 -9 -23.5t-26 -10.5h-61v-165h-152v165h-296q-25 0 -38.5 10.5t-16.5 27.5l-15 78l343 478h175v-470zM349 1490q58 0 103.5 -17t77 -44.5t48 -63t16.5 -73.5 q0 -65 -26.5 -109t-85.5 -69q61 -20 93 -57.5t32 -98.5q0 -63 -23.5 -108.5t-61.5 -76t-86 -44.5t-97 -14q-55 0 -99 10.5t-78.5 34.5t-60 63.5t-45.5 97.5l79 31q23 8 41 9q38 0 52 -29q6 -11 14.5 -23.5t20.5 -22t28.5 -16t38.5 -6.5q46 0 70.5 25.5t24.5 61.5 q0 28 -7 46.5t-24 29.5t-46.5 16t-72.5 5v118q43 0 71.5 7t44.5 18.5t22.5 29t6.5 39.5q0 38 -20 59.5t-60 21.5q-36 0 -57 -16t-32 -44q-10 -20 -22 -30t-32 -10q-11 0 -27 3l-93 16q8 58 32 101.5t60 72t82 42.5t98 14zM1200 461q0 24 1.5 52.5t5.5 58.5l-207 -283h200 v172z" />
-<glyph unicode="&#xbf;" horiz-adv-x="861" d="M840 -208q-36 -31 -77.5 -58t-89.5 -48t-104.5 -32.5t-122.5 -11.5q-89 0 -162 23.5t-125.5 67.5t-81 107t-28.5 143q0 78 22.5 132t57 92.5t74.5 64.5l77 51q36 24 62 47.5t31 56.5l23 148h173l18 -166q1 -5 1 -10v-10q0 -47 -22.5 -78.5t-56.5 -56.5t-73 -47t-72.5 -49 t-56 -63.5t-22.5 -89.5q0 -37 13.5 -66t38 -50t58.5 -32.5t74 -11.5q58 0 98.5 13.5t69 29t47.5 28.5t36 13q36 0 52 -31zM332 913q0 32 11.5 60.5t32.5 49t50 33t61 12.5t61 -12.5t49 -33t32.5 -49t12.5 -60.5q0 -33 -12.5 -61t-32.5 -48.5t-49 -32t-61 -11.5 q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM582 1834q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5 t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM1121 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207 q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM1101 1586h-191q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68 q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM854 1740q28 0 44.5 16t17.5 48h137q0 -51 -13 -93t-37.5 -71.5t-60.5 -46.5t-82 -17 q-37 0 -71.5 11t-65.5 25l-58 24q-27 11 -49 12q-28 0 -44 -17t-17 -50h-140q0 50 13.5 92.5t39 73.5t61.5 47.5t81 16.5q37 0 71.5 -11t66.5 -24l57 -25q27 -11 49 -11z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM644 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5 t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM1086 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1454" d="M1451 0h-213q-36 0 -59 18t-33 44l-111 303h-613l-111 -303q-8 -24 -32 -43t-59 -19h-214l582 1481h281zM493 559h472l-181 493l-27 77.5t-29 96.5q-14 -52 -28 -97.5t-27 -78.5zM517 1723q0 44 17.5 80t46 61.5t66.5 40t80 14.5q44 0 82.5 -14.5t68.5 -40t47.5 -61.5 t17.5 -80q0 -43 -17.5 -78t-47.5 -60.5t-68.5 -39.5t-82.5 -14q-42 0 -80 14t-66.5 39.5t-46 60.5t-17.5 78zM638 1723q0 -40 24 -65.5t69 -25.5q41 0 65.5 25.5t24.5 65.5q0 43 -24.5 68t-65.5 25q-45 0 -69 -25t-24 -68z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1912" d="M1823 1262h-711l51 -411h521v-212h-495l51 -419h583v-220h-816l-45 365h-533l-145 -304q-13 -28 -40 -44.5t-64 -16.5h-209l753 1481h1099v-219zM523 559h415l-88 717q-16 -52 -34 -98t-36 -85z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1373" d="M647 -232q7 0 15 -2.5l17.5 -5.5t21.5 -5t28 -2q34 0 51 13t17 31q0 30 -37 43t-114 23l38 126q-144 15 -259 77t-195 161t-123.5 229.5t-43.5 283.5q0 167 55.5 306t156 239t240 156t308.5 56q165 0 288.5 -52.5t211.5 -139.5l-92 -128q-8 -12 -21 -21.5t-35 -9.5 q-24 0 -48.5 18.5t-62.5 40t-96 40t-147 18.5q-104 0 -191.5 -36.5t-150.5 -104t-98.5 -164.5t-35.5 -218q0 -125 35.5 -222t96 -163.5t142 -102t176.5 -35.5q56 0 101.5 6t84 19.5t72.5 34.5t68 52q10 9 21.5 14.5t24.5 5.5q23 0 39 -17l109 -118q-82 -102 -198.5 -160 t-274.5 -68l-13 -42q91 -23 128 -61.5t37 -90.5q0 -34 -18 -61.5t-50.5 -47t-78.5 -30t-102 -10.5q-42 0 -78 6t-72 17l23 78q6 24 29 24z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1172" d="M1083 1481v-219h-656v-411h517v-212h-517v-419h656v-220h-933v1481h933zM486 1834q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1172" d="M1083 1481v-219h-656v-411h517v-212h-517v-419h656v-220h-933v1481h933zM1025 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xca;" horiz-adv-x="1172" d="M1083 1481v-219h-656v-411h517v-212h-517v-419h656v-220h-933v1481h933zM1005 1586h-191q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1172" d="M1083 1481v-219h-656v-411h517v-212h-517v-419h656v-220h-933v1481h933zM548 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM990 1707 q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#xcc;" horiz-adv-x="643" d="M460 0h-277v1481h277v-1481zM181 1834q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph unicode="&#xcd;" horiz-adv-x="643" d="M460 0h-277v1481h277v-1481zM720 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xce;" horiz-adv-x="643" d="M460 0h-277v1481h277v-1481zM699 1586h-191q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph unicode="&#xcf;" horiz-adv-x="643" d="M460 0h-277v1481h277v-1481zM242 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM684 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10 q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1618" d="M54 823h185v658h565q168 0 306 -55t236.5 -152.5t152.5 -234t54 -299.5t-54 -299t-152.5 -234t-236.5 -152.5t-306 -54.5h-565v667h-185v156zM1271 740q0 122 -32.5 219t-93 164t-147 103t-194.5 36h-288v-439h370v-156h-370v-448h288q109 0 195 36t146.5 103t93 163.5 t32.5 218.5z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1548" d="M294 1481q18 0 30.5 -1.5t22 -6.5t19 -13.5t20.5 -22.5l777 -991q-4 36 -5.5 70.5t-1.5 64.5v900h243v-1481h-143q-33 0 -54 10t-42 37l-774 986q3 -33 4.5 -65t1.5 -59v-909h-242v1481h144zM917 1740q28 0 44.5 16t17.5 48h137q0 -51 -13 -93t-37.5 -71.5t-60.5 -46.5 t-82 -17q-37 0 -71.5 11t-65.5 25l-58 24q-27 11 -49 12q-28 0 -44 -17t-17 -50h-140q0 50 13.5 92.5t39 73.5t61.5 47.5t81 16.5q37 0 71.5 -11t66.5 -24l57 -25q27 -11 49 -11z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5zM676 1834q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5zM1215 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5zM1196 1586h-191q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5zM949 1740q28 0 44.5 16t17.5 48h137q0 -51 -13 -93t-37.5 -71.5t-60.5 -46.5t-82 -17q-37 0 -71.5 11t-65.5 25l-58 24q-27 11 -49 12 q-28 0 -44 -17t-17 -50h-140q0 50 13.5 92.5t39 73.5t61.5 47.5t81 16.5q37 0 71.5 -11t66.5 -24l57 -25q27 -11 49 -11z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5t-306.5 56.5t-237.5 158t-153 240.5t-54 301q0 163 54 302t153 240t237.5 158t306.5 57t306.5 -57.5t236.5 -158t152.5 -239.5t54.5 -302zM1287 740q0 122 -32 219t-92.5 164.5t-147 103.5t-195.5 36 t-195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219t33 -218.5t94 -163.5t148 -103t195 -36q109 0 195.5 36t147 103t92.5 163.5t32 218.5zM739 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11 q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM1181 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#xd7;" d="M1058 1020l-333 -333l349 -348l-134 -132l-348 347l-349 -349l-134 132l350 350l-335 335l133 133l335 -335l332 333z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1637" d="M1570 740q0 -163 -54.5 -301.5t-152.5 -240t-236.5 -158t-306.5 -56.5q-103 0 -194 21.5t-171 62.5l-78 -108q-30 -41 -71.5 -57.5t-80.5 -16.5h-108l199 275q-118 102 -182.5 250.5t-64.5 328.5q0 163 54 302t153 240t237.5 158t306.5 57q113 0 211.5 -25.5t182.5 -74.5 l61 84q13 18 24.5 31.5t24 21t28 11t38.5 3.5h141l-183 -252q106 -102 164 -244t58 -312zM350 740q0 -118 30 -211t87 -160l603 829q-106 65 -250 65q-109 0 -195.5 -36t-147.5 -103.5t-94 -164.5t-33 -219zM1287 740q0 105 -24 191.5t-70 151.5l-594 -817q97 -47 221 -47 q109 0 195.5 36t147 103t92.5 163.5t32 218.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1490" d="M745 222q80 0 143 26.5t106.5 75t66.5 117t23 153.5v887h276v-887q0 -132 -42.5 -244t-122.5 -193.5t-193.5 -127t-256.5 -45.5q-142 0 -255.5 45.5t-193 127t-122 193.5t-42.5 244v887h276v-886q0 -85 23 -153.5t66 -117.5t105.5 -75.5t142.5 -26.5zM600 1834 q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph unicode="&#xda;" horiz-adv-x="1490" d="M745 222q80 0 143 26.5t106.5 75t66.5 117t23 153.5v887h276v-887q0 -132 -42.5 -244t-122.5 -193.5t-193.5 -127t-256.5 -45.5q-142 0 -255.5 45.5t-193 127t-122 193.5t-42.5 244v887h276v-886q0 -85 23 -153.5t66 -117.5t105.5 -75.5t142.5 -26.5zM1139 1834 l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1490" d="M745 222q80 0 143 26.5t106.5 75t66.5 117t23 153.5v887h276v-887q0 -132 -42.5 -244t-122.5 -193.5t-193.5 -127t-256.5 -45.5q-142 0 -255.5 45.5t-193 127t-122 193.5t-42.5 244v887h276v-886q0 -85 23 -153.5t66 -117.5t105.5 -75.5t142.5 -26.5zM1119 1586h-191 q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1490" d="M745 222q80 0 143 26.5t106.5 75t66.5 117t23 153.5v887h276v-887q0 -132 -42.5 -244t-122.5 -193.5t-193.5 -127t-256.5 -45.5q-142 0 -255.5 45.5t-193 127t-122 193.5t-42.5 244v887h276v-886q0 -85 23 -153.5t66 -117.5t105.5 -75.5t142.5 -26.5zM662 1707 q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM1104 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5 t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1340" d="M808 575v-575h-276v575l-539 906h243q36 0 56.5 -17.5t35.5 -44.5l271 -494q24 -44 41 -83.5l32 -77.5q13 39 30 78.5t40 82.5l270 494q11 23 33.5 42.5t57.5 19.5h244zM1066 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5 t22.5 13t25.5 6t35 1.5h281z" />
-<glyph unicode="&#xde;" horiz-adv-x="1280" d="M434 267v-267h-275v1481h275v-254h207q148 0 257 -35t179.5 -97.5t104 -149.5t33.5 -190q0 -108 -35.5 -197.5t-107.5 -154t-179.5 -100.5t-251.5 -36h-207zM434 482h207q76 0 132 19t93 54.5t55.5 86t18.5 113.5q0 59 -18.5 107t-55.5 82t-93 52t-132 18h-207v-532z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1300" d="M717 1506q120 0 205 -34.5t138 -87t77.5 -113t24.5 -112.5q0 -59 -20 -101t-50 -74t-65 -55l-65 -45q-30 -22 -50 -45t-20 -53q0 -34 25.5 -58.5t63.5 -47.5l83 -50q45 -27 83 -65.5t63.5 -92.5t25.5 -133q0 -87 -32.5 -153t-87.5 -111t-128.5 -68t-154.5 -23 q-47 0 -93.5 9.5t-89 27t-80.5 41t-68 51.5l59 96q10 17 25.5 26.5t39.5 9.5t45 -14l47 -28q26 -15 58.5 -28.5t78.5 -13.5q65 0 104.5 38.5t39.5 99.5q0 48 -27.5 80t-69 57t-89.5 49t-89.5 56t-69 78.5t-27.5 116.5q0 58 21.5 100.5t53.5 75t70 58.5t70 54t54 59.5 t22 74.5q0 34 -12 64t-37.5 52t-66 35.5t-96.5 13.5q-134 0 -203.5 -82.5t-69.5 -241.5v-999h-253v1008q0 109 37.5 199.5t106.5 157.5t168.5 104t224.5 37z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M468 1497q42 0 61.5 -14t35.5 -40l146 -249h-144q-29 0 -47 7.5t-36 28.5l-253 267h237z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M913 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M912 1196h-169q-32 0 -51 18l-108 98l-10 10q-6 5 -11 12q-5 -7 -11 -12l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M668 1392q31 0 48.5 16.5t17.5 60.5h153q0 -57 -15.5 -103.5t-43.5 -80t-66 -51t-85 -17.5q-37 0 -68.5 13t-59.5 28l-51 29q-24 13 -45 13q-30 0 -46.5 -17.5t-16.5 -60.5h-157q0 57 16 103.5t44.5 80t67 52t83.5 18.5q37 0 69 -13.5t60 -28.5l51 -29q24 -13 44 -13z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M508 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM891 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5 t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1072" d="M958 0h-113q-36 0 -56.5 11t-30.5 43l-23 75q-40 -36 -78.5 -63t-79 -45.5t-87 -27.5t-102.5 -9q-67 0 -123 17.5t-96.5 53.5t-63 89.5t-22.5 123.5q0 59 31 117t104 105t193.5 77.5t300.5 34.5v62q0 105 -44.5 155.5t-129.5 50.5q-61 0 -102.5 -14t-71.5 -32l-56 -32 q-26 -14 -56 -15q-26 0 -44.5 13.5t-29.5 32.5l-46 81q181 166 437 166q92 0 164.5 -30t122.5 -84t76 -128.5t26 -163.5v-664zM467 158q39 0 71.5 7t62 21.5t56.5 35.5t55 49v178q-111 -5 -185 -19t-119.5 -35.5t-64 -50.5t-18.5 -62q0 -67 39.5 -95.5t102.5 -28.5z M331 1357q0 47 18.5 86t50 66.5t72.5 43t86 15.5q46 0 88 -15.5t73.5 -43t50.5 -66.5t19 -86q0 -46 -19 -84t-50.5 -65t-73.5 -42t-88 -15q-45 0 -86 15t-72.5 42t-50 65t-18.5 84zM469 1357q0 -39 24 -65t69 -26q41 0 65.5 26t24.5 65q0 43 -24.5 68t-65.5 25 q-45 0 -69 -25t-24 -68z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1690" d="M1202 1067q89 0 166 -34.5t132.5 -99t87.5 -156.5t32 -207q0 -29 -2.5 -47.5t-8.5 -29.5t-17 -15.5t-28 -4.5h-613q14 -151 85.5 -222t184.5 -71q70 0 113 13.5t72 30t48.5 29.5t40.5 13q18 0 30.5 -6t20.5 -17l68 -86q-42 -49 -92.5 -82.5t-105 -53.5t-111 -28 t-109.5 -8q-112 0 -208.5 50t-159.5 156q-31 -55 -75.5 -94t-99 -64.5t-116 -37t-123.5 -11.5q-77 0 -138 19.5t-104 56.5t-66 93t-23 129q0 59 31 119t104 109t193.5 81.5t300.5 36.5v36q0 105 -44.5 159.5t-129.5 54.5q-61 0 -102.5 -16t-71.5 -35l-56 -34 q-26 -16 -56 -16q-26 0 -44.5 13.5t-29.5 32.5l-46 81q91 83 190 124.5t220 41.5q119 0 194.5 -45t115.5 -124q58 77 145 121.5t205 44.5zM712 473q-111 -5 -185 -21t-119.5 -39.5t-64 -54t-18.5 -64.5q0 -71 39.5 -103.5t109.5 -32.5q50 0 93.5 15t75.5 47.5t50.5 83.5 t18.5 122v47zM1191 886q-108 0 -166.5 -68t-72.5 -192h444q0 50 -12.5 97t-37.5 83.5t-64 58t-91 21.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="976" d="M415 -232q7 0 14.5 -2.5t17.5 -5.5t21.5 -5t28.5 -2q34 0 50.5 13t16.5 31q0 30 -37 43t-113 23l39 129q-82 14 -153.5 56.5t-123.5 110.5t-81.5 161t-29.5 207q0 116 33 215t97.5 171t160 113t218.5 41q118 0 206.5 -38t159.5 -108l-67 -93q-11 -14 -21.5 -22t-31.5 -8 q-19 0 -37.5 11.5l-44 26.5t-61 26.5t-87.5 11.5q-67 0 -117 -24t-83.5 -69t-49.5 -109t-16 -145q0 -84 17.5 -149.5t51.5 -110t82 -67.5t109 -23q60 0 97.5 15t63 33l44.5 32.5t42 14.5q28 0 47 -23l72 -92q-71 -83 -159 -121.5t-182 -46.5l-12 -45q91 -23 128 -61.5 t37 -90.5q0 -34 -18 -61.5t-51 -47t-79 -30t-101 -10.5q-42 0 -78.5 6t-72.5 17l24 78q6 24 29 24z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1094" d="M569 1067q99 0 183 -31.5t144 -92.5t94 -149.5t34 -202.5q0 -29 -2.5 -48t-9 -29.5t-18 -15t-28.5 -4.5h-650q11 -162 87 -238t201 -76q61 0 106 14.5t78 32l58 31.5t49 14q15 0 26.5 -6t19.5 -17l74 -92q-42 -49 -94.5 -82.5t-109 -53.5t-115.5 -28t-114 -8 q-110 0 -204 36t-164 107.5t-109.5 176.5t-39.5 243q0 108 34.5 202.5t99.5 164.5t158.5 111t211.5 41zM574 886q-111 0 -173 -62.5t-79 -177.5h475q0 49 -13.5 92.5t-41 76.5t-70 52t-98.5 19zM485 1497q42 0 61.5 -14t35.5 -40l146 -249h-144q-29 0 -47 7.5t-36 28.5 l-253 267h237z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1094" d="M569 1067q99 0 183 -31.5t144 -92.5t94 -149.5t34 -202.5q0 -29 -2.5 -48t-9 -29.5t-18 -15t-28.5 -4.5h-650q11 -162 87 -238t201 -76q61 0 106 14.5t78 32l58 31.5t49 14q15 0 26.5 -6t19.5 -17l74 -92q-42 -49 -94.5 -82.5t-109 -53.5t-115.5 -28t-114 -8 q-110 0 -204 36t-164 107.5t-109.5 176.5t-39.5 243q0 108 34.5 202.5t99.5 164.5t158.5 111t211.5 41zM574 886q-111 0 -173 -62.5t-79 -177.5h475q0 49 -13.5 92.5t-41 76.5t-70 52t-98.5 19zM930 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249q15 27 35.5 40.5 t61.5 13.5h246z" />
-<glyph unicode="&#xea;" horiz-adv-x="1094" d="M569 1067q99 0 183 -31.5t144 -92.5t94 -149.5t34 -202.5q0 -29 -2.5 -48t-9 -29.5t-18 -15t-28.5 -4.5h-650q11 -162 87 -238t201 -76q61 0 106 14.5t78 32l58 31.5t49 14q15 0 26.5 -6t19.5 -17l74 -92q-42 -49 -94.5 -82.5t-109 -53.5t-115.5 -28t-114 -8 q-110 0 -204 36t-164 107.5t-109.5 176.5t-39.5 243q0 108 34.5 202.5t99.5 164.5t158.5 111t211.5 41zM574 886q-111 0 -173 -62.5t-79 -177.5h475q0 49 -13.5 92.5t-41 76.5t-70 52t-98.5 19zM929 1196h-169q-32 0 -51 18l-108 98l-10 10q-6 5 -11 12q-5 -7 -11 -12 l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1094" d="M569 1067q99 0 183 -31.5t144 -92.5t94 -149.5t34 -202.5q0 -29 -2.5 -48t-9 -29.5t-18 -15t-28.5 -4.5h-650q11 -162 87 -238t201 -76q61 0 106 14.5t78 32l58 31.5t49 14q15 0 26.5 -6t19.5 -17l74 -92q-42 -49 -94.5 -82.5t-109 -53.5t-115.5 -28t-114 -8 q-110 0 -204 36t-164 107.5t-109.5 176.5t-39.5 243q0 108 34.5 202.5t99.5 164.5t158.5 111t211.5 41zM574 886q-111 0 -173 -62.5t-79 -177.5h475q0 49 -13.5 92.5t-41 76.5t-70 52t-98.5 19zM525 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5 t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM908 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5 t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xec;" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252zM195 1497q42 0 61.5 -14t35.5 -40l146 -249h-144q-29 0 -47 7.5t-36 28.5l-253 267h237z" />
-<glyph unicode="&#xed;" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252zM640 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xee;" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252zM639 1196h-169q-32 0 -51 18l-108 98l-10 10q-6 5 -11 12q-5 -7 -11 -12l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#xef;" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252zM235 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM618 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29 t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1163" d="M395 1087q-10 16 -10 34q0 31 33 49l77 44q-33 13 -70 25l-76 23q-26 7 -42.5 25.5t-16.5 48.5q0 16 8 43l30 87q103 -17 199 -49t181 -82l180 117l50 -82q10 -17 10 -32q0 -14 -7.5 -26.5t-21.5 -20.5l-83 -47q58 -52 105 -116t81 -141t52 -168t18 -196 q0 -151 -34.5 -269t-101 -200.5t-165 -125.5t-225.5 -43q-106 0 -197 34t-158 98.5t-105 157.5t-38 210q0 94 33 179.5t94 149.5t147 101.5t193 37.5q97 0 178 -35t143 -103q-22 109 -73 187t-138 137l-203 -131zM572 177q59 0 109.5 21.5t87.5 69t59 123.5t25 184 q-15 38 -39 72t-57 59t-75.5 40t-95.5 15q-66 0 -115.5 -21.5t-83.5 -59.5t-51.5 -88t-17.5 -109q0 -75 20 -131.5t54.5 -95.5t80.5 -59t99 -20z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1164" d="M135 0v1051h155q49 0 64 -46l18 -83q32 33 67 59.5t74.5 46t84.5 29.5t98 10q86 0 152.5 -29t111.5 -82t68 -126t23 -161v-669h-253v669q0 96 -44.5 148.5t-133.5 52.5q-66 0 -123.5 -29.5t-108.5 -80.5v-760h-253zM701 1392q31 0 48.5 16.5t17.5 60.5h153 q0 -57 -15.5 -103.5t-43.5 -80t-66 -51t-85 -17.5q-37 0 -68.5 13t-59.5 28l-51 29q-24 13 -45 13q-30 0 -46.5 -17.5t-16.5 -60.5h-157q0 57 16 103.5t44.5 80t67 52t83.5 18.5q37 0 69 -13.5t60 -28.5l51 -29q24 -13 44 -13z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5zM494 1497q42 0 61.5 -14t35.5 -40l146 -249h-144q-29 0 -47 7.5t-36 28.5l-253 267h237z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5zM939 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5zM938 1196h-169q-32 0 -51 18l-108 98l-10 10q-6 5 -11 12q-5 -7 -11 -12l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5zM694 1392q31 0 48.5 16.5t17.5 60.5h153q0 -57 -15.5 -103.5t-43.5 -80t-66 -51t-85 -17.5q-37 0 -68.5 13t-59.5 28l-51 29q-24 13 -45 13q-30 0 -46.5 -17.5t-16.5 -60.5h-157q0 57 16 103.5t44.5 80 t67 52t83.5 18.5q37 0 69 -13.5t60 -28.5l51 -29q24 -13 44 -13z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1164" d="M584 1067q118 0 213.5 -38t163 -107.5t104.5 -170t37 -224.5q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-118 0 -214.5 37.5t-164.5 108.5t-105.5 171t-37.5 225q0 124 37.5 224.5t105.5 170t164.5 107.5t214.5 38zM584 179q131 0 194 88t63 258t-63 259 t-194 89q-133 0 -196.5 -89.5t-63.5 -258.5t63.5 -257.5t196.5 -88.5zM534 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM917 1323 q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xf7;" d="M93 781h1000v-187h-1000v187zM437 1052q0 32 12 60.5t32.5 49t49 32.5t61.5 12q32 0 60.5 -12t49.5 -32.5t33.5 -49.5t12.5 -60q0 -33 -12.5 -61t-33.5 -48.5t-49.5 -32.5t-60.5 -12q-33 0 -61.5 12t-49 32.5t-32.5 48.5t-12 61zM437 323q0 32 12 60.5t32.5 49t49 32.5 t61.5 12q32 0 60.5 -12t49.5 -32.5t33.5 -49.5t12.5 -60q0 -33 -12.5 -61.5t-33.5 -48.5t-49.5 -32t-60.5 -12q-33 0 -61.5 12t-49 32t-32.5 48.5t-12 61.5z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1164" d="M966 914q66 -71 101 -168t35 -219q0 -125 -37 -225t-104.5 -171t-163.5 -108.5t-213 -37.5q-74 0 -139 14.5t-121 43.5l-35 -48q-30 -40 -71.5 -57t-80.5 -17h-93l158 214q-68 71 -104 169.5t-36 222.5t37.5 224.5t105.5 170t164.5 107.5t214.5 38q74 0 139 -15.5 t121 -43.5l57 76q13 18 24.5 31t24.5 21.5t28 12t38 3.5h125zM307 525q0 -122 33 -201l385 522q-57 35 -141 35q-134 0 -205.5 -93t-71.5 -263zM584 171q131 0 202 92t71 262q0 60 -8 109.5t-24 88.5l-383 -519q57 -33 142 -33z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 84q-33 -33 -68 -60t-74.5 -46t-85 -29.5t-97.5 -10.5q-86 0 -152 29t-111 82t-68 126.5t-23 161.5v668h253zM489 1497q42 0 61.5 -14t35.5 -40l146 -249h-144 q-29 0 -47 7.5t-36 28.5l-253 267h237z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 84q-33 -33 -68 -60t-74.5 -46t-85 -29.5t-97.5 -10.5q-86 0 -152 29t-111 82t-68 126.5t-23 161.5v668h253zM934 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151 l145 249q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 84q-33 -33 -68 -60t-74.5 -46t-85 -29.5t-97.5 -10.5q-86 0 -152 29t-111 82t-68 126.5t-23 161.5v668h253zM933 1196h-169q-32 0 -51 18l-108 98l-10 10 q-6 5 -11 12q-5 -7 -11 -12l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1164" d="M367 1051v-668q0 -96 44.5 -149t133.5 -53q66 0 123 29.5t108 80.5v760h253v-1051h-155q-49 0 -64 46l-17 84q-33 -33 -68 -60t-74.5 -46t-85 -29.5t-97.5 -10.5q-86 0 -152 29t-111 82t-68 126.5t-23 161.5v668h253zM529 1323q0 -29 -11 -54t-31 -43.5t-46 -29 t-55 -10.5q-28 0 -53 10.5t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM912 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5 t54.5 11t55 -11t45.5 -30.5t30.5 -45.5t11 -56z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1092" d="M508 -289q-11 -27 -29 -40.5t-55 -13.5h-188l196 421l-425 973h221q31 0 47.5 -14.5t24.5 -32.5l224 -545q11 -27 19.5 -55.5t14.5 -57.5q8 30 18 57.5l21 56.5l211 544q8 20 27 33.5t43 13.5h202zM921 1497l-253 -267q-19 -20 -37 -28t-47 -8h-151l145 249 q15 27 35.5 40.5t61.5 13.5h246z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1158" d="M135 -343v1865h253v-600q62 67 141 106t185 39q86 0 157 -35.5t123 -103t80 -166.5t28 -228q0 -118 -32 -218.5t-90.5 -174t-142 -115t-187.5 -41.5q-45 0 -83 8t-69.5 24t-58 38t-51.5 49v-447h-253zM627 870q-79 0 -135 -33t-104 -94v-471q43 -53 93.5 -74t109.5 -21 q57 0 103.5 21.5t79 65.5t50 111t17.5 159t-15 156t-42.5 104t-67 58t-89.5 18z" />
-<glyph unicode="&#xff;" horiz-adv-x="1092" d="M508 -289q-11 -27 -29 -40.5t-55 -13.5h-188l196 421l-425 973h221q31 0 47.5 -14.5t24.5 -32.5l224 -545q11 -27 19.5 -55.5t14.5 -57.5q8 30 18 57.5l21 56.5l211 544q8 20 27 33.5t43 13.5h202zM516 1323q0 -29 -11 -54t-31 -43.5t-46 -29t-55 -10.5q-28 0 -53 10.5 t-44.5 29t-30.5 43.5t-11 54q0 30 11 56t30.5 45.5t44.5 30.5t53 11q29 0 55 -11t46 -30.5t31 -45.5t11 -56zM899 1323q0 -29 -11 -54t-30.5 -43.5t-45.5 -29t-55 -10.5t-54.5 10.5t-44.5 29t-30 43.5t-11 54q0 30 11 56t30 45.5t44.5 30.5t54.5 11t55 -11t45.5 -30.5 t30.5 -45.5t11 -56z" />
-<glyph unicode="&#x131;" horiz-adv-x="555" d="M404 1051v-1051h-252v1051h252z" />
-<glyph unicode="&#x141;" horiz-adv-x="1127" d="M495 891l366 183v-184q0 -38 -34 -55l-332 -173v-435h592v-227h-868v541l-184 -92v189q0 33 32 49l152 79v715h276v-590z" />
-<glyph unicode="&#x142;" horiz-adv-x="694" d="M474 1522v-571l167 68v-146q0 -42 -35 -55l-132 -56v-762h-253v673l-168 -68v150q0 36 32 49l136 57v661h253z" />
-<glyph unicode="&#x152;" horiz-adv-x="2214" d="M2125 1481v-219h-657v-411h519v-212h-519v-419h657v-220h-901v189q-89 -96 -209.5 -150t-270.5 -54q-152 0 -276 56.5t-213 157.5t-137.5 240t-48.5 301q0 163 48.5 302t137.5 240t213.5 158t275.5 57q148 0 269.5 -54t210.5 -152v190h901zM1192 740q0 122 -28.5 220 t-83 167t-132.5 106t-175 37q-98 0 -177 -37t-133 -106t-83.5 -167t-29.5 -220t29.5 -219.5t83.5 -166t133 -105.5t177 -37q97 0 175 37t132.5 105.5t83 166t28.5 219.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1790" d="M1303 1067q89 0 165.5 -34.5t132.5 -99t87.5 -156.5t31.5 -207q0 -29 -2.5 -47.5t-8.5 -29.5t-17 -15.5t-28 -4.5h-612q14 -151 85 -222t184 -71q57 0 98 14.5t72 31.5l56 32q25 14 48 14q27 0 45 -23l74 -92q-42 -49 -92 -82.5t-105 -53.5t-111 -28t-110 -8 q-111 0 -207.5 49.5t-158.5 155.5q-61 -99 -160 -152t-230 -53q-104 0 -192 37.5t-151.5 108.5t-99 171t-35.5 225q0 124 36 224.5t100 170t153.5 107.5t197.5 38q127 0 222.5 -52.5t156.5 -150.5q56 92 150.5 147.5t224.5 55.5zM563 179q121 0 179.5 88t58.5 258t-58.5 259 t-179.5 89q-123 0 -181 -89.5t-58 -258.5q0 -170 57.5 -258t181.5 -88zM1291 886q-108 0 -166.5 -68t-71.5 -192h443q0 50 -12.5 97t-37.5 83.5t-64 58t-91 21.5z" />
-<glyph unicode="&#x160;" horiz-adv-x="1098" d="M943 1211q-11 -23 -26 -32t-35 -9t-46 16t-61 35.5t-81.5 35.5t-109.5 16q-57 0 -100 -14t-72 -38.5t-43.5 -59t-14.5 -75.5q0 -52 29.5 -86.5t77.5 -59.5t109 -44l126 -41q64 -22 125.5 -51.5t109.5 -74t77 -109t29 -156.5q0 -100 -34 -188t-100 -153t-161.5 -102 t-218.5 -37q-71 0 -139.5 13.5t-131.5 39t-117.5 61.5t-97.5 80l80 132q11 14 27 24t35 10q26 0 55.5 -21t70 -46.5t95.5 -46.5t131 -21q118 0 182.5 56t64.5 160q0 58 -29 95t-77 62t-109.5 42.5t-125 38t-125 49t-109.5 75t-77.5 115.5t-29.5 170q0 81 32.5 158t94.5 136 t152 95t206 36q131 0 241.5 -41t188.5 -115zM222 1810h191q15 0 34 -4.5t30 -11.5l103 -69l8 -4l8 -6l7 6q4 3 8 4l103 69q11 7 30 11.5t34 4.5h191l-247 -224h-252z" />
-<glyph unicode="&#x161;" horiz-adv-x="894" d="M759 846q-10 -16 -21.5 -23t-28.5 -7q-18 0 -40 10l-48 23q-28 13 -63.5 23.5t-83.5 10.5q-75 0 -118 -32t-43 -83q0 -34 22 -57t58.5 -40.5t82.5 -31t94 -30t94.5 -37.5t82.5 -53.5t58 -77.5t22 -108q0 -76 -27.5 -140t-80.5 -110.5t-131.5 -72.5t-179.5 -26 q-54 0 -106 9.5t-99.5 27t-88 41t-71.5 51.5l58 96q11 17 26.5 26.5t39.5 9.5t44.5 -13.5t48.5 -29t65 -28.5t95 -13q45 0 77 10.5t53 28t31 40.5t10 48q0 37 -22 60.5t-58.5 41t-83 31t-95 30t-95.5 38.5t-83 56t-58 83t-22 118q0 65 25.5 123.5t75 102t124 69.5t171.5 26 q109 0 198 -36t148 -94zM589 1196h-237l-235 285h175q15 0 29 -5.5t23 -12.5l108 -98q9 -8 22 -24q5 7 11 13l11 11l108 98q8 7 22.5 12.5t28.5 5.5h169z" />
-<glyph unicode="&#x178;" horiz-adv-x="1340" d="M808 575v-575h-276v575l-539 906h243q36 0 56.5 -17.5t35.5 -44.5l271 -494q24 -44 41 -83.5l32 -77.5q13 39 30 78.5t40 82.5l270 494q11 23 33.5 42.5t57.5 19.5h244zM589 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43 t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM1031 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph unicode="&#x17d;" horiz-adv-x="1263" d="M1207 1481v-102q0 -47 -26 -86l-760 -1073h768v-220h-1126v109q0 20 7.5 39t18.5 35l762 1079h-739v219h1095zM290 1809h191q15 0 34 -4.5t30 -11.5l103 -69l8 -4l8 -6l7 6q4 3 8 4l103 69q11 7 30 11.5t34 4.5h191l-247 -224h-252z" />
-<glyph unicode="&#x17e;" horiz-adv-x="961" d="M895 946q0 -27 -9.5 -52t-23.5 -42l-500 -657h519v-195h-812v105q0 17 8 41.5t25 46.5l504 664h-508v194h797v-105zM628 1196h-237l-235 285h175q15 0 29 -5.5t23 -12.5l108 -98q9 -8 22 -24q5 7 11 13l11 11l108 98q8 7 22.5 12.5t28.5 5.5h169z" />
-<glyph unicode="&#x192;" d="M723 763l-85 -705q-13 -109 -51.5 -186.5t-104.5 -127.5t-161 -73.5t-221 -23.5v132q0 78 81 78q41 0 76 11t61.5 35.5t44 64.5t24.5 98l85 692l-126 18q-57 12 -57 64v103h206l18 152q26 205 156 308t382 103v-138q0 -40 -19 -56t-61 -16t-77.5 -11t-63 -35.5t-46 -64.5 t-25.5 -98l-20 -144h301v-180h-317z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="653" d="M680 1196h-169q-32 0 -51 18l-108 98l-10 10q-6 5 -11 12q-5 -7 -11 -12l-11 -10l-109 -98q-8 -7 -22 -12.5t-30 -5.5h-175l235 285h237z" />
-<glyph unicode="&#x2c7;" horiz-adv-x="653" d="M445 1196h-237l-235 285h175q15 0 29 -5.5t23 -12.5l108 -98q9 -8 22 -24q5 7 11 13l11 11l108 98q8 7 22.5 12.5t28.5 5.5h169z" />
-<glyph unicode="&#x2c9;" horiz-adv-x="653" d="M20 1405h613v-162h-613v162z" />
-<glyph unicode="&#x2d8;" horiz-adv-x="653" d="M327 1189q-88 0 -147 23t-95.5 63t-52 93t-15.5 113h178q0 -31 5.5 -55.5t20.5 -41.5t40.5 -26t65.5 -9t65.5 9t40 26t20.5 41.5t6 55.5h177q0 -59 -15.5 -112.5t-52 -93.5t-95.5 -63t-146 -23z" />
-<glyph unicode="&#x2d9;" horiz-adv-x="653" d="M489 1361q0 -33 -13 -62t-35 -50.5t-52.5 -34.5t-63.5 -13t-62 13t-50.5 34.5t-34 50.5t-12.5 62q0 34 12.5 63t34 51t50.5 35t62 13q34 0 64 -13t52 -35t35 -51t13 -63z" />
-<glyph unicode="&#x2da;" horiz-adv-x="653" d="M98 1357q0 47 18.5 86t50 66.5t72.5 43t86 15.5q46 0 88 -15.5t73.5 -43t50.5 -66.5t19 -86q0 -46 -19 -84t-50.5 -65t-73.5 -42t-88 -15q-45 0 -86 15t-72.5 42t-50 65t-18.5 84zM236 1357q0 -39 24 -65t69 -26q41 0 65.5 26t24.5 65q0 43 -24.5 68t-65.5 25 q-45 0 -69 -25t-24 -68z" />
-<glyph unicode="&#x2db;" horiz-adv-x="653" d="M472 -191q18 0 24 -17l39 -93q-34 -23 -85 -37.5t-107 -14.5q-100 0 -154.5 42t-54.5 108q0 60 43 116t123 99l131 -12q-20 -11 -39.5 -25.5t-35 -32.5t-24.5 -38.5t-9 -42.5q0 -31 19 -49t54 -18q19 0 31.5 2t20.5 5t13.5 5.5t10.5 2.5z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="653" d="M436 1392q31 0 48.5 16.5t17.5 60.5h153q0 -57 -15.5 -103.5t-43.5 -80t-66 -51t-85 -17.5q-37 0 -68.5 13t-59.5 28l-51 29q-24 13 -45 13q-30 0 -46.5 -17.5t-16.5 -60.5h-157q0 57 16 103.5t44.5 80t67 52t83.5 18.5q37 0 69 -13.5t60 -28.5l51 -29q24 -13 44 -13z " />
-<glyph unicode="&#x2dd;" horiz-adv-x="653" d="M462 1497l-204 -267q-16 -20 -35.5 -28t-48.5 -8h-103l129 249q14 27 35 40.5t62 13.5h165zM819 1497l-258 -267q-19 -19 -36.5 -27.5t-47.5 -8.5h-119l182 249q9 13 17.5 23t19.5 17t25 10.5t35 3.5h182z" />
-<glyph unicode="&#x3c0;" horiz-adv-x="1318" d="M1281 1051v-101q0 -33 -20 -56.5t-59 -23.5h-109v-870h-253v870h-347v-598q0 -65 -16 -117.5t-50.5 -90t-88.5 -58t-131 -20.5q-37 0 -77.5 7t-76.5 26l7 107q3 20 16 30.5t54 10.5q62 0 86 25t24 83v595h-184v91q0 15 6.5 31t18.5 28.5t29.5 21.5t40.5 9h1130z" />
-<glyph unicode="&#x2000;" horiz-adv-x="959" />
-<glyph unicode="&#x2001;" horiz-adv-x="1918" />
-<glyph unicode="&#x2002;" horiz-adv-x="959" />
-<glyph unicode="&#x2003;" horiz-adv-x="1918" />
-<glyph unicode="&#x2004;" horiz-adv-x="638" />
-<glyph unicode="&#x2005;" horiz-adv-x="479" />
-<glyph unicode="&#x2006;" horiz-adv-x="319" />
-<glyph unicode="&#x2007;" horiz-adv-x="319" />
-<glyph unicode="&#x2008;" horiz-adv-x="239" />
-<glyph unicode="&#x2009;" horiz-adv-x="382" />
-<glyph unicode="&#x200a;" horiz-adv-x="106" />
-<glyph unicode="&#x2010;" horiz-adv-x="735" d="M102 724h531v-211h-531v211z" />
-<glyph unicode="&#x2011;" horiz-adv-x="735" d="M102 724h531v-211h-531v211z" />
-<glyph unicode="&#x2012;" horiz-adv-x="735" d="M102 724h531v-211h-531v211z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1164" d="M167 703h830v-179h-830v179z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1724" d="M167 703h1389v-179h-1389v179z" />
-<glyph unicode="&#x2018;" horiz-adv-x="460" d="M170 1000q-70 114 -70 230q0 102 52 196t150 171l79 -48q10 -6 14 -14.5t4 -16.5q0 -9 -4 -17.5t-9 -14.5q-13 -15 -28 -35.5t-27.5 -45t-20.5 -53t-8 -61.5q0 -35 11.5 -74t37.5 -82q9 -14 9 -29q0 -33 -36 -46z" />
-<glyph unicode="&#x2019;" horiz-adv-x="460" d="M316 1569q36 -57 53 -114.5t17 -115.5q0 -102 -51.5 -195t-149.5 -172l-79 48q-10 6 -14 14.5t-4 17.5q0 19 13 32q13 15 28 35.5t27.5 44.5t20 52.5t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 27q0 33 38 46z" />
-<glyph unicode="&#x201a;" horiz-adv-x="460" d="M316 298q36 -57 53 -114.5t17 -114.5q0 -102 -51.5 -195.5t-149.5 -172.5l-79 48q-10 6 -14 15t-4 17q0 19 13 33q13 15 28 35t27.5 44t20 52.5t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 28q0 33 38 46z" />
-<glyph unicode="&#x201c;" horiz-adv-x="800" d="M170 1000q-70 114 -70 230q0 102 52 196t150 171l79 -48q10 -6 14 -14.5t4 -16.5q0 -9 -4 -17.5t-9 -14.5q-13 -15 -28 -35.5t-27.5 -45t-20.5 -53t-8 -61.5q0 -35 11.5 -74t37.5 -82q9 -14 9 -29q0 -33 -36 -46zM510 1000q-70 114 -70 230q0 102 52 196t150 171l79 -48 q10 -6 14 -14.5t4 -16.5q0 -9 -4 -17.5t-9 -14.5q-13 -15 -28 -35.5t-27.5 -45t-20.5 -53t-8 -61.5q0 -35 11.5 -74t37.5 -82q9 -14 9 -29q0 -33 -36 -46z" />
-<glyph unicode="&#x201d;" horiz-adv-x="800" d="M316 1569q36 -57 53 -114.5t17 -115.5q0 -102 -51.5 -195t-149.5 -172l-79 48q-10 6 -14 14.5t-4 17.5q0 19 13 32q13 15 28 35t27.5 44.5t20 53t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 27q0 33 38 46zM656 1569q36 -57 53 -114.5t17 -115.5q0 -102 -51.5 -195 t-149.5 -172l-79 48q-10 6 -14 14.5t-4 17.5q0 19 13 32q13 15 28 35t27.5 44.5t20 53t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 27q0 33 38 46z" />
-<glyph unicode="&#x201e;" horiz-adv-x="800" d="M316 298q36 -57 53 -114.5t17 -114.5q0 -102 -51.5 -195.5t-149.5 -172.5l-79 48q-10 6 -14 15t-4 17q0 19 13 33q13 15 28 34.5t27.5 44t20 53t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 28q0 33 38 46zM656 298q36 -57 53 -114.5t17 -114.5q0 -102 -51.5 -195.5 t-149.5 -172.5l-79 48q-10 6 -14 15t-4 17q0 19 13 33q13 15 28 34.5t27.5 44t20 53t7.5 61.5q0 35 -11 74.5t-38 83.5q-9 13 -9 28q0 33 38 46z" />
-<glyph unicode="&#x2020;" d="M86 935q0 22 6.5 41t21.5 34.5t37 24.5t53 9q65 -1 140.5 -17t152.5 -28l-32 501q56 33 131 33q37 0 70.5 -8t60.5 -25l-33 -501q77 11 153.5 27.5t140.5 17.5q31 0 53.5 -9t37 -24.5t21.5 -35t7 -40.5v-84h-413v-363l33 -819q-27 -16 -60.5 -24.5t-70.5 -8.5 q-75 0 -131 33l33 819v363h-412v84z" />
-<glyph unicode="&#x2021;" d="M86 935q0 22 6.5 41t21.5 34.5t37 24.5t53 9q65 -1 140.5 -17t152.5 -28l-32 501q56 33 131 33q37 0 70.5 -8t60.5 -25l-33 -501q77 11 153.5 27.5t140.5 17.5q31 0 53.5 -9t37 -24.5t21.5 -35t7 -40.5v-84h-413v-533h413v-84q0 -22 -7 -41t-21.5 -34.5t-37 -24.5 t-53.5 -9q-65 1 -141 17t-153 27l33 -500q-27 -16 -60.5 -24.5t-70.5 -8.5q-75 0 -131 33l32 500q-77 -11 -153 -27t-140 -17q-31 0 -53 9t-37 24.5t-21.5 35t-6.5 40.5v84h412v533h-412v84z" />
-<glyph unicode="&#x2022;" d="M146 607q0 92 35.5 173t96 142t141.5 96t173 35t174 -35t142.5 -96t95.5 -142t35 -173q0 -91 -35 -171.5t-95.5 -141t-142.5 -95t-174 -34.5t-173 34.5t-141.5 95t-96 141t-35.5 171.5z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1553" d="M75 139q0 32 11.5 60.5t32.5 49t50 33t61 12.5t60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-32.5 48.5t-11.5 61zM1168 139q0 32 12 60.5t33 49t49.5 33t61.5 12.5q32 0 60.5 -12.5t49 -33t33 -49 t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5t-49.5 32t-33 48.5t-12 61zM622 139q0 32 11.5 60.5t32.5 49t49.5 33t61.5 12.5q32 0 60.5 -12.5t49 -33t33 -49t12.5 -60.5q0 -33 -12.5 -61t-33 -48.5t-49 -32t-60.5 -11.5q-33 0 -61.5 11.5 t-49.5 32t-32.5 48.5t-11.5 61z" />
-<glyph unicode="&#x202f;" horiz-adv-x="382" />
-<glyph unicode="&#x2030;" horiz-adv-x="2403" d="M746 1122q0 -84 -28 -151.5t-75 -115t-109.5 -73t-130.5 -25.5q-74 0 -136 25.5t-107.5 73t-71.5 115t-26 151.5q0 86 26 156t71.5 118t108 74t135.5 26q74 0 137 -26t109 -74t71.5 -118t25.5 -156zM551 1122q0 59 -11.5 99.5t-31.5 65t-47 35t-58 10.5t-57.5 -10.5 t-45.5 -35t-30 -64.5t-11 -100q0 -57 11 -95.5t30 -62t46 -33.5t57 -10q31 0 58 10t47 33.5t31.5 62t11.5 95.5zM1239 1441q12 15 30.5 27.5t51.5 12.5h183l-1100 -1443q-12 -16 -31 -27t-45 -11h-189zM1582 348q0 -84 -28 -151.5t-75 -115t-109.5 -73.5t-130.5 -26 q-74 0 -136.5 26t-108 73.5t-71 115t-25.5 151.5q0 86 25.5 155.5t71 118t108 74.5t136.5 26t137 -26t109 -74.5t71.5 -118t25.5 -155.5zM1388 348q0 59 -12 99t-32 65t-47 35.5t-58 10.5t-57.5 -10.5t-45.5 -35.5t-30 -64.5t-11 -99.5q0 -57 11 -96t30 -62.5t45.5 -34 t57.5 -10.5t58 10.5t47 34t32 62.5t12 96zM2341 348q0 -84 -28 -151.5t-75.5 -115t-110 -73.5t-129.5 -26q-74 0 -136.5 26t-108 73.5t-71 115t-25.5 151.5q0 86 25.5 155.5t71 118t108 74.5t136.5 26t137 -26t109 -74.5t71.5 -118t25.5 -155.5zM2146 348q0 59 -11.5 99 t-31.5 65t-47 35.5t-58 10.5t-57.5 -10.5t-45.5 -35.5t-30.5 -64.5t-11.5 -99.5q0 -57 11.5 -96t30.5 -62.5t45.5 -34t57.5 -10.5t58 10.5t47 34t31.5 62.5t11.5 96z" />
-<glyph unicode="&#x2039;" horiz-adv-x="657" d="M126 535v32l262 406l83 -39q20 -9 29.5 -23.5t9.5 -31.5q0 -22 -13 -44l-142 -241q-14 -27 -32 -43q16 -14 32 -43l142 -242q13 -23 13 -44q0 -36 -39 -54l-83 -39z" />
-<glyph unicode="&#x203a;" horiz-adv-x="657" d="M269 129l-83 39q-20 9 -29.5 23.5t-9.5 31.5q0 20 14 43l141 242q16 29 33 43q-18 16 -33 43l-141 241q-13 23 -14 44q0 37 39 55l83 39l262 -406v-32z" />
-<glyph unicode="&#x2044;" horiz-adv-x="728" d="M53 73q-27 -42 -57 -57.5t-69 -15.5h-108l854 1398q24 39 55.5 61t77.5 22h107z" />
-<glyph unicode="&#x205f;" horiz-adv-x="479" />
-<glyph unicode="&#x20ac;" d="M38 950h136q24 125 75 226t124.5 171.5t167 109t202.5 38.5q142 0 244 -55t170 -148l-89 -96q-10 -11 -21.5 -20t-31.5 -9q-14 0 -26 8.5t-26 20.5l-32 27q-17 14 -41.5 26.5t-57 20.5t-77.5 8q-121 0 -204 -83t-116 -245h514v-78q0 -24 -19 -43.5t-51 -19.5h-461 q-1 -17 -1 -34v-35v-24q0 -12 1 -24h434v-77q0 -24 -19 -43.5t-51 -19.5h-352q29 -176 110.5 -262.5t201.5 -86.5q74 0 118.5 20t73 44.5t47 44.5t41.5 20q11 0 20 -3.5t17 -14.5l109 -100q-72 -111 -182 -169.5t-257 -58.5q-120 0 -215.5 40.5t-166.5 114t-116 178 t-63 233.5h-130v140h119q-1 11 -1 24v24v35q0 17 1 34h-119v141z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1486" d="M983 1193q8 -18 15 -36t12 -37q6 18 13 37t16 36l137 261q10 19 22 23t34 4h150v-618h-153v309l11 102l-157 -309q-19 -38 -59 -38h-25q-42 0 -60 38l-155 304l12 -97v-309h-154v618h151q23 0 34.5 -3t21.5 -24zM568 1481v-144h-168v-474h-175v474h-167v144h510z" />
-<glyph unicode="&#x2126;" horiz-adv-x="1515" d="M830 0v509q71 11 131.5 38.5t105 74t69.5 112t25 153.5q0 95 -28 167.5t-81 122.5t-127.5 75.5t-166.5 25.5t-167 -25.5t-127 -75.5t-80.5 -122.5t-28.5 -167.5q0 -88 25.5 -153.5t69.5 -112t104 -74t131 -38.5v-509h-519q-43 0 -67.5 24t-24.5 62v140h398v143 q-95 25 -170 75t-125.5 119.5t-77 155t-26.5 182.5q0 124 49.5 232.5t139.5 189.5t216 127.5t280 46.5t279.5 -46.5t215.5 -127.5t140 -189.5t50 -232.5q0 -97 -26.5 -182.5t-77.5 -155t-125.5 -120t-170.5 -74.5v-143h400v-140q0 -38 -25 -62t-67 -24h-521z" />
-<glyph unicode="&#x2202;" d="M313 1367q41 31 82.5 55t86 40t95 24.5t110.5 8.5q95 0 175.5 -39t138 -112t89.5 -178t32 -238q0 -212 -39 -386t-116.5 -298t-195 -191.5t-273.5 -67.5q-93 0 -172 30.5t-136 87.5t-89 138t-32 181q0 120 41 223t112 178.5t168.5 118.5t211.5 43q100 0 171.5 -36 t119.5 -101q1 20 1 40v39q0 92 -17.5 161t-49 115t-76 69t-99.5 23q-39 0 -73 -10t-63 -22l-53 -23q-23 -10 -39 -10q-14 0 -27.5 8t-27.5 33zM527 181q55 0 106 22.5t94 72t76.5 127t52.5 188.5q-10 39 -27.5 74.5t-44.5 63.5t-65 44.5t-90 16.5q-76 0 -132 -27.5t-93 -76 t-55.5 -115t-18.5 -146.5q0 -117 52.5 -180.5t144.5 -63.5z" />
-<glyph unicode="&#x2206;" horiz-adv-x="1502" d="M627 1481h249l613 -1481h-1477zM379 218h744l-323 834q-11 29 -23.5 66.5t-24.5 81.5q-12 -45 -24.5 -83t-24.5 -67z" />
-<glyph unicode="&#x220f;" horiz-adv-x="1404" d="M1353 1481v-212h-171v-1612h-261v1612h-437v-1612h-260v1612h-172v212h1301z" />
-<glyph unicode="&#x2211;" horiz-adv-x="1404" d="M84 1481h1237v-212h-846l526 -664v-73l-526 -663h846v-212h-1237v88q0 18 6 38t21 38l609 750l-609 746q-14 17 -20.5 37t-6.5 39v88z" />
-<glyph unicode="&#x2212;" d="M139 781h908v-187h-908v187z" />
-<glyph unicode="&#x221a;" horiz-adv-x="1192" d="M273 657h-123q-39 0 -67.5 23t-28.5 79v81h361q29 0 47.5 -13.5t24.5 -33.5l105 -319q14 -43 23 -86t14 -87q5 34 12.5 69.5t18.5 71.5l396 1258q6 20 25 33.5t44 13.5h167l-563 -1747h-213z" />
-<glyph unicode="&#x221e;" horiz-adv-x="1404" d="M1024 238q-56 0 -103 15t-85.5 41.5t-71 61t-59.5 73.5q-28 -39 -61 -73.5t-71.5 -61t-85.5 -41.5t-103 -15q-68 0 -129 27t-107.5 75.5t-73.5 116t-27 149.5q0 81 27 148.5t73.5 116.5t107.5 76t129 27q56 0 103 -15.5t85.5 -41.5t71.5 -61t61 -74q28 39 60 74t70.5 61 t85.5 41.5t103 15.5q68 0 129 -27t107.5 -76t73.5 -116.5t27 -148.5q0 -82 -27 -149.5t-73.5 -116t-107.5 -75.5t-129 -27zM394 441q31 0 58 13t51 35t46 52t44 64q-22 35 -44 64.5t-46 52t-51 35.5t-58 13q-30 0 -56.5 -9t-47 -29t-32.5 -51.5t-12 -74.5q0 -44 12 -75 t32.5 -51t47 -29.5t56.5 -9.5zM1014 441q30 0 57 9.5t47.5 29.5t32 51t11.5 75q0 43 -12 74.5t-32.5 51.5t-47.5 29t-56 9q-32 0 -58.5 -13t-50.5 -35.5t-45.5 -52t-43.5 -64.5q22 -34 43.5 -64t45.5 -52t50.5 -35t58.5 -13z" />
-<glyph unicode="&#x222b;" horiz-adv-x="846" d="M368 1120q22 178 114 277.5t255 99.5q39 0 80.5 -7.5t78.5 -27.5l-12 -122q-1 -10 -4.5 -20t-12 -18.5t-22.5 -13.5t-35 -5q-49 0 -84.5 -11.5t-59 -36.5t-38 -61.5t-20.5 -86.5l-131 -1029q-13 -106 -48.5 -183.5t-88 -127t-122.5 -73.5t-151 -24q-37 0 -79.5 7.5 t-78.5 27.5l13 105q2 13 6 23t13.5 16t25 9t40.5 3q59 0 99.5 12t67.5 37t41 64.5t21 95.5z" />
-<glyph unicode="&#x2248;" d="M811 918q32 0 62 7t55 17.5t43 22.5t25 21l31 -161q-39 -51 -102.5 -75t-129.5 -24q-54 0 -108 16t-106 35.5t-101 35t-93 15.5q-34 0 -64.5 -7.5t-55.5 -18t-43.5 -23.5t-25.5 -22l-37 153q19 29 45.5 49.5t58.5 34t67 19.5t70 6q54 0 108.5 -16t106.5 -35t101 -34.5 t93 -15.5zM811 553q32 0 62 7t55 18t43 22.5t25 21.5l31 -161q-39 -51 -102.5 -75.5t-129.5 -24.5q-54 0 -108 16t-106 35.5t-101 35.5t-93 16q-34 0 -64.5 -7.5t-55.5 -18.5t-43.5 -24t-25.5 -22l-37 154q19 29 45.5 49t58.5 33.5t67 19.5t70 6q54 0 108.5 -15.5 t106.5 -34.5t101 -35t93 -16z" />
-<glyph unicode="&#x2260;" d="M139 963h514l113 226h181l-113 -226h213v-188h-307l-87 -173h394v-188h-488l-120 -241h-180l120 241h-240v188h334l86 173h-420v188z" />
-<glyph unicode="&#x2264;" d="M142 859l811 388v-172q0 -20 -11 -38t-44 -32l-360 -162q-27 -11 -55.5 -19t-61.5 -15q33 -7 62 -15.5t55 -19.5l359 -165q33 -15 44.5 -32.5t11.5 -37.5v-172l-811 391v101zM142 269h811v-187h-811v187z" />
-<glyph unicode="&#x2265;" d="M1046 859v-101l-812 -391v172q0 20 12 37.5t45 32.5l359 165q26 11 54.5 19.5t61.5 15.5q-32 7 -61 14.5t-55 19.5l-360 162q-33 14 -44.5 32t-11.5 38v172zM1046 82h-812v187h812v-187z" />
-<glyph unicode="&#x25ca;" d="M116 737l390 831h176l390 -831l-390 -830h-176zM323 737l236 -513q12 -27 20.5 -50.5t14.5 -46.5q6 23 14 47t21 50l240 513l-240 513q-12 27 -20 51l-15 47l-15 -47q-8 -24 -20 -51z" />
-<glyph unicode="&#x2669;" horiz-adv-x="0" d="M-2 1522h4v-1865h-4v1865z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
-<glyph unicode="&#xf6c3;" horiz-adv-x="653" d="M409 -74q29 0 35.5 -13t6.5 -26q0 -9 -3 -22t-10 -37t-21 -58l-37 -87q-14 -30 -34.5 -38.5t-53.5 -8.5h-89l51 290h155z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1230" d="M180 0v860l-91 14q-30 5 -47.5 20.5t-17.5 43.5v103h156v34q0 96 32 178.5t96.5 143t162.5 95t232 34.5q43 0 88.5 -4.5t77.5 -15.5l-8 -131q-2 -24 -25.5 -28.5t-58.5 -4.5q-99 0 -166 -17t-108.5 -51.5t-59.5 -86t-18 -120.5v-26h651v-1041h-253v861h-390v-861h-253z " />
-<glyph unicode="&#xfb02;" horiz-adv-x="1263" d="M180 0v860l-91 14q-30 5 -47.5 20.5t-17.5 43.5v103h156v44q0 84 26 161t80.5 136t137.5 94t197 35q93 0 176.5 -6t166.5 -6h142v-1499h-252v1323q-54 2 -106 5t-88 3q-115 0 -175 -64t-60 -182v-44h249v-180h-241v-861h-253z" />
-<glyph horiz-adv-x="653" d="M197 1834q20 0 34.5 -1.5t26 -6t22 -13t22.5 -20.5l202 -207h-200q-14 0 -25 1t-20 3.5t-18.5 7.5t-20.5 13l-304 223h281z" />
-<glyph horiz-adv-x="653" d="M243 1707q0 -28 -11.5 -52.5t-31 -43t-45 -28.5t-54.5 -10q-27 0 -50.5 10t-42 28.5t-29.5 43t-11 52.5t11 53t29.5 44t42.5 30t50 11q29 0 54.5 -11t45 -30t31 -44t11.5 -53zM685 1707q0 -28 -10.5 -52.5t-29 -43t-43.5 -28.5t-54 -10q-28 0 -53 10t-44 28.5t-29.5 43 t-10.5 52.5t10.5 53t29.5 44t44 30t53 11q29 0 54 -11t43.5 -30t29 -44t10.5 -53z" />
-<glyph horiz-adv-x="653" d="M54 1746h545v-145h-545v145z" />
-<glyph horiz-adv-x="653" d="M736 1834l-303 -221q-11 -8 -21 -13.5t-19.5 -8.5t-20.5 -4t-25 -1h-199l201 207q12 12 23 20.5t22.5 13t25.5 6t35 1.5h281z" />
-<glyph horiz-adv-x="653" d="M700 1586h-191q-15 0 -33.5 4t-30.5 13l-103 68l-15 9l-16 -9l-103 -68q-11 -8 -29.5 -12.5t-34.5 -4.5h-191l248 224h252z" />
-<glyph horiz-adv-x="653" d="M-47 1810h191q15 0 34 -4.5t30 -11.5l103 -69l8 -4l8 -6l7 6q4 3 8 4l103 69q11 7 30 11.5t34 4.5h191l-247 -224h-252z" />
-<glyph horiz-adv-x="653" d="M327 1563q-153 0 -235.5 61.5t-82.5 185.5h161q0 -51 38.5 -74t118.5 -23t118 23t38 74h161q0 -56 -21 -102t-62 -78.5t-99.5 -49.5t-134.5 -17z" />
-<glyph horiz-adv-x="653" d="M481 1737q0 -31 -12.5 -58t-34 -48t-50.5 -33.5t-60 -12.5q-30 0 -57.5 12.5t-48.5 33.5t-33.5 48t-12.5 58q0 32 12.5 60t33.5 49t48.5 33t57.5 12q32 0 60.5 -12t50 -33t34 -49t12.5 -60z" />
-<glyph horiz-adv-x="653" d="M115 1723q0 44 17.5 80t46 61.5t66.5 40t80 14.5q44 0 82.5 -14.5t68.5 -40t47.5 -61.5t17.5 -80q0 -43 -17.5 -78t-47.5 -60.5t-68.5 -39.5t-82.5 -14q-42 0 -80 14t-66.5 39.5t-46 60.5t-17.5 78zM236 1723q0 -40 24 -65.5t69 -25.5q41 0 65.5 25.5t24.5 65.5 q0 43 -24.5 68t-65.5 25q-45 0 -69 -25t-24 -68z" />
-<glyph horiz-adv-x="653" d="M453 1740q28 0 44.5 16t17.5 48h137q0 -51 -13 -93t-37.5 -71.5t-60.5 -46.5t-82 -17q-37 0 -71.5 11t-65.5 25l-58 24q-27 11 -49 12q-28 0 -44 -17t-17 -50h-140q0 50 13.5 92.5t39 73.5t61.5 47.5t81 16.5q37 0 71.5 -11t66.5 -24l57 -25q27 -11 49 -11z" />
-<glyph horiz-adv-x="653" d="M467 1818l-206 -195q-20 -17 -37 -27t-46 -10h-120l136 178q17 24 42 39t66 15h165zM841 1818l-259 -195q-23 -17 -43 -27t-49 -10h-136l182 178q24 22 49 38t66 16h190z" />
-<glyph horiz-adv-x="653" d="M431 1524q29 0 35.5 -13t6.5 -25q0 -9 -3.5 -25t-14.5 -46.5t-30 -77.5l-50 -122q-13 -30 -33.5 -38t-53.5 -8h-90l63 355h170z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/theme/neo-gnu/fonts/lato-bold-webfont.ttf b/theme/neo-gnu/fonts/lato-bold-webfont.ttf
deleted file mode 100644 (file)
index c947e75..0000000
Binary files a/theme/neo-gnu/fonts/lato-bold-webfont.ttf and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-bold-webfont.woff b/theme/neo-gnu/fonts/lato-bold-webfont.woff
deleted file mode 100644 (file)
index cd9fe13..0000000
Binary files a/theme/neo-gnu/fonts/lato-bold-webfont.woff and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-italic-webfont.eot b/theme/neo-gnu/fonts/lato-italic-webfont.eot
deleted file mode 100644 (file)
index d9d4e43..0000000
Binary files a/theme/neo-gnu/fonts/lato-italic-webfont.eot and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-italic-webfont.svg b/theme/neo-gnu/fonts/lato-italic-webfont.svg
deleted file mode 100644 (file)
index 7ddb617..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-This is a custom SVG webfont generated by Font Squirrel.
-Copyright   : Copyright c 2010 by tyPoland Lukasz Dziedzic with Reserved Font Name Lato Licensed under the SIL Open Font License Version 11 
-Designer    : Lukasz Dziedzic
-Foundry     : tyPoland Lukasz Dziedzic
-Foundry URL : httpwwwtypolandcom
-</metadata>
-<defs>
-<font id="webfont7qSu1Vfu" horiz-adv-x="1160" >
-<font-face units-per-em="2000" ascent="1610" descent="-390" />
-<missing-glyph horiz-adv-x="386" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="0" />
-<glyph unicode="&#xd;" horiz-adv-x="0" />
-<glyph unicode=" "  horiz-adv-x="386" />
-<glyph unicode="&#x09;" horiz-adv-x="386" />
-<glyph unicode="&#xa0;" horiz-adv-x="386" />
-<glyph unicode="!" horiz-adv-x="635" d="M518 1433l-70 -574q-6 -45 -13 -87.5t-15 -85.5t-18 -89l-22 -98h-117q1 52 2.5 98t4 89t6 85.5t9.5 87.5l70 574h163zM159 110q0 26 9.5 49t26 40t39 27t49.5 10q26 0 49 -10t40 -27t26.5 -40t9.5 -49q0 -27 -9.5 -49.5t-26.5 -39.5t-40 -26.5t-49 -9.5q-27 0 -49.5 9.5 t-39 26.5t-26 39.5t-9.5 49.5z" />
-<glyph unicode="&#x22;" horiz-adv-x="736" d="M403 1431l-36 -289l-34 -155q-7 -31 -22.5 -48t-44.5 -17q-26 0 -37 17t-11 48v155l37 289h148zM715 1431l-36 -289l-34 -155q-7 -31 -22.5 -48t-44.5 -17q-26 0 -37 17t-11 48v155l37 289h148z" />
-<glyph unicode="#" d="M780 424l-137 -424h-78q-20 0 -32.5 13.5t-12.5 35.5q0 14 4 26l113 349h-250l-116 -358q-11 -35 -35 -50.5t-52 -15.5h-77l137 424h-147q-43 0 -43 40q0 7 1.5 14.5l3.5 17.5l15 55h205l106 331h-233l21 71q8 28 27.5 41t57.5 13h161l118 363q10 29 32.5 45t51.5 16h78 l-138 -424h250l138 424h77q22 0 36 -12t14 -32q0 -11 -4 -20l-118 -360h214l-22 -71q-8 -28 -27 -41t-56 -13h-143l-106 -331h182q20 0 32 -9.5t12 -30.5q0 -7 -1 -14.5t-4 -17.5l-16 -55h-239zM421 551h251l106 331h-250z" />
-<glyph unicode="$" d="M440 -12q-119 11 -212.5 59.5t-156.5 123.5l61 78q19 25 49 25q18 0 39.5 -19t54 -43.5t78.5 -48t114 -31.5l103 540q-62 19 -121.5 43.5t-106 62t-75 93t-28.5 137.5q0 83 33 160t95 137t150.5 98t199.5 42l28 145q4 19 19 33.5t35 14.5h64l-38 -197 q103 -12 174.5 -52.5t122.5 -99.5l-48 -64q-11 -15 -22 -22t-26 -7q-14 0 -32.5 13t-45.5 30t-63.5 33.5t-86.5 23.5l-93 -491q64 -21 127 -46t112.5 -61.5t80.5 -90.5t31 -133q0 -95 -35 -180.5t-101 -152t-160 -108t-211 -48.5l-34 -178q-4 -18 -18.5 -32t-35.5 -14h-64z M887 432q0 44 -17 76.5t-46 56.5t-68 41.5t-83 32.5l-96 -508q74 7 131.5 32t97.5 64.5t60.5 91.5t20.5 113zM405 1047q0 -42 15.5 -73.5t42 -56t62.5 -43t77 -34.5l87 458q-72 -6 -125.5 -28.5t-89 -56.5t-52.5 -76.5t-17 -89.5z" />
-<glyph unicode="%" horiz-adv-x="1452" d="M732 1144q0 -99 -29.5 -176t-77.5 -130t-109.5 -80.5t-126.5 -27.5q-56 0 -103 20.5t-80.5 59t-52 94t-18.5 125.5q0 99 27 176.5t73.5 131t109 81.5t132.5 28q56 0 103 -20.5t80.5 -59.5t52.5 -95t19 -127zM597 1143q0 50 -10.5 86t-28.5 59t-42.5 34t-52.5 11 q-40 0 -75.5 -17t-61.5 -54t-41.5 -94.5t-15.5 -138.5q0 -49 10 -83.5t28 -57t42.5 -33t53.5 -10.5q39 0 74.5 16.5t62 52t42 92t15.5 137.5zM1228 1403q11 11 25.5 19.5t37.5 8.5h124l-1140 -1403q-10 -13 -24.5 -20.5t-34.5 -7.5h-126zM1372 397q0 -99 -29 -176.5 t-77 -130t-110 -80t-127 -27.5q-56 0 -102.5 20.5t-80 59t-52 93.5t-18.5 125q0 99 27 176.5t73.5 131.5t109 82t132.5 28q56 0 102.5 -20.5t80.5 -59.5t52.5 -95t18.5 -127zM1238 396q0 50 -10.5 85.5t-28.5 58.5t-42.5 33.5t-52.5 10.5q-40 0 -75.5 -17t-62 -54t-42 -94 t-15.5 -138q0 -49 10 -84t28 -57.5t42.5 -33t53.5 -10.5q39 0 74.5 16.5t62.5 52.5t42.5 93t15.5 138z" />
-<glyph unicode="&#x26;" horiz-adv-x="1297" d="M724 1447q70 0 127 -22t98 -61t63.5 -92t22.5 -115v-6t-1 -8l-101 -19q-5 -1 -8.5 -1.5t-7.5 -0.5q-29 0 -36 33q-6 29 -18 57t-32.5 50.5t-50.5 36.5t-71 14q-51 0 -92 -19t-70.5 -52.5t-45.5 -79t-16 -97.5q0 -57 23.5 -117t73.5 -123l322 -409q41 66 68 136.5 t41 141.5q4 18 13 29t28 11h119q-16 -115 -61.5 -226t-116.5 -207l238 -301h-148q-21 0 -36.5 2.5t-27.5 8.5t-22.5 16t-22.5 24l-96 122q-94 -87 -209 -138t-244 -51q-82 0 -150 24.5t-117 70t-76 110.5t-27 146q0 79 26.5 149t73 128.5t109 104.5t134.5 78 q-39 66 -57.5 130t-18.5 127q0 82 28.5 154.5t81 125.5t126.5 84t164 31zM235 357q0 -56 17.5 -99.5t48 -73.5t72.5 -45.5t91 -15.5q95 0 179 43t154 113l-333 425q-115 -62 -172 -151.5t-57 -195.5z" />
-<glyph unicode="'" horiz-adv-x="426" d="M403 1431l-36 -289l-34 -155q-7 -31 -22.5 -48t-44.5 -17q-26 0 -37 17t-11 48v155l37 289h148z" />
-<glyph unicode="(" horiz-adv-x="552" d="M274 441q0 -74 7 -153.5t20.5 -159.5t34.5 -157t48 -144q6 -15 6 -27q0 -17 -9 -27.5t-21 -17.5l-81 -46q-42 86 -71.5 177.5t-48.5 183.5t-28 182t-9 173q0 140 16 272.5t58.5 267.5t116.5 278.5t191 305.5l71 -47q8 -5 14 -13.5t6 -20.5q0 -16 -14 -37 q-74 -114 -131 -227.5t-96 -233.5t-59.5 -250.5t-20.5 -278.5z" />
-<glyph unicode=")" horiz-adv-x="552" d="M313 817q0 73 -7 153t-21.5 160t-35 157t-47.5 144q-6 15 -6 26q0 17 9 27t21 18l82 47q41 -87 70.5 -178t48.5 -183t28 -182t9 -174q0 -140 -16 -272.5t-58 -267.5t-116.5 -278t-191.5 -305l-70 46q-8 6 -14 14t-6 19q0 17 14 39q73 114 130.5 230t96.5 238.5t59.5 252 t20.5 269.5z" />
-<glyph unicode="*" horiz-adv-x="736" d="M361 865l25 198q2 18 6 34.5t12 31.5q-11 -13 -24 -22.5t-30 -19.5l-169 -100l-33 73l169 101q36 21 72 24q-36 3 -66 24l-145 102l51 73l145 -101q16 -11 27.5 -22t19.5 -27q-8 24 -8 47q0 6 0.5 12t1.5 13l25 199h84l-24 -198q-2 -19 -7 -35.5t-14 -33.5 q11 14 25.5 24.5t31.5 20.5l169 100l32 -73l-169 -101q-35 -21 -67 -24q17 -2 31.5 -7.5t29.5 -16.5l145 -102l-50 -72l-145 100q-15 10 -27 20t-20 24q7 -20 7 -42q0 -6 -0.5 -12t-1.5 -13l-24 -199h-85z" />
-<glyph unicode="+" d="M732 1165l-53 -429h410l-16 -130h-410l-53 -431h-141l53 431h-407l16 130h407l54 429h140z" />
-<glyph unicode="," horiz-adv-x="425" d="M50 123q0 47 32.5 80t86.5 33q30 0 53 -11t38.5 -30.5t23.5 -45t8 -55.5q0 -45 -12.5 -93.5t-37 -96t-59.5 -92.5t-80 -83l-31 29q-13 12 -13 28q0 12 16 31l37 45.5t40.5 61t26.5 76.5h-12q-52 0 -84.5 34.5t-32.5 88.5z" />
-<glyph unicode="-" horiz-adv-x="641" d="M115 672h457l-19 -146h-456z" />
-<glyph unicode="." horiz-adv-x="425" d="M45 110q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5z" />
-<glyph unicode="/" horiz-adv-x="695" d="M93 -25q-16 -32 -45 -49t-56 -17h-73l724 1479q14 30 40 46.5t58 16.5h73z" />
-<glyph unicode="0" d="M695 1447q95 0 175 -36.5t137.5 -109t90 -182t32.5 -255.5q0 -223 -49 -388.5t-133 -274.5t-195.5 -162.5t-237.5 -53.5q-96 0 -176 36.5t-137.5 109t-90 182t-32.5 256.5q0 223 49 388t133 274t196 162.5t238 53.5zM537 130q84 0 159.5 44.5t132 134.5t89.5 227.5 t33 323.5q0 120 -22.5 204.5t-60.5 137.5t-88.5 77t-106.5 24q-84 0 -159.5 -44.5t-132 -135t-89.5 -228t-33 -323.5q0 -120 22.5 -204.5t60.5 -137t88.5 -76.5t106.5 -24z" />
-<glyph unicode="1" d="M244 132h310l123 1005l18 77l-293 -229q-18 -14 -38 -14q-15 0 -27 6.5t-17 14.5l-44 75l470 369h140l-160 -1304h284l-16 -132h-765z" />
-<glyph unicode="2" d="M715 1447q83 0 153.5 -23.5t121.5 -68.5t79.5 -109.5t28.5 -146.5q0 -91 -28.5 -166t-77.5 -142t-114.5 -130l-139.5 -130l-431 -392q41 11 82 17t79 6h490q26 0 40 -14t14 -37q0 -10 -2 -27t-4 -31l-7 -53h-952l7 59q2 17 12 37.5t28 36.5l518 463q73 65 130 123.5 t96.5 116t60 117.5t20.5 129q0 54 -17.5 95t-48.5 68t-73.5 41t-92.5 14q-112 0 -190.5 -58.5t-115.5 -160.5q-11 -29 -28.5 -41t-42.5 -12q-5 0 -11 0.5t-12 1.5l-87 15q25 98 74.5 173t116.5 126t149.5 77t174.5 26z" />
-<glyph unicode="3" d="M737 1447q84 0 153.5 -23t118.5 -65.5t76 -102.5t27 -133q0 -79 -21 -139.5t-59.5 -105.5t-93 -74.5t-121.5 -47.5q122 -35 183.5 -112.5t61.5 -189.5q0 -108 -43 -194.5t-116 -148t-169.5 -94.5t-202.5 -33q-100 0 -175 23t-128 69t-86 116t-49 165l80 30q22 8 40 8 q19 0 32.5 -8t18.5 -24q16 -58 38 -101.5t55 -72.5t79 -43.5t111 -14.5q82 0 146 28t107.5 73t66.5 102t23 116q0 48 -15 88.5t-54 70t-105 46.5t-168 17l16 123q190 4 283 81.5t93 211.5q0 53 -17 93t-48 66.5t-73 39.5t-92 13q-114 0 -192 -59t-116 -160 q-11 -29 -28.5 -41t-41.5 -12q-5 0 -10.5 0.5t-10.5 1.5l-88 15q25 98 74.5 173t116.5 126t149 77t174 26z" />
-<glyph unicode="4" d="M909 514h217l-14 -98q-2 -15 -12.5 -26t-30.5 -11h-177l-46 -379h-156l47 379h-630q-20 0 -37 11t-19 28l-6 87l811 928h166zM828 1117q2 24 8 51.5t14 56.5l-615 -711h518z" />
-<glyph unicode="5" d="M1084 1357q-5 -36 -30.5 -59.5t-80.5 -23.5h-455l-115 -385q111 24 203 24q105 0 183.5 -28.5t131 -78.5t78.5 -118.5t26 -149.5q0 -126 -46.5 -228.5t-125.5 -174.5t-184.5 -111.5t-222.5 -39.5q-63 0 -119 12t-103.5 32.5t-86.5 47.5t-69 57l61 74q21 24 49 24 q19 0 42.5 -15.5t57 -34t81 -34t114.5 -15.5q83 0 152.5 28t119.5 78.5t77.5 121t27.5 156.5q0 57 -18 103.5t-54 80t-91 51.5t-130 18q-50 0 -107.5 -8.5t-125.5 -26.5l-103 31l197 668h676z" />
-<glyph unicode="6" d="M697 876q79 0 147.5 -25t119 -73t79.5 -117t29 -156q0 -111 -42 -206t-116 -165t-174.5 -110t-218.5 -40q-98 0 -175 30t-131 85t-82.5 132t-28.5 172q0 62 14 121.5t42.5 120t72 123t103.5 131.5l427 491q15 17 40.5 29t55.5 12h153l-492 -537l-83 -95q55 36 120.5 56.5 t139.5 20.5zM267 397q0 -59 18 -108.5t52 -85.5t84 -56t114 -20q79 0 145.5 26.5t115 73.5t75.5 111t27 140q0 61 -19.5 110.5t-55 84t-86 53t-112.5 18.5q-79 0 -145 -28t-113 -75.5t-73.5 -110.5t-26.5 -133z" />
-<glyph unicode="7" d="M1200 1433l-7 -68q-3 -25 -9.5 -47.5t-15.5 -36.5l-766 -1237q-11 -18 -30.5 -31t-42.5 -13h-142l753 1190q15 24 30.5 44.5t34.5 39.5h-753q-17 0 -27.5 11t-10.5 27v4l15 117h971z" />
-<glyph unicode="8" d="M518 -16q-99 0 -179.5 25.5t-137.5 72.5t-88 113.5t-31 147.5q0 161 86.5 262t242.5 142q-97 38 -145.5 111t-48.5 171q0 88 36 164.5t99.5 133t151.5 88.5t193 32q90 0 162 -26t122.5 -71.5t77.5 -107t27 -131.5q0 -131 -69.5 -226t-203.5 -140q116 -35 178 -112 t62 -194q0 -105 -40.5 -189t-112 -143.5t-169.5 -91t-213 -31.5zM534 121q78 0 141 23t108 64t69 99t24 128q0 64 -22.5 109t-60.5 73.5t-87.5 42t-102.5 13.5q-66 0 -127 -18t-108.5 -56t-76 -97.5t-28.5 -142.5q0 -53 18 -96.5t53 -75t85 -49t115 -17.5zM619 811 q81 0 137.5 26t92 67.5t51.5 92.5t16 102q0 45 -14.5 84t-43.5 68.5t-73 46.5t-103 17q-72 0 -127.5 -22.5t-93.5 -60.5t-57.5 -90t-19.5 -110q0 -43 13 -83t41.5 -70.5t73 -49t107.5 -18.5z" />
-<glyph unicode="9" d="M565 589q-75 0 -140 24t-113 70t-75.5 112.5t-27.5 150.5q0 105 41 196.5t112.5 159t168.5 106.5t209 39q94 0 168.5 -29.5t126.5 -82.5t80 -127t28 -162q0 -72 -15 -134.5t-44.5 -121.5t-71.5 -118t-96 -125l-413 -506q-15 -18 -39 -29.5t-54 -11.5h-158l505 572l49 56 t43 53q-61 -45 -133.5 -68.5t-150.5 -23.5zM979 1047q0 58 -18.5 105.5t-52.5 81.5t-81.5 52.5t-105.5 18.5q-73 0 -134.5 -25t-106.5 -69.5t-70.5 -106t-25.5 -135.5q0 -117 66.5 -182t186.5 -65q79 0 142 26.5t107.5 71.5t68.5 104t24 123z" />
-<glyph unicode=":" horiz-adv-x="425" d="M45 110q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5zM145 860q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27 t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5z" />
-<glyph unicode=";" horiz-adv-x="425" d="M46 123q0 47 32.5 80t86.5 33q30 0 53 -11t38.5 -30.5t23.5 -45t8 -55.5q0 -45 -12.5 -93.5t-37 -96t-59.5 -92.5t-80 -83l-31 29q-13 12 -13 28q0 12 16 31l37 45.5t40.5 61t26.5 76.5h-12q-52 0 -84.5 34.5t-32.5 88.5zM151 860q0 26 9.5 49t26.5 40t39.5 27t49.5 10 q26 0 48.5 -10t39.5 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5z" />
-<glyph unicode="&#x3c;" horiz-adv-x="1067" d="M168 710l822 401l-16 -127q-2 -17 -12 -29.5t-30 -22.5l-477 -228q-21 -11 -44.5 -18.5t-49.5 -13.5q24 -5 45.5 -13t40.5 -18l422 -227q15 -8 22.5 -19.5t7.5 -22.5q0 -1 -1.5 -14t-4 -32.5l-5.5 -43.5l-6 -48l-723 402z" />
-<glyph unicode="=" d="M157 573h858l-16 -131h-858zM199 906h856l-15 -131h-857z" />
-<glyph unicode="&#x3e;" horiz-adv-x="1067" d="M947 636l-822 -401l16 127q2 17 12 29.5t30 22.5l477 228q21 11 44.5 18.5t49.5 13.5q-24 5 -45.5 13t-40.5 18l-422 227q-15 8 -22.5 19.5t-7.5 22.5q0 1 1.5 14t4 32.5l5.5 43.5l6 48l723 -402z" />
-<glyph unicode="?" horiz-adv-x="737" d="M132 1303q33 29 70.5 55t81 46t93 31.5t105.5 11.5q70 0 126.5 -21t96.5 -58t61 -87.5t21 -109.5q0 -84 -23.5 -143t-59.5 -102.5t-79.5 -75l-83 -61t-70 -61.5t-40.5 -75l-37 -154h-119l11 166q3 48 29.5 85t64.5 69.5t81.5 63.5t80 67t61 81.5t24.5 106.5 q0 78 -47.5 123t-128.5 45q-56 0 -97 -15t-70.5 -33t-49 -33t-32.5 -15q-24 0 -34 22zM183 110q0 26 9.5 49t26 40t39 27t49.5 10q26 0 49 -10t40 -27t26.5 -40t9.5 -49q0 -27 -9.5 -49.5t-26.5 -39.5t-40 -26.5t-49 -9.5q-27 0 -49.5 9.5t-39 26.5t-26 39.5t-9.5 49.5z" />
-<glyph unicode="@" horiz-adv-x="1497" d="M1026 186q-70 0 -111 37t-45 114q-63 -80 -130 -114.5t-139 -34.5q-48 0 -83.5 17.5t-58.5 47.5t-34.5 71t-11.5 89q0 60 16 123t47.5 121.5t77 110.5t105 91t131.5 61.5t156 22.5q63 0 108.5 -10t86.5 -30l-132 -360q-19 -52 -27.5 -90t-8.5 -66q0 -27 7 -44.5t19.5 -28 t29 -14.5t35.5 -4q51 0 99.5 35t86 98.5t60.5 151.5t23 193q0 116 -34 204t-95 147t-145.5 89t-185.5 30q-135 0 -256.5 -58.5t-213 -163.5t-145.5 -249t-54 -315q0 -141 40 -250t111.5 -182.5t170.5 -111.5t217 -38q141 0 248 31t183 79q11 7 19 9t16 2q15 0 24 -9.5 t13 -21.5l12 -51q-107 -72 -237.5 -113t-290.5 -41q-145 0 -265 47.5t-206.5 137t-134 217t-47.5 287.5q0 127 30 243.5t83.5 217t128.5 183t165 141t192 90.5t211 32q117 0 220.5 -39.5t181 -114.5t122.5 -183t45 -246q0 -127 -34.5 -234.5t-93.5 -186t-137 -123 t-165 -44.5zM650 303q27 0 57 10t59 35.5t57 69t52 110.5l107 296q-35 9 -76 9q-73 0 -138 -35.5t-113.5 -92.5t-77 -128.5t-28.5 -144.5q0 -57 25 -93t76 -36z" />
-<glyph unicode="A" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5z" />
-<glyph unicode="B" horiz-adv-x="1191" d="M97 0l177 1433h424q112 0 192.5 -22.5t132.5 -64t77 -101t25 -132.5q0 -64 -18.5 -122t-55.5 -107t-92.5 -87t-129.5 -61q129 -29 194 -101.5t65 -184.5q0 -99 -35.5 -181.5t-102.5 -142.5t-163.5 -93t-217.5 -33h-472zM365 655l-63 -507h282q79 0 139 21t100 60t60 94 t20 124q0 95 -64 151.5t-193 56.5h-281zM381 787h231q81 0 141.5 21.5t101 60t60.5 92.5t20 119q0 103 -62 154.5t-192 51.5h-238z" />
-<glyph unicode="C" horiz-adv-x="1234" d="M679 145q66 0 117 11t90 27t66.5 35.5t48 35.5l34.5 27t25 11q9 0 15 -3.5t10 -8.5l65 -81q-94 -102 -216.5 -158.5t-285.5 -56.5q-128 0 -230 46t-172.5 128.5t-108 196.5t-37.5 251q0 187 58 342t159.5 266.5t238.5 173t295 61.5q76 0 138 -13t113 -38t92.5 -60 t77.5 -78l-64 -78q-8 -10 -18 -16.5t-25 -6.5q-18 0 -38 20t-54.5 43.5t-89 43.5t-141.5 20q-116 0 -217 -46.5t-175 -133t-116.5 -209.5t-42.5 -276q0 -111 29 -199t80.5 -149.5t122.5 -94.5t156 -33z" />
-<glyph unicode="D" horiz-adv-x="1385" d="M1341 817q0 -183 -56.5 -333.5t-156 -258t-237 -166.5t-299.5 -59h-495l177 1433h494q132 0 238.5 -45t180.5 -126.5t114 -195t40 -249.5zM1149 813q0 108 -27.5 195t-79 147.5t-125.5 93t-167 32.5h-306l-140 -1130h306q120 0 219 45.5t170 131t110.5 208t39.5 277.5z " />
-<glyph unicode="E" horiz-adv-x="1067" d="M1070 1280h-627l-60 -483h508l-19 -147h-507l-61 -498h629l-19 -152h-817l177 1433h815z" />
-<glyph unicode="F" horiz-adv-x="1041" d="M1070 1280h-627l-63 -510h537l-21 -152h-534l-76 -618h-189l177 1433h815z" />
-<glyph unicode="G" horiz-adv-x="1349" d="M704 135q52 0 97 5.5t84.5 16.5t76 26.5t72.5 35.5l39 324h-199q-17 0 -26.5 9t-9.5 23l0.5 5t1 11t1 11l0.5 5l9 79h410l-67 -547q-54 -39 -111.5 -68t-121.5 -48.5t-135 -29t-153 -9.5q-130 0 -235.5 46.5t-180.5 130t-115.5 199.5t-40.5 254q0 185 57.5 338.5t159 264 t241 171.5t304.5 61q83 0 151 -14t123 -39t99.5 -59t81.5 -74l-60 -78q-10 -13 -20.5 -20t-24.5 -7q-17 0 -33 10q-22 13 -48.5 33.5t-64 39t-90.5 32t-128 13.5q-123 0 -225.5 -47t-176 -134t-114.5 -210t-41 -274q0 -113 29.5 -203t83.5 -153t130 -96.5t170 -33.5z" />
-<glyph unicode="H" horiz-adv-x="1392" d="M1173 0h-189l81 654h-699l-80 -654h-189l177 1433h188l-79 -643h699l79 643h188z" />
-<glyph unicode="I" horiz-adv-x="566" d="M317 0h-188l175 1433h188z" />
-<glyph unicode="J" horiz-adv-x="817" d="M657 475q-29 -238 -148.5 -364.5t-317.5 -126.5q-54 0 -101 7t-95 21l14 109q2 15 11.5 26t29.5 11q10 0 23 -2.5t29.5 -6t38 -6t49.5 -2.5q52 0 98 17t83 56t62.5 102t36.5 155l117 962h187z" />
-<glyph unicode="K" horiz-adv-x="1257" d="M398 802h66q35 0 57.5 9.5t43.5 32.5l496 544q23 26 45 35.5t52 9.5h159l-572 -620q-21 -23 -39.5 -38.5t-38.5 -24.5q24 -10 41.5 -27.5t34.5 -43.5l432 -679h-161q-18 0 -30.5 3t-21 8t-14.5 12.5t-12 16.5l-376 572q-16 24 -35.5 35t-62.5 11h-81l-81 -658h-186 l175 1433h187z" />
-<glyph unicode="L" horiz-adv-x="947" d="M303 158h567l-19 -158h-754l177 1433h187z" />
-<glyph unicode="M" horiz-adv-x="1696" d="M820 500l11.5 -40.5t10.5 -40.5q18 42 42 81l563 901q14 23 28.5 27.5t39.5 4.5h139l-176 -1433h-164l131 1059q2 20 6.5 43l9.5 48l-557 -898q-26 -43 -73 -43h-26q-46 0 -63 43l-345 900l-2 -47t-3 -43l-130 -1062h-165l177 1433h137q25 0 39.5 -4.5t22.5 -27.5 l347 -901v0z" />
-<glyph unicode="N" horiz-adv-x="1391" d="M370 1433q25 0 36.5 -6t23.5 -26l618 -1095q2 23 4 43.5l4 39.5l128 1044h165l-176 -1433h-94q-23 0 -38 7.5t-26 27.5l-617 1096q0 -5 -0.5 -14t-1.5 -19l-2 -20.5t-2 -17.5l-130 -1060h-165l177 1433h96v0z" />
-<glyph unicode="O" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5z" />
-<glyph unicode="P" horiz-adv-x="1128" d="M366 538l-66 -538h-186l175 1433h395q114 0 198 -27t138.5 -77t81.5 -120t27 -156q0 -113 -37 -207.5t-107.5 -162.5t-174 -106.5t-236.5 -38.5h-208zM458 1286l-74 -600h208q85 0 150 26t109 72.5t67 111t23 140.5q0 58 -17 104t-51 78.5t-86 50t-121 17.5h-208z" />
-<glyph unicode="Q" horiz-adv-x="1464" d="M1422 818q0 -121 -25.5 -229t-72.5 -200t-113.5 -166.5t-148.5 -126.5l289 -393h-151q-34 0 -60.5 9.5t-44.5 34.5l-197 273q-54 -17 -110.5 -26t-116.5 -9q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62 q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5z " />
-<glyph unicode="R" horiz-adv-x="1188" d="M374 601l-74 -601h-186l175 1433h377q114 0 197.5 -24t138 -68.5t81 -108t26.5 -141.5q0 -87 -26 -162t-75 -134.5t-118 -101t-156 -61.5q32 -22 53 -60l309 -572h-166q-49 0 -70 40l-270 516q-13 25 -30 35t-54 10h-132zM459 1286l-68 -549h183q85 0 150 24t109.5 67.5 t67 103t22.5 130.5q0 109 -68.5 166.5t-205.5 57.5h-190z" />
-<glyph unicode="S" horiz-adv-x="977" d="M926 1211q-11 -14 -21 -21.5t-24 -7.5q-17 0 -36 17.5t-48.5 38t-71.5 38t-105 17.5q-64 0 -114 -20t-84.5 -54.5t-52.5 -80.5t-18 -99q0 -52 24 -87.5t63 -61t89.5 -45l102.5 -40t102.5 -45.5t89.5 -62t63 -89t24 -126q0 -102 -35 -192.5t-100.5 -158.5t-158.5 -108 t-209 -40q-128 0 -228.5 50.5t-165.5 136.5l66 89q8 11 20 18t26 7q19 0 41 -22.5t56 -50t84 -50t125 -22.5q69 0 124.5 22t94 61t59.5 93.5t21 120.5q0 55 -24 91.5t-63 61.5t-88.5 43.5l-102 37.5t-102 43t-88.5 61t-63 91t-24 133q0 88 32 169t92 143t146 99t194 37 q110 0 198 -42t145 -115z" />
-<glyph unicode="T" horiz-adv-x="1087" d="M1177 1433l-20 -157h-423l-156 -1276h-186l156 1276h-425l19 157h1035z" />
-<glyph unicode="U" horiz-adv-x="1343" d="M630 147q80 0 147.5 31t118 85.5t83 130.5t43.5 166l107 873h187l-106 -873q-15 -123 -64.5 -228.5t-127.5 -183t-181.5 -121.5t-226.5 -44q-111 0 -197 36t-145.5 100.5t-90.5 153.5t-31 195q0 45 6 92l106 873h187l-107 -872q-2 -20 -3.5 -39t-1.5 -37q0 -75 19.5 -137 t57 -107t93 -69.5t127.5 -24.5z" />
-<glyph unicode="V" horiz-adv-x="1259" d="M124 1433h149q25 0 39 -13t19 -32l239 -1024q8 -32 15.5 -70.5t12.5 -80.5q14 42 29.5 80t31.5 71l489 1024q8 16 26.5 30.5t42.5 14.5h150l-713 -1433h-169z" />
-<glyph unicode="W" horiz-adv-x="1882" d="M129 1433h146q25 0 40 -12.5t18 -32.5l154 -1014q2 -14 3.5 -34t3.5 -39l2 -45q10 32 20.5 62t21.5 56l429 1014q8 17 26 31t42 14h43q25 0 40 -12.5t19 -32.5l179 -1014q5 -26 8 -55t5 -61l18.5 61t18.5 55l403 1014q7 17 26.5 31t43.5 14h146l-587 -1433h-169 l-194 1103q-3 16 -5.5 35t-4.5 39l-13.5 -39t-13.5 -35l-465 -1103h-168z" />
-<glyph unicode="X" horiz-adv-x="1192" d="M500 765l-337 668h169q21 0 30 -7t16 -21l256 -540q9 19 22 37l364 502q11 14 21.5 21.5t25.5 7.5h193l-501 -660l378 -773h-168q-20 0 -31.5 11.5t-17.5 24.5l-292 625q-8 -17 -18 -30l-431 -595q-26 -36 -62 -36h-187z" />
-<glyph unicode="Y" horiz-adv-x="1165" d="M686 573l-71 -573h-187l71 571l-378 862h166q25 0 38 -12.5t21 -31.5l238 -574q10 -29 17 -55t12 -52q12 26 26.5 52l31.5 55l381 574q11 16 27.5 30t40.5 14h155z" />
-<glyph unicode="Z" horiz-adv-x="1148" d="M1195 1433l-8 -60q-2 -14 -8 -25.5t-15 -23.5l-876 -1172h738l-20 -152h-990l8 59q2 14 7.5 25t14.5 23l876 1173h-713l19 153h967z" />
-<glyph unicode="[" horiz-adv-x="552" d="M33 -287l223 1819h343l-8 -67q-2 -20 -17 -33t-36 -13h-151l-197 -1592h153q19 0 30.5 -11t11.5 -28q0 -1 -0.5 -7t-1.5 -14.5t-2.5 -18t-2.5 -18.5l-2 -17h-343z" />
-<glyph unicode="\" horiz-adv-x="694" d="M108 1451h73q32 0 53.5 -17t29.5 -46l361 -1479h-72q-28 0 -53 17t-33 49z" />
-<glyph unicode="]" horiz-adv-x="552" d="M209 1532h344l-224 -1819h-344l9 67q2 20 16.5 33.5t36.5 13.5h152l196 1592h-152q-20 0 -31.5 11.5t-11.5 28.5l6 48z" />
-<glyph unicode="^" d="M574 1433h114l359 -646h-130q-17 0 -29 10t-20 24l-196 352q-13 23 -22.5 44.5t-16.5 42.5q-14 -44 -37 -87l-193 -352q-8 -14 -20 -24t-32 -10h-136z" />
-<glyph unicode="_" horiz-adv-x="726" d="M645 -168l-15 -116h-725l14 116h726z" />
-<glyph unicode="`" horiz-adv-x="568" d="M240 1447q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="a" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241z" />
-<glyph unicode="b" horiz-adv-x="1052" d="M80 0l178 1473h175l-88 -716q38 61 82 111.5t92 85.5t100 54.5t106 19.5q129 0 201 -94t72 -275q0 -82 -17 -164t-48.5 -156.5t-76 -139t-99 -112t-118.5 -74.5t-134 -27q-81 0 -146.5 34t-107.5 97l-13 -65q-8 -26 -20.5 -39t-42.5 -13h-95zM658 885q-48 0 -97 -30 t-94.5 -83t-85.5 -126t-69 -160l-32 -263q38 -54 91 -76.5t108 -22.5q52 0 98 22t84 59.5t68 88t50.5 108t31.5 119t11 121.5q0 119 -43 181t-121 62z" />
-<glyph unicode="c" horiz-adv-x="868" d="M820 182q-52 -57 -98.5 -95t-93.5 -60.5t-97.5 -31.5t-108.5 -9q-88 0 -155.5 30t-113 84.5t-69 131t-23.5 168.5q0 123 38.5 236t107.5 200t164 139t209 52q100 0 168 -35.5t119 -103.5l-56 -67q-6 -8 -15 -13t-20 -5q-14 0 -27.5 12.5t-35 28t-54 28t-83.5 12.5 q-69 0 -130.5 -37.5t-107.5 -102.5t-72.5 -154t-26.5 -191q0 -62 14 -112.5t42 -86t68.5 -55t94.5 -19.5q45 0 80 9.5t62 23.5t47.5 30.5l37 30.5t30 23.5t27.5 9.5q20 0 34 -17l44 -54v0z" />
-<glyph unicode="d" horiz-adv-x="1054" d="M757 0q-35 0 -47.5 18t-12.5 44l19 211q-38 -65 -83 -118t-94.5 -90.5t-103 -58t-108.5 -20.5q-130 0 -201.5 94.5t-71.5 274.5q0 82 17 164t48.5 157t76 139.5t99 111.5t118.5 74t134 27q74 0 135.5 -29t104.5 -83l69 557h175l-182 -1473h-92zM394 129q48 0 96.5 29.5 t94 82t85 125t68.5 158.5l33 268q-38 53 -91 75t-107 22q-79 0 -142.5 -47t-108 -121.5t-68.5 -166.5t-24 -181q0 -119 43 -181.5t121 -62.5z" />
-<glyph unicode="e" horiz-adv-x="924" d="M882 796q0 -66 -27 -121.5t-99 -100t-198 -77.5t-324 -53q-1 -11 -1 -21.5v-21.5q0 -134 58.5 -204.5t176.5 -70.5q48 0 85.5 10t67 24.5t52 32l41.5 32t35 24.5t32 10q18 0 33 -17l44 -55q-51 -53 -99.5 -90.5t-99.5 -62.5t-106.5 -36.5t-119.5 -11.5q-87 0 -156 29 t-117 82.5t-74 129.5t-26 170q0 78 16.5 155.5t48 147.5t77 130t104 103.5t129 68.5t151.5 25q77 0 133 -22t92 -56t53.5 -75t17.5 -78zM576 899q-63 0 -116 -26t-94 -71.5t-70 -107t-45 -132.5q154 19 247 43.5t143 53t66 61.5t16 69q0 18 -8 37.5t-25.5 35.5t-45.5 26.5 t-68 10.5z" />
-<glyph unicode="f" horiz-adv-x="607" d="M375 865l-101 -832l-46 -207q-17 -75 -92 -75h-70l135 1111l-100 13q-17 5 -27 14t-10 26l8 78h145l12 98q11 87 43.5 154.5t82 114t113 70.5t136.5 24q62 0 113 -20l-17 -92q-2 -14 -13.5 -17.5t-29.5 -3.5q-9 0 -19.5 0.5t-22.5 0.5q-43 0 -79.5 -12.5t-64.5 -40.5 t-47 -73t-27 -110l-12 -93h253l-17 -128h-246z" />
-<glyph unicode="g" horiz-adv-x="931" d="M817 732q-1 -50 -12.5 -90t-28.5 -74t-37 -64t-37 -60t-28.5 -61.5t-11.5 -68.5q0 -42 20.5 -76t45 -70t45 -78.5t20.5 -100.5q0 -71 -33 -134.5t-94 -112.5t-148.5 -77.5t-196.5 -28.5q-87 0 -158.5 18t-122 51t-78 79.5t-27.5 102.5q0 79 41 136t108 94t152.5 54 t174.5 17q36 0 71.5 -3t70.5 -8q-9 19 -14.5 39.5t-5.5 44.5q0 31 9.5 64t31.5 74q-38 -26 -85 -40t-107 -14q-58 0 -108.5 19t-88.5 56t-60 92.5t-22 129.5q0 72 26.5 141.5t77.5 124t126 87.5t173 33q110 0 191 -52h275l-8 -59q-2 -17 -11.5 -31t-28.5 -17l-126 -22 q9 -26 14 -54.5t5 -60.5zM431 457q54 0 95 23.5t69.5 62t43.5 86.5t15 97q0 88 -44.5 133t-122.5 45q-54 0 -95 -22t-69 -59t-42.5 -84t-14.5 -98q0 -90 43.5 -137t121.5 -47zM631 -25q0 26 -5 48.5t-13 42.5q-54 9 -101.5 13t-89.5 4q-82 0 -142 -14.5t-99 -38.5t-58 -55.5 t-19 -65.5q0 -72 60.5 -110t171.5 -38q66 0 120.5 17.5t93 46.5t60 68t21.5 82z" />
-<glyph unicode="h" horiz-adv-x="1062" d="M80 0l178 1473h178l-83 -684q79 118 175.5 178.5t197.5 60.5q115 0 177 -76t62 -221q0 -20 -1 -41.5t-4 -44.5l-76 -645h-178l76 645q2 20 3.5 38.5t1.5 35.5q0 82 -30.5 122t-96.5 40q-45 0 -92.5 -24.5t-92.5 -69.5t-84 -108.5t-68 -141.5l-65 -537h-178z" />
-<glyph unicode="i" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175zM460 1331q0 -26 -10.5 -48.5t-28 -40t-39.5 -27.5t-46 -10q-23 0 -45 10t-38.5 27.5t-26.5 40t-10 48.5t10 49t27 40.5t39 28t45 10.5q24 0 46 -10t39.5 -27.5t27.5 -41t10 -49.5z" />
-<glyph unicode="j" horiz-adv-x="477" d="M392 1013l-134 -1088q-8 -61 -30.5 -113.5t-60.5 -91.5t-90.5 -61.5t-119.5 -22.5q-35 0 -60 5t-49 15l18 96q5 13 12 16.5t21 3.5q7 0 15.5 -0.5t19.5 -0.5q71 0 105.5 36.5t44.5 117.5l133 1088h175zM455 1331q0 -26 -10.5 -48.5t-28 -40t-40 -27.5t-45.5 -10 q-24 0 -45.5 10t-38 27.5t-26.5 40t-10 48.5t10 49t27 40.5t38.5 28t45.5 10.5t46 -10t39.5 -27.5t27.5 -41t10 -49.5z" />
-<glyph unicode="k" horiz-adv-x="961" d="M435 1473l-106 -867h31q20 0 33 5.5t29 22.5l335 343q16 16 31 26t39 10h157l-391 -397q-15 -16 -29.5 -29.5t-31.5 -23.5q16 -12 27 -28t22 -35l304 -500h-153q-22 0 -35.5 8t-24.5 27l-258 415q-13 20 -25.5 27t-40.5 7h-34l-59 -484h-176l181 1473h175z" />
-<glyph unicode="l" horiz-adv-x="477" d="M89 0l179 1473h175l-179 -1473h-175z" />
-<glyph unicode="m" horiz-adv-x="1569" d="M72 0l122 1014h89q60 0 60 -60l-14 -181q75 126 164 190.5t188 64.5q103 0 152 -70.5t49 -201.5q76 139 170.5 205.5t198.5 66.5q112 0 167.5 -73t55.5 -210q0 -23 -2 -48t-5 -52l-76 -645h-175l76 645q6 49 6 89q0 75 -25 110.5t-84 35.5q-43 0 -86 -21.5t-83 -63 t-74.5 -103t-61.5 -141.5l-65 -551h-176l77 645q3 27 5 51t2 45q0 71 -23.5 105t-82.5 34q-48 0 -92.5 -24t-84 -69.5t-73.5 -111t-62 -147.5l-63 -528h-174z" />
-<glyph unicode="n" horiz-adv-x="1054" d="M72 0l121 1014h89q60 0 60 -60l-15 -196q81 134 182.5 202t210.5 68q113 0 175.5 -76t62.5 -222q0 -20 -1 -41t-4 -44l-76 -645h-178l76 645q2 20 3.5 38.5t1.5 35.5q0 82 -30.5 121.5t-95.5 39.5q-48 0 -97.5 -26t-95.5 -73.5t-85.5 -115t-67.5 -150.5l-58 -515h-178z " />
-<glyph unicode="o" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5z" />
-<glyph unicode="p" horiz-adv-x="1038" d="M29 -343l165 1357h89q60 0 60 -60l-17 -216q38 66 83 119.5t94.5 91.5t103.5 58.5t110 20.5q129 0 201 -94t72 -275q0 -82 -17 -164t-48.5 -156.5t-76 -139t-99 -112t-118.5 -74.5t-134 -27q-75 0 -137 29.5t-104 84.5l-54 -443h-173zM650 885q-48 0 -97.5 -30t-95.5 -84 t-85.5 -128t-68.5 -161l-32 -258q38 -55 91.5 -77.5t108.5 -22.5q52 0 98 22t84 59.5t68 88t50.5 108t31.5 119t11 121.5q0 119 -43 181t-121 62z" />
-<glyph unicode="q" horiz-adv-x="1012" d="M774 -343h-112q-32 0 -45 18.5t-13 43.5q0 3 1 11l2 16.5t2 15.5t1 9l59 471q-35 -59 -75 -106t-85 -80.5t-94 -51.5t-101 -18q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5 t121.5 -36.5zM381 134q48 0 94.5 30t88.5 83t78 126.5t64 160.5l45 355q-21 5 -42.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241z" />
-<glyph unicode="r" horiz-adv-x="704" d="M72 0l122 1014h89q28 0 44 -13t16 -40q0 -4 -0.5 -11.5l-1 -15.5t-1 -14t-0.5 -7l-14 -184q65 140 145.5 216t169.5 76q42 0 84 -18l-32 -171q-47 19 -91 19q-97 0 -173 -94.5t-127 -286.5l-56 -470h-174z" />
-<glyph unicode="s" horiz-adv-x="780" d="M724 851q-8 -12 -16 -17.5t-20 -5.5q-14 0 -30.5 11t-40 24.5t-57.5 25t-82 11.5q-45 0 -82 -12.5t-64 -34.5t-41.5 -51.5t-14.5 -62.5q0 -47 31 -75t78 -48.5t101.5 -39.5t101.5 -48t78 -74t31 -117q0 -70 -27.5 -134t-79 -112.5t-124 -77.5t-162.5 -29 q-97 0 -171.5 34.5t-121.5 88.5l44 68q8 13 19 20t28 7q16 0 32 -14t40 -31.5t60.5 -31.5t92.5 -14q49 0 88.5 15t67 40t42 58.5t14.5 71.5q0 51 -31 81t-78 50t-101 37.5t-101 45t-78 71.5t-31 117q0 64 25.5 123.5t73.5 105.5t116.5 73.5t154.5 27.5q91 0 160.5 -30.5 t119.5 -82.5z" />
-<glyph unicode="t" horiz-adv-x="687" d="M160 191q0 6 0.5 15.5t2 27.5t4.5 47t9 76l63 507h-113q-13 0 -21.5 7.5t-8.5 23.5q0 3 1 12t2.5 20.5l3 23.5t2.5 23l156 21l75 313q4 15 15 24.5t27 9.5h94l-44 -349h266l-15 -129h-267l-61 -498q-5 -41 -7.5 -66l-4 -40t-2 -21t-0.5 -9q0 -51 23.5 -75.5t64.5 -24.5 q26 0 46 7.5t34.5 16.5t24.5 16.5t18 7.5t12.5 -4t9.5 -13l37 -85q-48 -43 -110.5 -67.5t-125.5 -24.5q-97 0 -153 53t-58 154z" />
-<glyph unicode="u" horiz-adv-x="1052" d="M355 1013l-76 -644q-2 -20 -3.5 -38t-1.5 -35q0 -82 30.5 -122t96.5 -40q46 0 94.5 25t94 71t84.5 111t68 145l63 527h177l-122 -1013h-88q-31 0 -48 14t-17 43q0 1 1 18t2.5 37t3 37t1.5 18l7 81q-81 -129 -181 -195.5t-206 -66.5q-113 0 -175.5 77t-62.5 221q0 20 1 41 t4 44l76 644h177z" />
-<glyph unicode="v" horiz-adv-x="954" d="M76 1013h144q20 0 32 -11t15 -26l151 -652q8 -37 11.5 -74t5.5 -73l23 72.5t30 74.5l314 652q8 16 22 26.5t31 10.5h139l-508 -1013h-149z" />
-<glyph unicode="w" horiz-adv-x="1421" d="M82 1013h133q20 0 32.5 -10t14.5 -27l93 -652q5 -35 5.5 -67.5t1.5 -64.5l24.5 64.5l26.5 67.5l277 656q6 15 19.5 25t30.5 10h74q20 0 31 -10t13 -25l113 -656q6 -35 9.5 -68t6.5 -66l19.5 65.5t23.5 68.5l256 652q6 16 20 26.5t32 10.5h128l-425 -1013h-135 q-23 0 -29 34l-123 687q-3 16 -5 32.5l-4 32.5l-10 -33t-12 -33l-293 -686q-14 -34 -40 -34h-130z" />
-<glyph unicode="x" horiz-adv-x="939" d="M361 545l-243 468h159q20 0 28.5 -5.5t15.5 -19.5l170 -348q5 11 10.5 21t13.5 21l229 303q11 14 20 21t22 7h161l-362 -469l270 -544h-159q-20 0 -31 10.5t-18 24.5l-191 405q-10 -22 -21 -38l-276 -368q-10 -14 -22 -24t-30 -10h-156z" />
-<glyph unicode="y" horiz-adv-x="954" d="M317 -302q-21 -41 -62 -41h-130l219 403l-262 953h147q21 0 31.5 -10.5t14.5 -26.5l163 -638q5 -21 8 -42t5 -42l17.5 42.5t19.5 42.5l320 639q8 16 22.5 25.5t29.5 9.5h141z" />
-<glyph unicode="z" horiz-adv-x="860" d="M849 937q-2 -19 -11 -36.5t-20 -31.5l-584 -730h500l-16 -139h-714l9 74q2 13 10.5 30.5t20.5 33.5l587 735h-492l17 140h702z" />
-<glyph unicode="{" horiz-adv-x="552" d="M158 453q0 52 -28 85t-81 33l13 104q74 0 110.5 59.5t36.5 183.5q0 22 -1.5 48.5l-3 54l-3 54t-1.5 48.5q0 97 22.5 173t67 128.5t110.5 80t152 27.5h49l-9 -77q-2 -20 -17.5 -28t-25.5 -8h-18q-39 0 -72 -15t-56.5 -49.5t-36.5 -90t-13 -136.5v-49.5t0.5 -61t0.5 -61.5 v-49q0 -77 -17 -128.5t-42.5 -84t-55 -49t-54.5 -23.5q53 -17 85 -62.5t32 -108.5q0 -60 -15 -117t-32.5 -114.5t-32.5 -116t-15 -121.5q0 -70 33.5 -112.5t94.5 -42.5h19q10 0 21.5 -7.5t11.5 -24.5q0 -3 -1 -10t-1.5 -14.5t-1.5 -13.5t-1 -7l-4 -37h-50q-69 0 -120 20 t-84.5 55.5t-50.5 84.5t-17 107q0 66 16 126t35 117.5t35 114t16 115.5z" />
-<glyph unicode="|" horiz-adv-x="600" d="M171 1533h138v-1876h-138v1876z" />
-<glyph unicode="}" horiz-adv-x="552" d="M427 793q0 -52 28 -85t81 -33l-13 -104q-74 0 -110.5 -59.5t-36.5 -183.5q0 -22 1.5 -48.5l3 -54l3 -54t1.5 -48.5q0 -97 -22.5 -173t-67 -128.5t-110.5 -80t-152 -27.5h-49l9 77q1 10 6 16.5t11.5 11t13.5 6.5t12 2h18q39 0 72 15t56.5 49.5t36.5 90t13 136.5v49 t-0.5 61.5t-0.5 61v49.5q0 76 17 128t42.5 84.5t55 49t54.5 23.5q-53 17 -85 62.5t-32 108.5q0 60 15 117t32.5 114.5t32.5 116t15 121.5q0 70 -33.5 112.5t-94.5 42.5h-19q-10 0 -21.5 7.5t-11.5 24.5q0 3 1 10t1.5 14.5t1.5 13.5t1 7l4 37h50q69 0 120 -20t84.5 -55.5 t50.5 -84.5t17 -107q0 -66 -16 -126t-35 -117.5t-35 -114t-16 -115.5z" />
-<glyph unicode="~" d="M700 613q65 0 101.5 42.5t37.5 112.5h144q0 -67 -18.5 -123t-53 -96t-85.5 -62t-115 -22q-52 0 -103 16t-98.5 35.5l-90.5 36t-79 16.5q-65 0 -101.5 -42t-37.5 -113h-144q0 67 18.5 123t53 96t85 62.5t115.5 22.5q52 0 103 -16.5t98.5 -36l90.5 -36t79 -16.5z" />
-<glyph unicode="&#xa1;" horiz-adv-x="635" d="M148 -344l67 542q6 45 12.5 87.5t14 86t16.5 89.5l19 98h104q-2 -53 -4.5 -99t-5.5 -89t-6.5 -85.5t-9.5 -87.5l-66 -542h-141zM243 903q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5 q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5z" />
-<glyph unicode="&#xa2;" d="M503 -10q-82 9 -149.5 43t-115.5 90.5t-74 134t-26 173.5q0 126 38.5 233.5t110.5 186.5t176.5 125t236.5 49l34 181q4 19 19 33.5t35 14.5h64l-45 -234q82 -11 144.5 -42.5t110.5 -80.5l-52 -60q-8 -11 -16.5 -15.5t-22.5 -4.5q-12 0 -27 9l-36.5 21t-52 24t-72.5 19 l-147 -771q64 4 109.5 19.5t77 32.5t52.5 30.5t37 13.5q22 0 31 -15l39 -60q-33 -35 -74.5 -62t-89.5 -46t-100.5 -30t-106.5 -14l-33 -177q-4 -19 -18.5 -33.5t-35.5 -14.5h-64zM307 439q0 -132 58 -212.5t164 -101.5l146 768q-90 -6 -158.5 -40t-115 -93t-70.5 -140.5 t-24 -180.5z" />
-<glyph unicode="&#xa3;" d="M84 731h163l33 265q12 94 52 176.5t104.5 143.5t152.5 96t197 35q84 0 145.5 -19t105.5 -52t72.5 -78.5t46.5 -98.5l-75 -44q-20 -12 -39 -12q-14 0 -26 6t-21 20q-18 27 -36 51t-43 42t-60 28t-87 10q-65 0 -118.5 -21.5t-94 -61t-66 -95.5t-33.5 -125l-32 -266h473 l-14 -116h-473l-31 -256q-9 -75 -36 -128t-75 -95q29 6 59 9.5t59 3.5h686l-9 -73q-2 -13 -8.5 -26.5t-18 -24.5t-26 -18t-31.5 -7h-965l14 112q35 10 63.5 25.5t50 39t35 57t19.5 79.5l36 302h-163z" />
-<glyph unicode="&#xa4;" d="M262 672q0 57 16.5 107.5t45.5 94.5l-153 153l91 90l151 -152q44 31 96 48t110 17q57 0 108 -16.5t94 -46.5l153 153l89 -91l-151 -152q31 -44 48 -95.5t17 -109.5q0 -57 -16.5 -108t-45.5 -94l152 -151l-91 -92l-152 152q-44 -31 -96 -47.5t-109 -16.5t-107.5 16.5 t-94.5 45.5l-153 -153l-90 91l152 152q-31 44 -47.5 95.5t-16.5 109.5zM394 672q0 -46 17.5 -86.5t48.5 -71t71.5 -48.5t87.5 -18t88.5 18t72 48.5t48.5 71t18 86.5q0 47 -18 88t-48.5 72t-72 48.5t-88.5 17.5t-87.5 -17.5t-71.5 -48.5t-48.5 -72t-17.5 -88z" />
-<glyph unicode="&#xa5;" d="M163 624h310l-310 807h144q24 0 38 -11.5t21 -31.5l211 -573q12 -33 17 -62t9 -57q9 28 20.5 57.5t31.5 61.5l351 573q11 17 28 30t41 13h145l-510 -807h310l-11 -99h-343l-13 -105h342l-12 -99h-342l-39 -321h-172l39 321h-343l13 99h342l13 105h-343z" />
-<glyph unicode="&#xa6;" horiz-adv-x="600" d="M171 1533h138v-794h-138v794zM171 452h138v-795h-138v795z" />
-<glyph unicode="&#xa7;" horiz-adv-x="927" d="M850 1267q-15 -22 -38 -22q-15 0 -31.5 11.5t-40 25t-56.5 25t-81 11.5q-47 0 -84.5 -14t-64.5 -37t-41.5 -54t-14.5 -65q0 -46 34 -78.5t85 -60.5t110 -56t110 -65t85 -87t34 -122q0 -91 -44.5 -162.5t-139.5 -112.5q37 -33 59.5 -75.5t22.5 -99.5q0 -74 -27 -138.5 t-78 -112.5t-124.5 -75.5t-167.5 -27.5q-97 0 -173.5 34t-124.5 88l48 66q9 13 20 19t29 6t34.5 -14t40.5 -31t60.5 -31t94.5 -14q50 0 89.5 14.5t67 40t42 60t14.5 75.5t-20.5 71t-53.5 54t-75.5 44l-87 41t-87 45t-75.5 55.5t-53.5 72.5t-20.5 97q0 89 48.5 159t151.5 109 q-37 34 -60 78t-23 106q0 65 25.5 124t74 104t118 71.5t156.5 26.5q91 0 161 -31t117 -85zM283 711q0 -47 29 -80t74 -61t100 -53t106 -55q58 29 83 72t25 96q0 49 -27 83t-69.5 61.5t-94 51.5t-100.5 52q-69 -35 -97.5 -75t-28.5 -92z" />
-<glyph unicode="&#xa8;" horiz-adv-x="568" d="M319 1311q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM678 1311q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5t35.5 24.5t43.5 9 t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1597" d="M1083 474q9 0 13.5 -3t9.5 -8l60 -64q-57 -66 -139.5 -102.5t-198.5 -36.5q-98 0 -178.5 34t-138 95t-89 145t-31.5 184q0 101 34 185.5t95 145t144.5 94t181.5 33.5q109 0 184.5 -33.5t132.5 -89.5l-46 -65q-5 -6 -13 -12t-19 -6q-14 0 -29.5 11t-40.5 24.5t-63.5 25 t-96.5 11.5q-71 0 -127 -22.5t-96 -64.5t-61 -102t-21 -135q0 -77 21 -137.5t58.5 -101.5t89 -62.5t113.5 -21.5q63 0 106 12.5t71.5 27t45 27t28.5 12.5zM93 716q0 101 26 194.5t74 175t114.5 148t147.5 114.5t174 74t194 26t194.5 -26t174.5 -74t148 -114.5t114.5 -148 t73.5 -175t26 -194.5q0 -100 -26 -193.5t-73.5 -174.5t-114.5 -147.5t-148 -114.5t-174.5 -74t-194.5 -26q-100 0 -193.5 26t-174.5 74t-147.5 114.5t-114.5 147.5t-74 174t-26 194zM194 716q0 -89 22 -171t62.5 -153.5t98 -129.5t127 -99.5t150.5 -64t169 -22.5t169.5 22.5 t152 64t128 99.5t98.5 129.5t63.5 153.5t22.5 171q0 134 -49.5 251.5t-135 205t-201.5 138t-248 50.5q-88 0 -169 -23t-150.5 -64.5t-127 -100.5t-98 -130.5t-62.5 -154.5t-22 -172z" />
-<glyph unicode="&#xaa;" horiz-adv-x="632" d="M536 840q-17 0 -27 4.5t-12 23.5l-5 49q-25 -21 -48 -37t-47 -27t-50 -16.5t-57 -5.5q-65 0 -106 34.5t-41 102.5q0 40 18.5 77.5t61.5 67t114 48.5t177 22l5 38q1 7 1 13v12q0 46 -20 73t-68 27q-34 0 -58 -9t-42 -19.5l-33 -19.5t-30 -9q-14 0 -22 7t-12 17l-17 40 q54 50 114 73t128 23q44 0 78 -15.5t57.5 -41.5t35.5 -61.5t12 -75.5q0 -8 -0.5 -17t-1.5 -17l-47 -381h-58zM339 920q46 0 81.5 19t71.5 54l13 109q-66 -2 -112 -11t-74.5 -24t-41 -36t-12.5 -47q0 -34 21 -49t53 -15z" />
-<glyph unicode="&#xab;" horiz-adv-x="858" d="M128 518l3 22l278 388l53 -27q22 -12 22 -33q0 -19 -15 -40l-175 -263q-17 -26 -31 -36q11 -11 22 -36l111 -263q3 -8 5 -14.5t2 -13.5q0 -31 -32 -46l-60 -27zM404 518l3 22l278 388l53 -27q22 -12 22 -33q0 -19 -15 -40l-175 -263q-17 -26 -31 -36q11 -11 22 -36 l111 -263q3 -8 5 -14.5t2 -13.5q0 -31 -32 -46l-60 -27z" />
-<glyph unicode="&#xac;" d="M180 736h859l-52 -418h-147l36 288h-711z" />
-<glyph unicode="&#xad;" horiz-adv-x="0" />
-<glyph unicode="&#xae;" horiz-adv-x="1597" d="M90 716q0 101 26 194.5t73.5 175t114.5 148t148 114.5t174 74t194 26t194.5 -26t174.5 -74t148 -114.5t114.5 -148t73.5 -175t26 -194.5q0 -100 -26 -193.5t-73.5 -174.5t-114.5 -147.5t-148 -114.5t-174.5 -74t-194.5 -26t-194 26t-174 74t-148 114.5t-114.5 147.5 t-73.5 174t-26 194zM190 716q0 -89 22 -171t63 -153.5t98 -129.5t127 -99.5t151 -64t169 -22.5t169.5 22.5t152 64t128 99.5t98.5 129.5t63.5 153.5t22.5 171q0 134 -49.5 251.5t-135 205t-201.5 138t-248 50.5t-247 -50.5t-200 -138t-134 -205t-49 -251.5zM676 626v-354 h-155v892h287q173 0 255.5 -62.5t82.5 -184.5q0 -94 -53 -159.5t-159 -90.5q17 -11 28 -26.5l24 -34.5l229 -334h-149q-31 0 -48 25l-202 302q-9 13 -21.5 20t-38.5 7h-80zM676 740h116q55 0 93.5 10.5t62 30.5t34 49t10.5 67q0 37 -9 65t-30.5 46t-57 27t-87.5 9h-132v-304 z" />
-<glyph unicode="&#xaf;" horiz-adv-x="568" d="M126 1345h530l-14 -113h-530z" />
-<glyph unicode="&#xb0;" horiz-adv-x="773" d="M142 1128q0 67 25.5 126t69.5 102.5t103 68.5t127 25q69 0 128.5 -25t103.5 -68.5t69 -102.5t25 -126q0 -66 -25 -124.5t-69 -102t-103.5 -69t-128.5 -25.5q-68 0 -127 25.5t-103 69t-69.5 102t-25.5 124.5zM267 1127q0 -42 15.5 -78.5t42.5 -63.5t63.5 -42.5t78.5 -15.5 t78.5 15.5t63.5 42.5t42 63.5t15 78.5t-15 79t-42 64.5t-63.5 43t-78.5 15.5t-78.5 -15.5t-63.5 -43t-42.5 -64.5t-15.5 -79z" />
-<glyph unicode="&#xb1;" d="M735 1199l-47 -379h411l-16 -131h-411l-45 -370h-140l45 370h-406l15 131h407l47 379h140zM66 211h957l-16 -131h-956z" />
-<glyph unicode="&#xb2;" horiz-adv-x="664" d="M482 1636q96 0 150.5 -50t54.5 -133q0 -44 -14 -80t-38 -68.5t-55.5 -62.5l-65.5 -61l-199 -181q50 14 92 14h202q18 0 27.5 -9t9.5 -24q0 -11 -1 -25.5t-3 -26.5l-4 -29h-509l5 42q2 12 8 26t19 25l250 220q31 27 58 55t47 56.5t31.5 57.5t11.5 59q0 45 -27 69t-69 24 t-74.5 -21.5t-55.5 -71.5q-14 -30 -47 -30q-4 0 -8 0.5t-9 1.5l-67 12q29 106 103.5 158.5t176.5 52.5z" />
-<glyph unicode="&#xb3;" horiz-adv-x="664" d="M502 1636q46 0 83.5 -13t64 -35.5t40.5 -53.5t14 -67q0 -140 -139 -185q57 -17 85 -51.5t28 -89.5q0 -60 -24 -106.5t-63 -78t-89 -48t-102 -16.5q-56 0 -96.5 12.5t-68 37t-44.5 60t-26 82.5l58 24q15 6 28 6q28 0 36 -23q4 -14 11 -30.5t20 -30.5t34.5 -23.5t54.5 -9.5 q34 0 60.5 11t45 29.5t28.5 42.5t10 50q0 49 -35 73.5t-121 24.5l11 89q91 2 132.5 32.5t41.5 92.5q0 44 -26.5 66.5t-70.5 22.5q-50 0 -80.5 -23t-50.5 -66q-14 -31 -43 -31q-4 0 -8 0.5t-9 1.5l-64 12q14 52 40.5 92t62.5 66t79.5 39.5t91.5 13.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="568" d="M676 1447l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1026" d="M348 1011l-83 -679q-2 -11 -2 -20.5v-19.5q0 -82 43 -126.5t124 -44.5q70 0 136 37t127 103l93 750h171l-124 -1011h-103q-18 0 -29.5 9t-11.5 27v108q-70 -72 -137.5 -105.5t-147.5 -33.5q-65 0 -112 23.5t-77 66.5v-16q0 -36 -2.5 -72t-6.5 -68l-35 -283h-85 q-32 0 -50.5 16t-18.5 45v6.5t1 6.5l158 1281h172z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1339" d="M1417 1433l-19 -153h-220l-181 -1481h-157l182 1481h-277l-182 -1481h-157l106 861q-93 0 -168 25t-127.5 70t-81 108t-28.5 140q0 90 36 168.5t101.5 136.5t157.5 91.5t205 33.5h810z" />
-<glyph unicode="&#xb7;" horiz-adv-x="547" d="M148 593q0 31 11.5 59t32 48t47.5 32t57 12q31 0 58.5 -12t47.5 -32t32 -48t12 -59q0 -30 -12 -57t-32 -47.5t-47.5 -32t-58.5 -11.5q-30 0 -57 11.5t-47.5 32t-32 47.5t-11.5 57z" />
-<glyph unicode="&#xb8;" horiz-adv-x="568" d="M69 -249q6 0 13 -4t17 -8.5t23 -8.5t33 -4q40 0 61.5 20t21.5 50q0 35 -35.5 49.5t-101.5 23.5l58 141h107l-32 -82q74 -17 107.5 -48.5t33.5 -77.5q0 -36 -16.5 -64.5t-46 -48t-70 -30t-88.5 -10.5q-38 0 -71 8.5t-60 23.5l23 53q8 17 23 17z" />
-<glyph unicode="&#xb9;" horiz-adv-x="664" d="M240 993h147l54 436l10 44l-121 -92q-12 -9 -26 -9q-11 0 -18.5 4.5t-11.5 10.5l-32 54l245 189h104l-78 -637h121l-11 -93h-395z" />
-<glyph unicode="&#xba;" horiz-adv-x="704" d="M470 1448q58 0 104.5 -18.5t79 -53t49.5 -83t17 -108.5q0 -82 -24 -148t-66.5 -112.5t-102.5 -71.5t-132 -25q-59 0 -106 18.5t-79.5 53t-50 83.5t-17.5 109q0 81 24 147t67.5 112.5t104 71.5t132.5 25zM408 931q90 0 134.5 68.5t44.5 185.5q0 75 -32.5 117.5t-95.5 42.5 q-50 0 -84.5 -19t-56 -52.5t-31.5 -80.5t-10 -103q0 -75 32 -117t99 -42z" />
-<glyph unicode="&#xbb;" horiz-adv-x="858" d="M184 129l-53 27q-23 12 -23 35q0 17 14 39l177 263q16 24 30 35q-13 12 -22 37l-112 263q-6 13 -6 25q0 32 33 48l59 27l182 -388l-2 -22zM460 129l-53 27q-23 12 -23 35q0 17 14 39l177 263q16 24 30 35q-13 12 -22 37l-112 263q-6 13 -6 25q0 32 33 48l59 27l182 -388 l-2 -22z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1475" d="M1277 276h110l-8 -73q-2 -11 -9 -18.5t-20 -7.5h-85l-21 -177h-106l22 177h-307q-17 0 -26.5 8t-10.5 20l-4 62l402 461h119zM441 53q-21 -32 -44.5 -42.5t-52.5 -10.5h-70l924 1371q20 29 44.5 44.5t57.5 15.5h71zM208 796h147l54 436l10 44l-121 -92q-14 -9 -26 -9 q-11 0 -18.5 4.5t-11.5 10.5l-32 54l245 189h104l-78 -637h121l-11 -93h-395zM1202 514q2 19 6 41t10 46l-278 -325h232z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1475" d="M403 53q-21 -32 -44.5 -42.5t-52.5 -10.5h-70l924 1371q20 29 44.5 44.5t57.5 15.5h71zM1167 736q96 0 150.5 -50t54.5 -133q0 -45 -15.5 -83t-41 -71.5t-59 -64.5l-69.5 -64l-187 -170q50 14 92 14h202q18 0 27.5 -9t9.5 -24v-5.5t-2 -19.5l-6 -56h-509l5 42q2 12 8 26 t19 25l250 220q31 27 58 55t47 56.5t31.5 57.5t11.5 59q0 45 -27 69t-69 24q-47 0 -77.5 -26t-52.5 -67q-9 -16 -20 -22.5t-28 -6.5q-4 0 -10.5 0.5t-29.5 4.5l-43 8q29 106 103.5 158.5t176.5 52.5zM213 796h147l54 436l10 44l-121 -92q-12 -9 -26 -9q-11 0 -18.5 4.5 t-11.5 10.5l-32 54l245 189h104l-78 -637h121l-11 -93h-395z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1475" d="M1292 276h110l-8 -73q-2 -11 -9 -18.5t-20 -7.5h-85l-21 -177h-106l22 177h-307q-17 0 -26.5 8t-10.5 20l-4 62l402 461h119zM461 53q-21 -32 -44.5 -42.5t-52.5 -10.5h-70l924 1371q20 29 44.5 44.5t57.5 15.5h71zM484 1439q46 0 83.5 -13t64 -35.5t40.5 -53.5t14 -67 q0 -140 -139 -185q57 -17 85 -51.5t28 -89.5q0 -60 -24 -106.5t-63 -78t-89 -48t-102 -16.5q-56 0 -96.5 12.5t-68 37t-44.5 60t-26 82.5l58 24q15 6 28 6q28 0 36 -23q14 -44 40 -69t80 -25q34 0 60.5 11t45 29.5t28.5 42.5t10 50q0 49 -35 73.5t-121 24.5l11 89 q91 2 132.5 32.5t41.5 92.5q0 44 -26.5 66.5t-70.5 22.5q-50 0 -82 -24t-47 -61q-8 -20 -20 -27t-26 -7q-4 0 -9.5 0.5t-21.5 3.5l-49 9q14 52 40.5 92t62.5 66t79.5 39.5t91.5 13.5zM1217 514q2 19 6 41t10 46l-278 -325h232z" />
-<glyph unicode="&#xbf;" horiz-adv-x="737" d="M629 -213q-33 -29 -71 -55t-81.5 -45.5t-92.5 -31.5t-105 -12q-68 0 -123.5 19.5t-96 55.5t-62.5 87.5t-22 116.5q0 81 23.5 138.5t60 99t80 71.5l82.5 56.5t68 53.5t38 63l36 155h117l-9 -168q-3 -45 -27.5 -78t-60.5 -62t-77.5 -57t-76.5 -61.5t-58.5 -76.5t-23.5 -102 q0 -41 13 -72.5t35.5 -53t52 -32.5t62.5 -11q55 0 96.5 15t71.5 33t49.5 33t31.5 15q22 0 33 -21zM335 903q0 26 9.5 49t26 40t39 27t49.5 10q26 0 49 -10t40 -27t26.5 -40t9.5 -49q0 -27 -9.5 -49.5t-26.5 -39.5t-40 -26.5t-49 -9.5q-27 0 -49.5 9.5t-39 26.5t-26 39.5 t-9.5 49.5z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM614 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144 q-20 0 -31 6.5t-26 18.5l-235 210h194z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM1125 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203 q10 9 18.5 15.5t17.5 10t20 5t27 1.5h194z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM1046 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97 q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM874 1660q30 0 50.5 21t25.5 58h94q-5 -42 -20 -77.5t-38 -62t-54 -41 t-68 -14.5q-32 0 -60 13.5t-53 29.5l-48 29.5t-44 13.5q-30 0 -49.5 -22.5t-24.5 -59.5h-97q5 42 20.5 78t38.5 62.5t54 41t68 14.5q33 0 61 -13t53 -29t47.5 -29t43.5 -13z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM671 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5 t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM1015 1665q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1237" d="M1180 0h-144q-25 0 -39 12.5t-19 32.5l-78 350h-584l-164 -350q-9 -18 -27.5 -31.5t-41.5 -13.5h-146l703 1433h189zM379 531h491l-132 593l-13 59t-12 71q-14 -38 -28.5 -71.5t-27.5 -59.5zM555 1659q0 39 15 72t41 56.5t60 36.5t72 13q39 0 73.5 -13t60.5 -36.5 t41.5 -56.5t15.5 -72q0 -38 -15.5 -70t-41.5 -55t-60.5 -36t-73.5 -13q-38 0 -72 13t-60 36t-41 55t-15 70zM644 1659q0 -43 27 -71.5t74 -28.5q45 0 72.5 28.5t27.5 71.5q0 45 -27.5 73t-72.5 28q-47 0 -74 -28t-27 -73z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1705" d="M772 1433h954l-18 -153h-692v-484h512l-19 -147h-493v-497h554l-20 -152h-710v395h-505l-205 -350q-11 -18 -30 -31.5t-43 -13.5h-145zM415 531h425v749q-14 -36 -29 -68t-32 -61z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1234" d="M507 -249q6 0 13 -4t17 -8.5t23 -8.5t33 -4q40 0 61.5 20t21.5 50q0 35 -35.5 49.5t-101.5 23.5l48 118q-114 11 -204.5 61t-153.5 131t-96 190t-33 237q0 187 58 342t159.5 266.5t238.5 173t295 61.5q76 0 138 -13t113 -38t92.5 -60t77.5 -78l-64 -78q-8 -10 -18 -16.5 t-25 -6.5q-18 0 -38 20t-54.5 43.5t-89 43.5t-141.5 20q-116 0 -217 -46.5t-175 -133t-116.5 -209.5t-42.5 -276q0 -111 29 -199t80.5 -149.5t122.5 -94.5t156 -33q66 0 117 11t90 27t66.5 35.5t48 35.5l34.5 27t25 11q9 0 15 -3.5t10 -8.5l65 -81q-87 -94 -198.5 -149.5 t-257.5 -63.5l-22 -58q74 -17 107.5 -48.5t33.5 -77.5q0 -36 -16.5 -64.5t-46 -48t-70 -30t-88.5 -10.5q-38 0 -71 8.5t-60 23.5l23 53q8 17 23 17z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1067" d="M1070 1280h-627l-60 -483h508l-19 -147h-507l-61 -498h629l-19 -152h-817l177 1433h815zM571 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144q-20 0 -31 6.5t-26 18.5l-235 210h194z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1067" d="M1070 1280h-627l-60 -483h508l-19 -147h-507l-61 -498h629l-19 -152h-817l177 1433h815zM1066 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5t17.5 10t20 5t27 1.5h194z" />
-<glyph unicode="&#xca;" horiz-adv-x="1067" d="M1070 1280h-627l-60 -483h508l-19 -147h-507l-61 -498h629l-19 -152h-817l177 1433h815zM1003 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1067" d="M1070 1280h-627l-60 -483h508l-19 -147h-507l-61 -498h629l-19 -152h-817l177 1433h815zM628 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33 t8.5 -39.5zM972 1665q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="566" d="M317 0h-188l175 1433h188zM280 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144q-20 0 -31 6.5t-26 18.5l-235 210h194z" />
-<glyph unicode="&#xcd;" horiz-adv-x="566" d="M317 0h-188l175 1433h188zM775 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5t17.5 10t20 5t27 1.5h194z" />
-<glyph unicode="&#xce;" horiz-adv-x="566" d="M317 0h-188l175 1433h188zM712 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph unicode="&#xcf;" horiz-adv-x="566" d="M317 0h-188l175 1433h188zM337 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM681 1665q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5 t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1452" d="M83 777h179l80 656h494q132 0 238 -45t180.5 -126.5t114 -195t39.5 -249.5q0 -183 -56 -333.5t-156 -258t-236.5 -166.5t-298.5 -59h-494l81 667h-179zM1216 813q0 108 -27.5 195t-78.5 147.5t-125 93t-167 32.5h-307l-62 -504h348l-13 -110h-348l-63 -516h306 q120 0 218.5 45.5t169.5 131t110 208t39 277.5z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1391" d="M370 1433q25 0 36.5 -6t23.5 -26l618 -1095q2 23 4 43.5l4 39.5l128 1044h165l-176 -1433h-94q-23 0 -38 7.5t-26 27.5l-617 1096q0 -5 -0.5 -14t-1.5 -19l-2 -20.5t-2 -17.5l-130 -1060h-165l177 1433h96v0zM949 1660q30 0 50.5 21t25.5 58h94q-5 -42 -20 -77.5t-38 -62 t-54 -41t-68 -14.5q-32 0 -60 13.5t-53 29.5l-48 29.5t-44 13.5q-30 0 -49.5 -22.5t-24.5 -59.5h-97q5 42 20.5 78t38.5 62.5t54 41t68 14.5q33 0 61 -13t53 -29t47.5 -29t43.5 -13z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5zM725 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144q-20 0 -31 6.5 t-26 18.5l-235 210h194z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5zM1220 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5 t17.5 10t20 5t27 1.5h194z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5zM1157 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97 q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5zM985 1660q30 0 50.5 21t25.5 58h94q-5 -42 -20 -77.5t-38 -62t-54 -41t-68 -14.5 q-32 0 -60 13.5t-53 29.5l-48 29.5t-44 13.5q-30 0 -49.5 -22.5t-24.5 -59.5h-97q5 42 20.5 78t38.5 62.5t54 41t68 14.5q33 0 61 -13t53 -29t47.5 -29t43.5 -13z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1465" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-132 0 -237.5 47t-180 130.5t-114 198.5t-39.5 252q0 183 57 336.5t157.5 264.5t238 173t298.5 62q132 0 237.5 -47.5t180 -131.5t114 -199.5t39.5 -252.5zM1230 814q0 109 -28 197.5 t-79.5 150.5t-126 96t-167.5 34q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5q0 -109 28 -197t79.5 -150t125.5 -95.5t167 -33.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5zM782 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5 t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM1126 1665q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#xd7;" d="M1081 1016l-388 -345l312 -355l-102 -93l-313 356l-402 -358l-80 93l401 357l-304 347l103 93l304 -348l388 346z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1464" d="M1422 818q0 -122 -26 -231t-73.5 -201.5t-115 -166.5t-151 -126t-181 -80t-204.5 -28q-97 0 -179 25t-149 72l-109 -137q-24 -30 -54.5 -42t-57.5 -12h-74l211 265q-77 84 -118 200.5t-41 256.5q0 183 57 336.5t157.5 264.5t238 173t298.5 62q104 0 191.5 -29.5 t156.5 -83.5l89 112q11 14 20 23.5t18.5 15t21 8t27.5 2.5h96l-192 -240q69 -84 106 -195.5t37 -243.5zM291 618q0 -97 21.5 -176.5t62.5 -139.5l713 895q-50 46 -115 70.5t-144 24.5q-118 0 -217 -47.5t-170 -135.5t-111 -212.5t-40 -278.5zM1230 814q0 88 -18 161.5 t-52 132.5l-708 -889q48 -38 107.5 -57.5t131.5 -19.5q120 0 219 47t170 134.5t110.5 212t39.5 278.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1343" d="M630 147q80 0 147.5 31t118 85.5t83 130.5t43.5 166l107 873h187l-106 -873q-15 -123 -64.5 -228.5t-127.5 -183t-181.5 -121.5t-226.5 -44q-111 0 -197 36t-145.5 100.5t-90.5 153.5t-31 195q0 45 6 92l106 873h187l-107 -872q-2 -20 -3.5 -39t-1.5 -37q0 -75 19.5 -137 t57 -107t93 -69.5t127.5 -24.5zM669 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144q-20 0 -31 6.5t-26 18.5l-235 210h194z" />
-<glyph unicode="&#xda;" horiz-adv-x="1343" d="M630 147q80 0 147.5 31t118 85.5t83 130.5t43.5 166l107 873h187l-106 -873q-15 -123 -64.5 -228.5t-127.5 -183t-181.5 -121.5t-226.5 -44q-111 0 -197 36t-145.5 100.5t-90.5 153.5t-31 195q0 45 6 92l106 873h187l-107 -872q-2 -20 -3.5 -39t-1.5 -37q0 -75 19.5 -137 t57 -107t93 -69.5t127.5 -24.5zM1164 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5t17.5 10t20 5t27 1.5h194z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1343" d="M630 147q80 0 147.5 31t118 85.5t83 130.5t43.5 166l107 873h187l-106 -873q-15 -123 -64.5 -228.5t-127.5 -183t-181.5 -121.5t-226.5 -44q-111 0 -197 36t-145.5 100.5t-90.5 153.5t-31 195q0 45 6 92l106 873h187l-107 -872q-2 -20 -3.5 -39t-1.5 -37q0 -75 19.5 -137 t57 -107t93 -69.5t127.5 -24.5zM1101 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1343" d="M630 147q80 0 147.5 31t118 85.5t83 130.5t43.5 166l107 873h187l-106 -873q-15 -123 -64.5 -228.5t-127.5 -183t-181.5 -121.5t-226.5 -44q-111 0 -197 36t-145.5 100.5t-90.5 153.5t-31 195q0 45 6 92l106 873h187l-107 -872q-2 -20 -3.5 -39t-1.5 -37q0 -75 19.5 -137 t57 -107t93 -69.5t127.5 -24.5zM726 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM1070 1665q0 -20 -8 -38t-22 -31.5t-32 -21 t-39 -7.5t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1165" d="M686 573l-71 -573h-187l71 571l-378 862h166q25 0 38 -12.5t21 -31.5l238 -574q10 -29 17 -55t12 -52q12 26 26.5 52l31.5 55l381 574q11 16 27.5 30t40.5 14h155zM1090 1780l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5t17.5 10t20 5t27 1.5 h194z" />
-<glyph unicode="&#xde;" horiz-adv-x="1128" d="M503 1165h209q114 0 197.5 -27t138.5 -76.5t82 -119t27 -154.5q0 -113 -37 -207.5t-108 -163t-174 -106.5t-236 -38h-209l-33 -273h-186l175 1433h187zM485 1018l-74 -597h209q85 0 150 26t109 72.5t67 111t23 140.5q0 116 -68 181.5t-208 65.5h-208z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1099" d="M729 1453q89 0 152 -27t103.5 -68.5t59.5 -92t19 -97.5q0 -68 -23.5 -116t-58.5 -84t-75.5 -63l-75.5 -52.5t-58.5 -53.5t-23.5 -66q0 -35 21.5 -58.5t53.5 -44t69.5 -42t69.5 -52t53.5 -74.5t21.5 -109q0 -86 -31 -154.5t-83.5 -116t-122.5 -73t-149 -25.5 q-89 0 -158 34.5t-118 88.5l48 66q9 12 20.5 19t28.5 7t34 -14.5t39.5 -31.5t54.5 -31.5t80 -14.5q42 0 77.5 15.5t61 42.5t40 63.5t14.5 78.5q0 48 -23 79.5t-57 54.5t-74.5 43t-74.5 46t-57 62t-23 92q0 62 24.5 106t61.5 78.5t80.5 63.5t80.5 61t61.5 72t24.5 96 q0 28 -10.5 57.5t-33 53.5t-59 39t-88.5 15q-62 0 -116.5 -33.5t-97 -91.5t-71.5 -134.5t-39 -161.5l-108 -872l-46 -207q-17 -75 -92 -75h-70l136 1111l-110 14q-40 5 -40 38l8 77h163q23 92 70 175.5t113 147.5t148 101.5t175 37.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM602 1447q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM976 1447l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM944 1169h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128 q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM779 1321q65 0 79 88h105q-6 -47 -22.5 -85.5t-41.5 -66t-58 -43t-70 -15.5q-32 0 -58.5 14.5t-49 32 l-43 32t-41.5 14.5q-32 0 -52 -22.5t-26 -66.5h-106q6 46 23 85t42.5 67t58 43.5t69.5 15.5q33 0 59 -14.5t48.5 -32l42.5 -32t41 -14.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM610 1311q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5 t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM969 1311q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5t35.5 24.5t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1012" d="M817 0h-92q-35 0 -47.5 18t-12.5 44l18 205q-36 -64 -77.5 -116t-88 -88.5t-97.5 -56.5t-106 -20q-60 0 -109 23.5t-83.5 69t-53.5 112t-19 152.5q0 90 22.5 175.5t64 161.5t99.5 139.5t129.5 110t153.5 72t172 25.5q65 0 126.5 -10.5t121.5 -36.5zM381 134q49 0 96 30.5 t89 84.5t78.5 128.5t64.5 163.5l43 348q-22 5 -43.5 6.5t-42.5 1.5q-60 0 -116 -19.5t-105 -54.5t-89 -83.5t-68.5 -106.5t-44.5 -123.5t-16 -134.5q0 -241 154 -241zM496 1315q0 42 16 76t43.5 59t63.5 38.5t76 13.5q41 0 77.5 -13.5t64.5 -38.5t44 -59t16 -76 q0 -41 -16 -75t-44 -58t-64.5 -37.5t-77.5 -13.5q-40 0 -76 13.5t-63.5 37.5t-43.5 58t-16 75zM596 1315q0 -44 27 -72t74 -28q45 0 72.5 28t27.5 72q0 45 -27.5 73t-72.5 28q-47 0 -74 -28t-27 -73z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1448" d="M1118 1027q60 0 111 -18.5t88.5 -51.5t58.5 -77.5t21 -95.5q0 -57 -27.5 -111t-96 -96.5t-185.5 -70t-295 -30.5q-1 -10 -1 -20v-20q0 -155 61 -232.5t169 -77.5q48 0 86 10t67.5 24.5t52 32l41.5 32t34.5 24.5t31.5 10q20 0 34 -17l44 -55q-51 -52 -99.5 -90 t-99.5 -62.5t-106.5 -36.5t-119.5 -12q-105 0 -184.5 57t-118.5 171q-32 -62 -76.5 -105.5t-94.5 -71.5t-103 -40.5t-102 -12.5q-133 0 -205 59.5t-72 179.5q0 71 32 135t104 113.5t189 80.5t288 36l6.5 51t3.5 33.5t1.5 22t0.5 15.5q0 179 -154 179q-60 0 -102.5 -16.5 t-74 -37l-55.5 -37t-46 -16.5q-18 0 -30 9t-18 23l-23 55q87 81 175.5 121t192.5 40q108 0 169 -48t83 -133q60 84 146.5 131t197.5 47zM632 479q-120 -5 -203 -23.5t-134.5 -48.5t-74 -70.5t-22.5 -90.5q0 -72 39 -106.5t104 -34.5q52 0 98.5 18.5t84 55.5t63.5 92.5 t35 129.5zM1096 900q-60 0 -109 -22.5t-85.5 -64.5t-61.5 -101t-37 -131q130 7 214.5 25t134 43.5t69.5 57.5t20 68q0 57 -37.5 91t-107.5 34z" />
-<glyph unicode="&#xe7;" horiz-adv-x="868" d="M281 -249q6 0 13 -4t17 -8.5t23 -8.5t33 -4q40 0 61.5 20t21.5 50q0 35 -35.5 49.5t-101.5 23.5l50 121q-74 10 -130.5 43.5t-94.5 87t-57.5 124.5t-19.5 155q0 123 38.5 236t107.5 200t164 139t209 52q100 0 168 -35.5t119 -103.5l-56 -67q-6 -8 -15 -13t-20 -5 q-14 0 -27.5 12.5t-35 28t-54 28t-83.5 12.5q-69 0 -130.5 -37.5t-107.5 -102.5t-72.5 -154t-26.5 -191q0 -62 14 -112.5t42 -86t68.5 -55t94.5 -19.5q45 0 80 9.5t62 23.5t47.5 30.5l37 30.5t30 23.5t27.5 9.5q20 0 34 -17l44 -54q-47 -51 -89 -87t-84 -58.5t-85.5 -34 t-92.5 -14.5l-23 -60q74 -17 107.5 -48.5t33.5 -77.5q0 -36 -16.5 -64.5t-46 -48t-70 -30t-88.5 -10.5q-38 0 -71 8.5t-60 23.5l23 53q8 17 23 17z" />
-<glyph unicode="&#xe8;" horiz-adv-x="924" d="M882 796q0 -66 -27 -121.5t-99 -100t-198 -77.5t-324 -53q-1 -11 -1 -21.5v-21.5q0 -134 58.5 -204.5t176.5 -70.5q48 0 85.5 10t67 24.5t52 32l41.5 32t35 24.5t32 10q18 0 33 -17l44 -55q-51 -53 -99.5 -90.5t-99.5 -62.5t-106.5 -36.5t-119.5 -11.5q-87 0 -156 29 t-117 82.5t-74 129.5t-26 170q0 78 16.5 155.5t48 147.5t77 130t104 103.5t129 68.5t151.5 25q77 0 133 -22t92 -56t53.5 -75t17.5 -78zM576 899q-63 0 -116 -26t-94 -71.5t-70 -107t-45 -132.5q154 19 247 43.5t143 53t66 61.5t16 69q0 18 -8 37.5t-25.5 35.5t-45.5 26.5 t-68 10.5zM493 1447q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="&#xe9;" horiz-adv-x="924" d="M882 796q0 -66 -27 -121.5t-99 -100t-198 -77.5t-324 -53q-1 -11 -1 -21.5v-21.5q0 -134 58.5 -204.5t176.5 -70.5q48 0 85.5 10t67 24.5t52 32l41.5 32t35 24.5t32 10q18 0 33 -17l44 -55q-51 -53 -99.5 -90.5t-99.5 -62.5t-106.5 -36.5t-119.5 -11.5q-87 0 -156 29 t-117 82.5t-74 129.5t-26 170q0 78 16.5 155.5t48 147.5t77 130t104 103.5t129 68.5t151.5 25q77 0 133 -22t92 -56t53.5 -75t17.5 -78zM576 899q-63 0 -116 -26t-94 -71.5t-70 -107t-45 -132.5q154 19 247 43.5t143 53t66 61.5t16 69q0 18 -8 37.5t-25.5 35.5t-45.5 26.5 t-68 10.5zM898 1447l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xea;" horiz-adv-x="924" d="M882 796q0 -66 -27 -121.5t-99 -100t-198 -77.5t-324 -53q-1 -11 -1 -21.5v-21.5q0 -134 58.5 -204.5t176.5 -70.5q48 0 85.5 10t67 24.5t52 32l41.5 32t35 24.5t32 10q18 0 33 -17l44 -55q-51 -53 -99.5 -90.5t-99.5 -62.5t-106.5 -36.5t-119.5 -11.5q-87 0 -156 29 t-117 82.5t-74 129.5t-26 170q0 78 16.5 155.5t48 147.5t77 130t104 103.5t129 68.5t151.5 25q77 0 133 -22t92 -56t53.5 -75t17.5 -78zM576 899q-63 0 -116 -26t-94 -71.5t-70 -107t-45 -132.5q154 19 247 43.5t143 53t66 61.5t16 69q0 18 -8 37.5t-25.5 35.5t-45.5 26.5 t-68 10.5zM875 1169h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#xeb;" horiz-adv-x="924" d="M882 796q0 -66 -27 -121.5t-99 -100t-198 -77.5t-324 -53q-1 -11 -1 -21.5v-21.5q0 -134 58.5 -204.5t176.5 -70.5q48 0 85.5 10t67 24.5t52 32l41.5 32t35 24.5t32 10q18 0 33 -17l44 -55q-51 -53 -99.5 -90.5t-99.5 -62.5t-106.5 -36.5t-119.5 -11.5q-87 0 -156 29 t-117 82.5t-74 129.5t-26 170q0 78 16.5 155.5t48 147.5t77 130t104 103.5t129 68.5t151.5 25q77 0 133 -22t92 -56t53.5 -75t17.5 -78zM576 899q-63 0 -116 -26t-94 -71.5t-70 -107t-45 -132.5q154 19 247 43.5t143 53t66 61.5t16 69q0 18 -8 37.5t-25.5 35.5t-45.5 26.5 t-68 10.5zM541 1311q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM900 1311q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5t35.5 24.5 t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xec;" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175zM225 1447q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="&#xed;" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175zM630 1447l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xee;" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175zM607 1169h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#xef;" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175zM273 1311q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM632 1311q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35 t-9 43t9 44t24 36.5t35.5 24.5t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1022" d="M458 1065q-3 5 -4 9.5t-1 9.5q0 19 15 28l129 94q-41 24 -89 42.5t-103 35.5q-37 11 -37 41q0 13 8 32l25 55q88 -16 169.5 -48t151.5 -83l174 124l29 -57q6 -9 6 -21q0 -16 -19 -30l-113 -83q81 -84 128 -204.5t47 -285.5t-35 -300.5t-103 -232.5t-168 -150.5 t-230 -53.5q-82 0 -151 28.5t-119.5 82t-78.5 129t-28 170.5q0 108 34.5 204.5t97 168.5t149.5 114.5t192 42.5q97 0 175 -45.5t126 -137.5q-2 136 -40 234.5t-114 167.5l-190 -138zM458 121q65 0 120.5 25.5t99.5 79.5t75 138.5t47 202.5q-9 44 -28 84.5t-49 72t-72.5 50.5 t-99.5 19q-75 0 -134.5 -30t-100.5 -82.5t-62.5 -123t-21.5 -151.5q0 -67 17 -120t47.5 -89.5t72 -56t89.5 -19.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1054" d="M72 0l121 1014h89q60 0 60 -60l-15 -196q81 134 182.5 202t210.5 68q113 0 175.5 -76t62.5 -222q0 -20 -1 -41t-4 -44l-76 -645h-178l76 645q2 20 3.5 38.5t1.5 35.5q0 82 -30.5 121.5t-95.5 39.5q-48 0 -97.5 -26t-95.5 -73.5t-85.5 -115t-67.5 -150.5l-58 -515h-178z M746 1323q65 0 79 88h105q-6 -47 -22.5 -85.5t-41.5 -66t-58 -43t-70 -15.5q-32 0 -58.5 14.5t-49 32l-43 32t-41.5 14.5q-32 0 -52 -22.5t-26 -66.5h-106q6 46 23 85t42.5 67t58 43.5t69.5 15.5q33 0 59 -14.5t48.5 -32l42.5 -32t41 -14.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5zM486 1449q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5zM890 1449l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5zM867 1171h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5zM702 1323q65 0 79 88h105q-6 -47 -22.5 -85.5t-41.5 -66t-58 -43t-70 -15.5q-32 0 -58.5 14.5t-49 32l-43 32t-41.5 14.5q-32 0 -52 -22.5t-26 -66.5h-106q6 46 23 85 t42.5 67t58 43.5t69.5 15.5q33 0 59 -14.5t48.5 -32l42.5 -32t41 -14.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1007" d="M449 125q73 0 133 40t102 106.5t65 153.5t23 182q0 140 -55 211t-159 71q-74 0 -133.5 -39.5t-101.5 -106t-65 -153.5t-23 -182q0 -140 54.5 -211.5t159.5 -71.5zM433 -14q-83 0 -152 28.5t-119 82.5t-78 132t-28 178q0 128 40 241t109.5 198t164 134t204.5 49 q83 0 152 -28.5t119 -82.5t78 -132.5t28 -177.5q0 -127 -40 -240t-109.5 -198t-164.5 -134.5t-204 -49.5zM533 1313q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM892 1313 q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5t35.5 24.5t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xf7;" d="M131 736h958l-16 -130h-958zM522 1012q0 28 11 53t30 44t44 30t53 11q24 0 43.5 -9t34 -24t22.5 -35t8 -43q0 -29 -11.5 -53.5t-30.5 -42.5t-44 -28.5t-52 -10.5q-49 0 -78.5 31t-29.5 77zM434 300q0 28 11 53t30 44t44 30t53 11q24 0 43.5 -9t34 -24t22.5 -35t8 -43 q0 -29 -11.5 -53.5t-30.5 -42.5t-44 -28.5t-52 -10.5q-48 0 -78 31t-30 77z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1007" d="M433 -14q-124 0 -214 61l-36 -49q-22 -30 -51 -42.5t-58 -12.5h-67l132 181q-40 53 -61.5 124t-21.5 159q0 128 40 241t109.5 198t164 134t204.5 49q125 0 216 -64l34 46q19 28 35 39t48 11h90l-128 -173q39 -53 60.5 -123t21.5 -157q0 -127 -40 -240t-109.5 -198 t-164.5 -134.5t-204 -49.5zM224 408q0 -89 26 -155l442 602q-56 45 -134 45q-74 0 -135 -38t-105.5 -104.5t-69 -156.5t-24.5 -193zM449 114q73 0 134.5 38.5t106 105t69 156.5t24.5 193q0 44 -6.5 81.5t-18.5 69.5l-442 -600q55 -44 133 -44z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1052" d="M355 1013l-76 -644q-2 -20 -3.5 -38t-1.5 -35q0 -82 30.5 -122t96.5 -40q46 0 94.5 25t94 71t84.5 111t68 145l63 527h177l-122 -1013h-88q-31 0 -48 14t-17 43q0 1 1 18t2.5 37t3 37t1.5 18l7 81q-81 -129 -181 -195.5t-206 -66.5q-113 0 -175.5 77t-62.5 221q0 20 1 41 t4 44l76 644h177zM493 1449q31 0 45 -10t24 -32l107 -242h-99q-20 0 -32 6t-23 21l-185 257h163z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1052" d="M355 1013l-76 -644q-2 -20 -3.5 -38t-1.5 -35q0 -82 30.5 -122t96.5 -40q46 0 94.5 25t94 71t84.5 111t68 145l63 527h177l-122 -1013h-88q-31 0 -48 14t-17 43q0 1 1 18t2.5 37t3 37t1.5 18l7 81q-81 -129 -181 -195.5t-206 -66.5q-113 0 -175.5 77t-62.5 221q0 20 1 41 t4 44l76 644h177zM898 1449l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1052" d="M355 1013l-76 -644q-2 -20 -3.5 -38t-1.5 -35q0 -82 30.5 -122t96.5 -40q46 0 94.5 25t94 71t84.5 111t68 145l63 527h177l-122 -1013h-88q-31 0 -48 14t-17 43q0 1 1 18t2.5 37t3 37t1.5 18l7 81q-81 -129 -181 -195.5t-206 -66.5q-113 0 -175.5 77t-62.5 221q0 20 1 41 t4 44l76 644h177zM875 1171h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1052" d="M355 1013l-76 -644q-2 -20 -3.5 -38t-1.5 -35q0 -82 30.5 -122t96.5 -40q46 0 94.5 25t94 71t84.5 111t68 145l63 527h177l-122 -1013h-88q-31 0 -48 14t-17 43q0 1 1 18t2.5 37t3 37t1.5 18l7 81q-81 -129 -181 -195.5t-206 -66.5q-113 0 -175.5 77t-62.5 221q0 20 1 41 t4 44l76 644h177zM541 1313q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM900 1313q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5 t35.5 24.5t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#xfd;" horiz-adv-x="954" d="M317 -302q-21 -41 -62 -41h-130l219 403l-262 953h147q21 0 31.5 -10.5t14.5 -26.5l163 -638q5 -21 8 -42t5 -42l17.5 42.5t19.5 42.5l320 639q8 16 22.5 25.5t29.5 9.5h141zM864 1449l-248 -257q-14 -15 -28.5 -21t-34.5 -6h-102l166 242q14 22 31 32t48 10h168z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1047" d="M38 -343l221 1816h176l-89 -716q38 61 82 111.5t92 85.5t100 54.5t106 19.5q129 0 201 -94t72 -275q0 -82 -17 -164t-48.5 -156.5t-76 -139t-99 -112t-118.5 -74.5t-134 -27q-75 0 -136.5 29.5t-104.5 83.5l-46 -378q-3 -26 -22.5 -45t-49.5 -19h-109zM659 885 q-48 0 -97 -30t-95 -83t-85.5 -126t-68.5 -160l-33 -264q38 -54 91.5 -76t108.5 -22q52 0 98 22t84 59.5t68 88t50.5 108t31.5 119t11 121.5q0 119 -43 181t-121 62z" />
-<glyph unicode="&#xff;" horiz-adv-x="954" d="M317 -302q-21 -41 -62 -41h-130l219 403l-262 953h147q21 0 31.5 -10.5t14.5 -26.5l163 -638q5 -21 8 -42t5 -42l17.5 42.5t19.5 42.5l320 639q8 16 22.5 25.5t29.5 9.5h141zM507 1313q0 -23 -9 -43t-25 -35t-36.5 -24t-43.5 -9t-43 9t-35 24t-24 35t-9 43t9 44t24 36.5 t35 24.5t43 9t43.5 -9t36.5 -24.5t25 -36.5t9 -44zM866 1313q0 -23 -9 -43t-24.5 -35t-36 -24t-43.5 -9t-43.5 9t-35.5 24t-24 35t-9 43t9 44t24 36.5t35.5 24.5t43.5 9t43.5 -9t36 -24.5t24.5 -36.5t9 -44z" />
-<glyph unicode="&#x131;" horiz-adv-x="489" d="M393 1013l-122 -1013h-175l122 1013h175z" />
-<glyph unicode="&#x141;" horiz-adv-x="1001" d="M437 806l365 191l-15 -125q-4 -28 -30 -42l-339 -181l-61 -491h567l-19 -158h-754l69 557l-192 -96l16 128q3 26 28 39l167 87l89 718h187z" />
-<glyph unicode="&#x142;" horiz-adv-x="603" d="M77 726q0 29 25 40l153 68l78 639h175l-70 -571l173 74v-102q0 -33 -27 -44l-163 -73l-92 -757h-175l84 690l-161 -69v105z" />
-<glyph unicode="&#x152;" horiz-adv-x="2011" d="M2033 1433l-18 -153h-626l-59 -484h503l-17 -147h-504l-61 -497h625l-19 -152h-792l28 226q-90 -114 -213.5 -177t-273.5 -63q-117 0 -211 46t-159.5 127.5t-100.5 195t-35 248.5q0 185 52 340t144 267.5t217.5 175.5t271.5 63q75 0 139.5 -19t118 -54.5t95 -86 t71.5 -113.5l32 257h792zM1137 824q0 106 -23.5 193.5t-68.5 149.5t-110 96t-148 34q-109 0 -200 -49.5t-157 -140t-102.5 -217.5t-36.5 -282q0 -107 24 -193.5t69.5 -148.5t111 -95.5t148.5 -33.5q109 0 199.5 49t156 139t101.5 216.5t36 282.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1546" d="M1229 1027q65 0 117 -17t89 -48.5t56.5 -75.5t19.5 -97q0 -41 -11.5 -79t-39.5 -71.5t-74 -63t-116 -53.5t-165 -43t-221 -32v-11q0 -155 60.5 -232.5t169.5 -77.5q48 0 85.5 10t67 24.5t52 32l41.5 32t34.5 24.5t31.5 10q19 0 34 -17l44 -55q-50 -52 -98.5 -90 t-99.5 -62.5t-107 -36.5t-120 -12q-105 0 -184.5 58t-118.5 173q-69 -110 -172 -170.5t-232 -60.5q-81 0 -142 29.5t-101.5 80t-61 116.5t-20.5 138q0 164 42.5 290.5t115 212.5t168 130t202.5 44t178.5 -50.5t106.5 -141.5q63 90 156 141t213 51zM414 121q81 0 143.5 39 t105 109t64 165t21.5 208q0 115 -46.5 182.5t-143.5 67.5q-78 0 -140 -38t-106 -107.5t-67.5 -167.5t-23.5 -219q0 -47 10 -90t33 -76t60 -53t90 -20zM1201 901q-59 0 -110 -23t-91 -67.5t-68 -108t-40 -144.5q145 18 236.5 43.5t143.5 54.5t71 61.5t19 65.5q0 24 -9.5 45 t-29 37.5t-50 26t-72.5 9.5z" />
-<glyph unicode="&#x160;" horiz-adv-x="977" d="M926 1211q-11 -14 -21 -21.5t-24 -7.5q-17 0 -36 17.5t-48.5 38t-71.5 38t-105 17.5q-64 0 -114 -20t-84.5 -54.5t-52.5 -80.5t-18 -99q0 -52 24 -87.5t63 -61t89.5 -45l102.5 -40t102.5 -45.5t89.5 -62t63 -89t24 -126q0 -102 -35 -192.5t-100.5 -158.5t-158.5 -108 t-209 -40q-128 0 -228.5 50.5t-165.5 136.5l66 89q8 11 20 18t26 7q19 0 41 -22.5t56 -50t84 -50t125 -22.5q69 0 124.5 22t94 61t59.5 93.5t21 120.5q0 55 -24 91.5t-63 61.5t-88.5 43.5l-102 37.5t-102 43t-88.5 61t-63 91t-24 133q0 88 32 169t92 143t146 99t194 37 q110 0 198 -42t145 -115zM745 1546h-170l-195 209h160l121 -110l10 -9l12 9l148 110h160z" />
-<glyph unicode="&#x161;" horiz-adv-x="780" d="M724 851q-8 -12 -16 -17.5t-20 -5.5q-14 0 -30.5 11t-40 24.5t-57.5 25t-82 11.5q-45 0 -82 -12.5t-64 -34.5t-41.5 -51.5t-14.5 -62.5q0 -47 31 -75t78 -48.5t101.5 -39.5t101.5 -48t78 -74t31 -117q0 -70 -27.5 -134t-79 -112.5t-124 -77.5t-162.5 -29 q-97 0 -171.5 34.5t-121.5 88.5l44 68q8 13 19 20t28 7q16 0 32 -14t40 -31.5t60.5 -31.5t92.5 -14q49 0 88.5 15t67 40t42 58.5t14.5 71.5q0 51 -31 81t-78 50t-101 37.5t-101 45t-78 71.5t-31 117q0 64 25.5 123.5t73.5 105.5t116.5 73.5t154.5 27.5q91 0 160.5 -30.5 t119.5 -82.5zM240 1433h120q11 0 20.5 -4t14.5 -10l100 -129l13 -19l19 19l131 129q7 6 18 10t22 4h115l-239 -262h-159z" />
-<glyph unicode="&#x178;" horiz-adv-x="1165" d="M686 573l-71 -573h-187l71 571l-378 862h166q25 0 38 -12.5t21 -31.5l238 -574q10 -29 17 -55t12 -52q12 26 26.5 52l31.5 55l381 574q11 16 27.5 30t40.5 14h155zM652 1664q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5t-31.5 21t-22 31.5t-8 38 q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM996 1664q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5t-39 7.5t-32 21t-22 31.5t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph unicode="&#x17d;" horiz-adv-x="1148" d="M1195 1433l-8 -60q-2 -14 -8 -25.5t-15 -23.5l-876 -1172h738l-20 -152h-990l8 59q2 14 7.5 25t14.5 23l876 1173h-713l19 153h967zM808 1546h-170l-195 209h160l121 -110l10 -9l12 9l148 110h160z" />
-<glyph unicode="&#x17e;" horiz-adv-x="860" d="M849 937q-2 -19 -11 -36.5t-20 -31.5l-584 -730h500l-16 -139h-714l9 74q2 13 10.5 30.5t20.5 33.5l587 735h-492l17 140h702zM263 1433h120q11 0 20.5 -4t14.5 -10l100 -129l13 -19l19 19l131 129q7 6 18 10t22 4h115l-239 -262h-159z" />
-<glyph unicode="&#x192;" d="M705 770l-179 -735q-50 -203 -180.5 -295.5t-340.5 -92.5l11 91q7 55 65 55q46 1 88.5 14t78.5 42t64 76t45 116l177 724l-155 15q-18 2 -27 12t-9 25q0 9 1.5 22t3.5 26q2 14 4 30h214l42 170q48 197 176 292.5t345 95.5l-12 -95q-3 -28 -18.5 -39.5t-45.5 -11.5 q-47 0 -89.5 -13t-79 -42.5t-65 -76.5t-46.5 -116l-43 -164h327l-16 -125h-336z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="568" d="M653 1169h-114q-11 0 -21 4t-15 10l-100 128l-6.5 6.5t-6.5 8.5q-5 -5 -9 -8.5t-8 -6.5l-133 -128q-6 -5 -17 -9.5t-23 -4.5h-119l239 262h160z" />
-<glyph unicode="&#x2c7;" horiz-adv-x="568" d="M113 1431h120q11 0 20.5 -4t14.5 -10l100 -129l13 -19l19 19l131 129q7 6 18 10t22 4h115l-239 -262h-159z" />
-<glyph unicode="&#x2c9;" horiz-adv-x="568" d="M126 1345h530l-14 -113h-530z" />
-<glyph unicode="&#x2d8;" horiz-adv-x="568" d="M370 1164q-62 0 -105 16.5t-70 45.5t-39 67.5t-12 83.5q0 13 1 26.5t3 27.5h121q-3 -21 -3 -40q0 -51 26 -82.5t92 -31.5q39 0 66 11.5t44.5 32t27.5 49t14 61.5h122q-7 -54 -26 -102.5t-53.5 -85t-86 -58t-122.5 -21.5z" />
-<glyph unicode="&#x2d9;" horiz-adv-x="568" d="M528 1338q0 -26 -10.5 -48.5t-28 -39.5t-40.5 -27t-49 -10t-48.5 10t-39.5 27t-27 39.5t-10 48.5t10 49.5t27 41t39.5 27.5t48.5 10t49 -10t40.5 -27.5t28 -41t10.5 -49.5z" />
-<glyph unicode="&#x2da;" horiz-adv-x="568" d="M185 1315q0 42 16 76t43.5 59t63.5 38.5t76 13.5q41 0 77.5 -13.5t64.5 -38.5t44 -59t16 -76q0 -41 -16 -75t-44 -58t-64.5 -37.5t-77.5 -13.5q-40 0 -76 13.5t-63.5 37.5t-43.5 58t-16 75zM285 1315q0 -44 27 -72t74 -28q45 0 72.5 28t27.5 72q0 45 -27.5 73t-72.5 28 q-47 0 -74 -28t-27 -73z" />
-<glyph unicode="&#x2db;" horiz-adv-x="568" d="M338 -214q13 0 16 -12l18 -64q-30 -23 -74.5 -37.5t-92.5 -14.5q-76 0 -117 35t-41 93q0 34 13.5 66t36.5 61t55 54t69 46l87 -13q-21 -12 -43.5 -28.5t-41.5 -37.5t-31 -46.5t-12 -54.5q0 -32 20 -51.5t52 -19.5q21 0 35.5 3.5t24.5 8t15.5 8.5t10.5 4z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="568" d="M488 1321q65 0 79 88h105q-6 -47 -22.5 -85.5t-41.5 -66t-58 -43t-70 -15.5q-32 0 -58.5 14.5t-49 32l-43 32t-41.5 14.5q-32 0 -52 -22.5t-26 -66.5h-106q6 46 23 85t42.5 67t58 43.5t69.5 15.5q33 0 59 -14.5t48.5 -32l42.5 -32t41 -14.5z" />
-<glyph unicode="&#x2dd;" horiz-adv-x="568" d="M516 1447l-214 -257q-14 -16 -28.5 -21.5t-34.5 -5.5h-72l156 242q14 22 31 32t48 10h114zM809 1447l-256 -257q-14 -15 -28 -21t-34 -6h-83l195 242q17 20 33 31t47 11h126z" />
-<glyph unicode="&#x3c0;" horiz-adv-x="1144" d="M1174 1011l-8 -68q-2 -23 -19 -40.5t-43 -17.5h-124l-108 -885h-172l107 885h-357l-79 -643q-15 -119 -79 -186.5t-186 -67.5q-31 0 -61.5 6t-57.5 23l15 72q2 9 5.5 14.5t11.5 7.5t20.5 2.5t32.5 0.5q60 0 89.5 31.5t37.5 98.5l78 641h-172l8 63q1 10 6.5 21t15 20.5 t23 15.5t29.5 6h987z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1026" d="M165 652h737l-15 -125h-737z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1516" d="M165 652h1226l-16 -125h-1225z" />
-<glyph unicode="&#x2018;" horiz-adv-x="394" d="M219 1016q-17 37 -24.5 74t-7.5 74q0 100 53 193t147 169l47 -31q12 -9 12 -22q0 -8 -4.5 -15t-15.5 -19q-16 -19 -32.5 -43t-29.5 -52.5t-21.5 -60.5t-8.5 -66q0 -26 5 -53t18 -55q3 -8 3 -14q0 -24 -30 -37z" />
-<glyph unicode="&#x2019;" horiz-adv-x="394" d="M368 1503q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37z" />
-<glyph unicode="&#x201a;" horiz-adv-x="427" d="M228 236q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37z" />
-<glyph unicode="&#x201c;" horiz-adv-x="676" d="M219 1016q-17 37 -24.5 74t-7.5 74q0 100 53 193t147 169l47 -31q12 -9 12 -22q0 -8 -4.5 -15t-15.5 -19q-16 -19 -32.5 -43t-29.5 -52.5t-21.5 -60.5t-8.5 -66q0 -26 5 -53t18 -55q3 -8 3 -14q0 -24 -30 -37zM503 1016q-17 37 -24.5 74t-7.5 74q0 100 53 193t147 169 l47 -31q12 -9 12 -22q0 -8 -4.5 -15t-15.5 -19q-16 -19 -32.5 -43t-29.5 -52.5t-21.5 -60.5t-8.5 -66q0 -26 5 -53t18 -55q3 -8 3 -14q0 -24 -30 -37z" />
-<glyph unicode="&#x201d;" horiz-adv-x="676" d="M377 1503q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37zM660 1503q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31 q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37z" />
-<glyph unicode="&#x201e;" horiz-adv-x="676" d="M191 236q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37zM475 236q17 -37 24.5 -74t7.5 -74q0 -100 -53 -193t-147 -169l-48 31 q-11 9 -11 22q0 8 4.5 15t15.5 19q16 19 32.5 43t29.5 52t21.5 60t8.5 67q0 26 -5 53t-18 55q-3 7 -3 14q0 24 30 37z" />
-<glyph unicode="&#x2020;" horiz-adv-x="1068" d="M161 940q4 29 26 52.5t64 23.5q63 -1 134.5 -14t142.5 -20l35 468q41 22 92 22t86 -22l-80 -468q36 3 73.5 9t74 11l71.5 9.5t67 4.5q38 0 54.5 -20.5t16.5 -46.5v-3t-0.5 -8.5t-2 -19.5t-3.5 -36h-363l-54 -444l-72 -774q-20 -11 -44 -16.5t-49 -5.5q-26 0 -47.5 5.5 t-38.5 16.5l117 774l54 444h-362z" />
-<glyph unicode="&#x2021;" horiz-adv-x="1068" d="M161 940q4 29 26 52.5t64 23.5q63 -1 134.5 -14t142.5 -20l35 468q41 22 92 22t86 -22l-80 -468q36 3 73.5 9t74 11l71.5 9.5t67 4.5q38 0 55 -19.5t17 -45.5q0 -15 -2.5 -35t-4.5 -34h-363l-80 -650h362l-6 -58q-3 -30 -26 -53.5t-65 -23.5q-63 1 -135 13.5t-143 18.5 l-33 -465q-20 -11 -44 -16.5t-49 -5.5q-26 0 -47.5 5.5t-38.5 16.5l79 465q-36 -3 -73.5 -8t-74 -10.5t-72 -9.5t-66.5 -4q-38 0 -54.5 20t-16.5 47v3t1 9t2 20t4 36h363l80 650h-363z" />
-<glyph unicode="&#x2022;" d="M231 595q0 77 29 145t79.5 118.5t117.5 80t143 29.5q77 0 145 -29.5t118.5 -80t80 -118.5t29.5 -145t-29.5 -144.5t-80 -117.5t-118.5 -79.5t-145 -29.5q-76 0 -143 29.5t-117.5 79.5t-79.5 117.5t-29 144.5z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1454" d="M45 110q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5zM559 110q0 26 9.5 49t26.5 40t39.5 27t49.5 10q26 0 48.5 -10t39.5 -27 t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-39.5 -26.5t-48.5 -9.5q-27 0 -49.5 9.5t-39.5 26.5t-26.5 39.5t-9.5 49.5zM1074 110q0 26 9.5 49t26 40t39.5 27t49 10t49 -10t40 -27t27 -40t10 -49q0 -27 -10 -49.5t-27 -39.5t-40 -26.5t-49 -9.5t-49 9.5t-39.5 26.5t-26 39.5 t-9.5 49.5z" />
-<glyph unicode="&#x2030;" horiz-adv-x="2127" d="M732 1144q0 -99 -29.5 -176t-77.5 -130t-109.5 -80.5t-126.5 -27.5q-56 0 -103 20.5t-80.5 59t-52 94t-18.5 125.5q0 99 27 176.5t73.5 131t109 81.5t132.5 28q56 0 103 -20.5t80.5 -59.5t52.5 -95t19 -127zM597 1143q0 50 -10.5 86t-28.5 59t-42.5 34t-52.5 11 q-40 0 -75.5 -17t-61.5 -54t-41.5 -94.5t-15.5 -138.5q0 -49 10 -83.5t28 -57t42.5 -33t53.5 -10.5q39 0 74.5 16.5t62 52t42 92t15.5 137.5zM1228 1403q11 11 25.5 19.5t37.5 8.5h124l-1140 -1403q-10 -13 -24.5 -20.5t-34.5 -7.5h-126zM1372 397q0 -99 -29 -176.5 t-77 -130t-110 -80t-127 -27.5q-56 0 -102.5 20.5t-80 59t-52 93.5t-18.5 125q0 99 27 176.5t73.5 131.5t109 82t132.5 28q56 0 102.5 -20.5t80.5 -59.5t52.5 -95t18.5 -127zM1238 396q0 50 -10.5 85.5t-28.5 58.5t-42.5 33.5t-52.5 10.5q-40 0 -75.5 -17t-62 -54t-42 -94 t-15.5 -138q0 -49 10 -84t28 -57.5t42.5 -33t53.5 -10.5q39 0 74.5 16.5t62.5 52.5t42.5 93t15.5 138zM2047 397q0 -99 -29 -176.5t-77 -130t-109.5 -80t-126.5 -27.5q-56 0 -103 20.5t-80.5 59t-52 93.5t-18.5 125q0 99 27 176.5t73.5 131.5t109 82t132.5 28 q56 0 102.5 -20.5t80.5 -59.5t52.5 -95t18.5 -127zM1913 396q0 50 -10.5 85.5t-28.5 58.5t-42.5 33.5t-52.5 10.5q-40 0 -75 -17t-61.5 -54t-41.5 -94t-15 -138q0 -49 10 -84t27.5 -57.5t42 -33t53.5 -10.5q39 0 74 16.5t62 52.5t42.5 93t15.5 138z" />
-<glyph unicode="&#x2039;" horiz-adv-x="598" d="M128 518l3 22l278 388l53 -27q22 -12 22 -33q0 -19 -15 -40l-175 -263q-17 -26 -31 -36q11 -11 22 -36l111 -263q3 -8 5 -14.5t2 -13.5q0 -31 -32 -46l-60 -27z" />
-<glyph unicode="&#x203a;" horiz-adv-x="583" d="M184 129l-53 27q-23 12 -23 35q0 17 14 39l177 263q16 24 30 35q-13 12 -22 37l-112 263q-6 13 -6 25q0 32 33 48l59 27l182 -388l-2 -22z" />
-<glyph unicode="&#x2044;" horiz-adv-x="577" d="M-63 53q-21 -32 -44.5 -42.5t-52.5 -10.5h-70l924 1371q20 29 44.5 44.5t57.5 15.5h71z" />
-<glyph unicode="&#x20ac;" d="M84 897h141q33 127 92.5 229t140 173t179 109t210.5 38q133 0 222 -49.5t148 -136.5l-67 -66q-12 -12 -19 -16t-21 -4q-11 0 -21 9t-23.5 22.5t-32.5 29.5t-46 29.5t-64 22.5t-88 9q-77 0 -145 -26t-123.5 -77t-97.5 -125.5t-68 -170.5h560l-6 -55q-3 -17 -17.5 -30.5 t-39.5 -13.5h-518q-6 -35 -9.5 -71t-5.5 -74h474l-7 -54q-2 -17 -17.5 -31t-38.5 -14h-412q7 -204 90.5 -311.5t228.5 -107.5q82 0 137.5 22.5t92 49.5t59.5 49.5t41 22.5q8 0 13.5 -2t11.5 -10l65 -68q-83 -101 -194 -157.5t-253 -56.5q-113 0 -199.5 41t-145.5 115.5 t-90 179.5t-34 233h-145l12 99h135q3 74 15 145h-132z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1327" d="M962 1104q8 -27 12 -50q6 13 12.5 25t14.5 25l189 307q9 14 17.5 17t24.5 3h102l-71 -590h-107l46 370l16 71l-206 -337q-16 -27 -45 -27h-17q-28 0 -38 27l-125 338v-72l-46 -370h-105l71 590h103q16 0 24.5 -3t13.5 -17zM622 1431l-13 -101h-164l-60 -489h-120l59 489 h-164l14 101h448z" />
-<glyph unicode="&#x2126;" horiz-adv-x="1373" d="M707 0l53 433q84 18 155.5 55t124 97t82.5 144t30 196q0 90 -26.5 159t-75 116.5t-116 71.5t-149.5 24q-101 0 -188 -33t-151 -97t-100 -158t-36 -216q0 -77 21 -137.5t59 -105t91 -73.5t117 -43l-52 -433h-465q-26 0 -40.5 14.5t-14.5 37.5q0 15 2 33.5t4 34.5 q3 18 5 38h383l22 179q-76 22 -136 64t-101 101t-63 132.5t-22 157.5q0 97 24 183t68 159t106 131t138 98.5t163.5 62t183.5 21.5q122 0 222 -38t171 -106t110 -162.5t39 -206.5q0 -114 -32.5 -212t-92 -175.5t-142.5 -131.5t-185 -79l-22 -178h382l-10 -97q-3 -27 -23 -43 t-49 -18h-464z" />
-<glyph unicode="&#x2202;" horiz-adv-x="1067" d="M417 1337q39 27 76 48t75.5 35t80.5 21t90 7q73 0 131 -28t98.5 -82t62.5 -132t22 -177q0 -29 -2 -60.5t-6 -64.5q-25 -202 -80 -370.5t-138 -290t-193.5 -189t-247.5 -67.5q-72 0 -131.5 23.5t-101.5 67.5t-65 107t-23 143q0 17 1 34.5t3 35.5q14 115 61.5 216t120 175 t164.5 117t195 43q94 0 158.5 -41t98.5 -122l9.5 64.5t7.5 53.5q4 31 5.5 59.5t1.5 54.5q0 143 -50.5 215t-142.5 72q-39 0 -72.5 -10t-61 -22.5l-48 -22.5t-33.5 -10q-11 0 -19.5 6t-16.5 24zM424 127q58 0 114.5 27.5t106.5 83t92.5 140.5t74.5 199q-4 45 -16 86.5 t-35 73.5t-59.5 51.5t-89.5 19.5q-75 0 -136.5 -31t-107.5 -85.5t-75 -129t-40 -161.5q-2 -16 -3 -30.5t-1 -28.5q0 -103 46.5 -159t128.5 -56z" />
-<glyph unicode="&#x2206;" horiz-adv-x="1291" d="M1217 0h-1264l724 1431h169zM218 150h771l-229 974l-11.5 51.5t-11.5 60.5l-25 -61.5t-23 -51.5z" />
-<glyph unicode="&#x220f;" horiz-adv-x="1369" d="M1420 1431l-17 -146h-189l-200 -1629h-178l199 1629h-507l-201 -1629h-177l200 1629h-188l17 146h1241z" />
-<glyph unicode="&#x2211;" horiz-adv-x="1261" d="M202 1433h1106l-18 -153h-835l433 -709l-7 -52l-606 -709h833l-18 -153h-1106l8 65q2 14 8.5 28.5t17.5 25.5l668 771l-479 765q-13 21 -13 43v6.5t1 6.5z" />
-<glyph unicode="&#x2212;" d="M180 736h859l-16 -130h-858z" />
-<glyph unicode="&#x221a;" horiz-adv-x="1144" d="M624 0h-144l-169 665h-176q-25 0 -42 13t-17 45v4t1 9.5t2 19.5t4 36h334q21 0 33.5 -11t16.5 -25l101 -421q8 -32 10 -64.5t2 -64.5l17 53.5t21 55.5l603 1361q8 16 23 26.5t34 10.5h110z" />
-<glyph unicode="&#x221e;" horiz-adv-x="1260" d="M891 254q-51 0 -91 16.5t-71.5 44.5t-56 65.5t-45.5 78.5q-31 -41 -65 -78.5t-73 -65.5t-83 -44.5t-95 -16.5q-53 0 -98.5 20t-79 57.5t-53 89.5t-19.5 117q0 82 27.5 153t73.5 123.5t106 83t126 30.5q51 0 90.5 -16.5t71.5 -45t57 -66t46 -78.5q31 41 65 78.5t72.5 66 t82.5 45t95 16.5q53 0 99 -20t80 -57.5t53.5 -90t19.5 -117.5q0 -82 -27.5 -153t-74 -123.5t-107 -82.5t-126.5 -30zM336 400q33 0 63 15t58 41.5t55 61t54 73.5q-18 39 -36 73.5t-40 60.5t-48 41.5t-59 15.5q-38 0 -70.5 -16.5t-57 -46.5t-38.5 -72t-14 -94q0 -38 10 -67 t28 -48t42.5 -28.5t52.5 -9.5zM903 400q37 0 70 16.5t57.5 46.5t38.5 72t14 94q0 39 -10.5 67.5t-28.5 47.5t-42.5 28.5t-52.5 9.5q-33 0 -62.5 -15.5t-57.5 -41.5t-55 -60.5t-54 -73.5q18 -39 36.5 -73.5t40 -61t47.5 -41.5t59 -15z" />
-<glyph unicode="&#x222b;" horiz-adv-x="742" d="M474 1091q41 174 135 266t231 92q35 0 67.5 -7t60.5 -23l-19 -87q-5 -18 -20 -27.5t-57 -9.5q-92 0 -147 -55t-83 -172l-247 -1030q-24 -102 -63.5 -175t-91 -120.5t-114 -70t-132.5 -22.5q-32 0 -66 6.5t-61 22.5l20 76q3 12 8 18.5t14 9.5t23.5 3.5t37.5 0.5 q54 0 94.5 13.5t71 42.5t52.5 76t38 113z" />
-<glyph unicode="&#x2248;" d="M832 855q28 0 56 6.5t52 16.5t42.5 22.5t29.5 23.5l11 -108q-40 -48 -98.5 -71t-119.5 -23q-52 0 -101.5 17t-97 37t-93.5 37t-91 17q-30 0 -58.5 -7t-52.5 -17.5t-42.5 -23.5t-28.5 -25l-17 105q41 51 100.5 75.5t125.5 24.5q52 0 102 -16.5t97 -37t93 -37t91 -16.5z M790 518q28 0 56 6.5t52.5 17t43 22.5t29.5 23l10 -109q-39 -47 -98 -69.5t-120 -22.5q-52 0 -101.5 16.5t-97 36.5t-93.5 36.5t-91 16.5q-30 0 -58 -6.5t-52.5 -17t-43 -23t-28.5 -24.5l-16 104q41 51 100.5 75.5t125.5 24.5q53 0 102.5 -16.5t97 -37t93 -37t89.5 -16.5z " />
-<glyph unicode="&#x2260;" d="M199 906h491l144 243h125l-144 -243h240l-15 -131h-303l-119 -202h397l-16 -131h-459l-149 -252h-125l149 252h-274l16 131h336l119 202h-429z" />
-<glyph unicode="&#x2264;" horiz-adv-x="1067" d="M178 791l819 377l-15 -122q-2 -16 -13 -29.5t-37 -25.5l-467 -207q-23 -10 -48 -17t-52 -13q26 -5 49.5 -12t43.5 -18l415 -209q21 -11 29.5 -22t8.5 -25q0 -2 -0.5 -4t-0.5 -4l-15 -122l-726 379zM107 215h773l-17 -135h-773z" />
-<glyph unicode="&#x2265;" horiz-adv-x="1067" d="M878 80h-773l17 135h773zM957 717l-819 -377l15 122q2 16 13 29.5t37 25.5l467 207q23 10 48 17t52 13q-26 5 -49.5 12t-43.5 18l-415 209q-21 11 -29.5 22t-8.5 25q0 2 0.5 4t0.5 4l15 122l726 -379z" />
-<glyph unicode="&#x25ca;" d="M143 701l390 821h124l391 -821l-391 -820h-124zM291 701l276 -581q8 -23 15.5 -42t12.5 -37q5 18 12 37l16 42l280 581l-280 582q-18 44 -28 79q-5 -19 -12.5 -38l-15.5 -41z" />
-<glyph unicode="&#x2669;" horiz-adv-x="0" d="M-118 -500l242 2000h2l-242 -2000h-2z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1014" d="M0 1015h1015v-1015h-1015v1015z" />
-<glyph unicode="&#xf6c3;" horiz-adv-x="568" d="M306 -82l-126 -282h-109l81 282h154z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1057" d="M952 993l-121 -993h-176l107 864h-387l-102 -832l-46 -207q-17 -75 -92 -75h-70l137 1112l-99 12q-40 5 -40 40l7 79h148l7 56q11 93 47.5 170t97.5 132t145 85.5t191 30.5q18 0 37.5 -1.5t39 -4t37 -6t30.5 -8.5l-17 -90q-3 -12 -13.5 -15.5t-27.5 -3.5q-11 0 -24 0.5 t-29 0.5q-83 0 -144 -18t-103.5 -54t-67 -91t-33.5 -130l-6 -53h567z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1097" d="M376 865l-103 -833l-46 -207q-17 -75 -92 -75h-70l136 1112l-98 12q-40 5 -40 38l8 81h146l7 55q10 84 43 159t88 131t131 88.5t173 32.5q71 0 141 -6.5t123 -6.5h119l-177 -1446h-173l160 1316q-45 4 -92.5 9t-90.5 5q-117 0 -189.5 -73.5t-87.5 -208.5l-6 -55h238 l-15 -128h-233z" />
-<glyph horiz-adv-x="568" d="M279 1781q15 0 25.5 -1.5t19 -5t15.5 -10t15 -15.5l167 -203h-144q-20 0 -31 6.5t-26 18.5l-235 210h194z" />
-<glyph horiz-adv-x="568" d="M336 1665q0 -20 -8.5 -38t-22.5 -31.5t-32.5 -21t-39.5 -7.5q-20 0 -37.5 7.5t-31.5 21t-22 31.5t-8 38q0 21 8 39.5t22 33t31.5 22.5t37.5 8q21 0 39.5 -8t32.5 -22.5t22.5 -33t8.5 -39.5zM680 1665q0 -20 -8 -38t-22 -31.5t-32 -21t-39 -7.5t-39 7.5t-32 21t-22 31.5 t-8 38q0 21 8 39.5t22 33t32 22.5t39 8t39 -8t32 -22.5t22 -33t8 -39.5z" />
-<glyph horiz-adv-x="568" d="M147 1678h564l-14 -102h-563z" />
-<glyph horiz-adv-x="568" d="M774 1781l-288 -210q-17 -12 -29.5 -18.5t-32.5 -6.5h-145l218 203q10 9 18.5 15.5t17.5 10t20 5t27 1.5h194z" />
-<glyph horiz-adv-x="568" d="M711 1546h-131q-11 0 -23 4t-21 9l-104 97l-11 9l-12 -9l-129 -97q-9 -6 -22.5 -9.5t-25.5 -3.5h-130l246 209h169z" />
-<glyph horiz-adv-x="568" d="M496 1546h-170l-195 209h160l121 -110l10 -9l12 9l148 110h160z" />
-<glyph horiz-adv-x="568" d="M411 1528q-128 0 -187.5 57.5t-45.5 170.5h111q-8 -60 24.5 -91t110.5 -31t117.5 31t45.5 91h112q-7 -52 -29 -94t-58.5 -72t-87 -46t-113.5 -16z" />
-<glyph horiz-adv-x="568" d="M542 1688q0 -24 -10 -46t-27 -38.5t-39.5 -26.5t-47.5 -10q-24 0 -46 10t-38.5 26.5t-26 38.5t-9.5 46q0 25 9.5 47t26 39t38.5 27t46 10q25 0 47.5 -10t39.5 -27t27 -39t10 -47z" />
-<glyph horiz-adv-x="568" d="M219 1659q0 39 15 72t41 56.5t60 36.5t72 13q39 0 73.5 -13t60.5 -36.5t41.5 -56.5t15.5 -72q0 -38 -15.5 -70t-41.5 -55t-60.5 -36t-73.5 -13q-38 0 -72 13t-60 36t-41 55t-15 70zM308 1659q0 -43 27 -71.5t74 -28.5q45 0 72.5 28.5t27.5 71.5q0 45 -27.5 73t-72.5 28 q-47 0 -74 -28t-27 -73z" />
-<glyph horiz-adv-x="568" d="M539 1660q30 0 50.5 21t25.5 58h94q-5 -42 -20 -77.5t-38 -62t-54 -41t-68 -14.5q-32 0 -60 13.5t-53 29.5l-48 29.5t-44 13.5q-30 0 -49.5 -22.5t-24.5 -59.5h-97q5 42 20.5 78t38.5 62.5t54 41t68 14.5q33 0 61 -13t53 -29t47.5 -29t43.5 -13z" />
-<glyph horiz-adv-x="568" d="M552 1771l-208 -199q-15 -14 -28 -20t-33 -6h-83l152 181q17 21 36.5 32.5t50.5 11.5h113zM866 1771l-249 -199q-17 -13 -32 -19.5t-35 -6.5h-93l187 181q20 20 40.5 32t50.5 12h131z" />
-<glyph horiz-adv-x="568" d="M470 1473q17 0 22.5 -7.5t5.5 -17.5t-3.5 -25t-15 -43.5t-33 -75.5l-57.5 -120q-12 -22 -27 -28.5t-39 -6.5h-60l93 324h114z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/theme/neo-gnu/fonts/lato-italic-webfont.ttf b/theme/neo-gnu/fonts/lato-italic-webfont.ttf
deleted file mode 100644 (file)
index cf9a5be..0000000
Binary files a/theme/neo-gnu/fonts/lato-italic-webfont.ttf and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-italic-webfont.woff b/theme/neo-gnu/fonts/lato-italic-webfont.woff
deleted file mode 100644 (file)
index 3ecbe77..0000000
Binary files a/theme/neo-gnu/fonts/lato-italic-webfont.woff and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-regular-webfont.eot b/theme/neo-gnu/fonts/lato-regular-webfont.eot
deleted file mode 100644 (file)
index d41c3ed..0000000
Binary files a/theme/neo-gnu/fonts/lato-regular-webfont.eot and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-regular-webfont.svg b/theme/neo-gnu/fonts/lato-regular-webfont.svg
deleted file mode 100644 (file)
index fa811af..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-This is a custom SVG webfont generated by Font Squirrel.
-Copyright   : Copyright c 2010 by tyPoland Lukasz Dziedzic with Reserved Font Name Lato Licensed under the SIL Open Font License Version 11 
-Designer    : Lukasz Dziedzic
-Foundry     : tyPoland Lukasz Dziedzic
-Foundry URL : httpwwwtypolandcom
-</metadata>
-<defs>
-<font id="webfontCjmEHx3G" horiz-adv-x="1187" >
-<font-face units-per-em="2048" ascent="1649" descent="-399" />
-<missing-glyph horiz-adv-x="395" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="0" />
-<glyph unicode="&#xd;" horiz-adv-x="0" />
-<glyph unicode=" "  horiz-adv-x="395" />
-<glyph unicode="&#x09;" horiz-adv-x="395" />
-<glyph unicode="&#xa0;" horiz-adv-x="395" />
-<glyph unicode="!" horiz-adv-x="702" d="M440 1467v-585q0 -46 -1.5 -90t-4.5 -89t-7.5 -91.5t-10.5 -99.5h-124l-11 99.5t-8 91.5t-4.5 89t-1.5 90v585h173zM223 113q0 27 10 50t26.5 40.5t40.5 28t50 10.5q27 0 50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5 t-40 27t-26.5 40.5t-10 51z" />
-<glyph unicode="&#x22;" horiz-adv-x="813" d="M314 1467v-297l-16 -158q-3 -33 -17.5 -51t-46.5 -18q-27 0 -41.5 18t-20.5 51l-16 158v297h158zM655 1467v-297l-16 -158q-3 -33 -17.5 -51t-46.5 -18q-27 0 -41.5 18t-20.5 51l-16 158v297h158z" />
-<glyph unicode="#" d="M809 433l-86 -433h-83q-24 0 -40 17.5t-16 44.5q0 4 0.5 8t1.5 9l72 354h-252l-73 -363q-8 -38 -31 -54t-53 -16h-81l87 433h-150q-24 0 -37 12t-13 40q0 5 0.5 11.5t1.5 12.5l9 58h208l67 334h-238l14 76q5 30 23.5 44t58.5 14h161l74 367q6 31 28 48t53 17h82l-86 -432 h253l86 432h81q26 0 42.5 -15t16.5 -40q0 -8 -1 -13l-75 -364h218l-14 -77q-5 -30 -24 -43.5t-58 -13.5h-141l-67 -334h184q25 0 38 -11.5t13 -41.5q0 -5 -0.5 -10.5t-1.5 -11.5l-9 -59h-243zM425 567h253l66 334h-252z" />
-<glyph unicode="$" d="M510 -12q-124 11 -226 60.5t-175 126.5l54 84q7 11 20.5 18.5t27.5 7.5q19 0 44 -19.5t60.5 -44.5t85.5 -49t119 -32l38 544q-72 22 -141 49t-123.5 70.5t-88 109.5t-33.5 165q0 75 29 146t85 126.5t138 91t188 39.5l11 147q2 19 15 34.5t36 15.5h67l-14 -202 q108 -13 185.5 -55.5t139.5 -101.5l-44 -68q-20 -31 -47 -30q-14 0 -36 12l-51 30q-30 17 -68.5 34t-88.5 24l-34 -496q74 -23 145.5 -49t129 -68t92.5 -105t35 -158q0 -92 -30.5 -173t-89.5 -142t-144.5 -99.5t-194.5 -44.5l-13 -181q-2 -19 -15.5 -34t-35.5 -15h-67z M912 417q0 51 -19 88t-51.5 63.5t-76.5 46t-94 35.5l-35 -510q67 6 118.5 29.5t87 59t53 83.5t17.5 105zM344 1097q0 -49 17.5 -85.5t48 -64t71.5 -48t89 -37.5l31 462q-67 -6 -115.5 -26.5t-79.5 -51.5t-46.5 -69t-15.5 -80z" />
-<glyph unicode="%" horiz-adv-x="1609" d="M724 1113q0 -86 -26.5 -154t-71 -114.5t-104 -71t-124.5 -24.5q-70 0 -128.5 24.5t-102.5 71t-68.5 114.5t-24.5 154q0 88 24.5 156.5t68.5 116t103 72t128 24.5t129 -24.5t103.5 -72t68.5 -116t25 -156.5zM582 1113q0 68 -14.5 115t-39.5 77t-58.5 43.5t-71.5 13.5 t-71 -13.5t-57.5 -43.5t-38.5 -77t-14 -115q0 -67 14 -113.5t38.5 -75.5t57.5 -42t71 -13t71.5 13t58.5 42t39.5 75.5t14.5 113.5zM1237 1431q13 17 28 26.5t40 9.5h131l-1072 -1437q-10 -13 -24.5 -21.5t-34.5 -8.5h-135zM1535 346q0 -86 -26.5 -153.5t-71 -114t-103.5 -71 t-124 -24.5q-70 0 -128.5 24.5t-102.5 71t-68.5 114t-24.5 153.5q0 88 24.5 157t68.5 116.5t103 72t128 24.5t128.5 -24.5t103.5 -72t68.5 -116.5t24.5 -157zM1394 346q0 68 -14.5 115.5t-39.5 77t-58.5 43t-71.5 13.5t-71 -13.5t-57.5 -43t-38.5 -77t-14 -115.5 q0 -67 14 -113t38.5 -75t57.5 -42t71 -13t71.5 13t58.5 42t39.5 75t14.5 113z" />
-<glyph unicode="&#x26;" horiz-adv-x="1439" d="M676 1484q81 0 147.5 -26t115 -69t76.5 -100t33 -119l-114 -22q-5 -1 -9 -1q-13 0 -25 7t-17 26q-7 27 -23 55.5t-41 52t-60.5 38.5t-82.5 15q-51 0 -92 -16t-70.5 -45.5t-45 -69t-15.5 -85.5q0 -36 8.5 -68.5t26 -66t45 -68.5t66.5 -74l422 -429q39 69 62 144t31 151 q2 19 12.5 30.5t28.5 11.5h113q-2 -118 -38 -231.5t-104 -213.5l308 -311h-177q-30 0 -48 7t-41 30l-147 148q-96 -93 -221.5 -147t-276.5 -54q-82 0 -160.5 27.5t-140.5 80t-100 128.5t-38 171q0 72 24 136t66.5 118t101 97t127.5 74q-62 79 -91.5 153.5t-29.5 154.5 q0 75 27 140.5t78 114t124.5 77t164.5 28.5zM269 406q0 -67 24.5 -117.5t64.5 -85.5t91.5 -53t104.5 -18q115 0 206 42t161 112l-434 437q-109 -58 -163.5 -139.5t-54.5 -177.5z" />
-<glyph unicode="'" horiz-adv-x="471" d="M314 1467v-297l-16 -158q-3 -33 -17.5 -51t-46.5 -18q-27 0 -41.5 18t-20.5 51l-16 158v297h158z" />
-<glyph unicode="(" horiz-adv-x="614" d="M296 644q0 -219 56.5 -425.5t162.5 -393.5q6 -11 8 -19.5t2 -16.5q0 -14 -7 -23.5t-18 -16.5l-81 -49q-77 118 -131 233.5t-87 232.5t-48.5 235t-15.5 243q0 124 15.5 243t48.5 235t87 231.5t131 234.5l81 -50q11 -7 18 -16.5t7 -23.5q0 -15 -10 -35 q-108 -186 -163.5 -393t-55.5 -426z" />
-<glyph unicode=")" horiz-adv-x="614" d="M305 644q0 219 -55.5 426t-163.5 393q-10 19 -10 35q0 14 7 23.5t18 16.5l81 50q77 -119 131 -234.5t87 -231.5t48.5 -235t15.5 -243q0 -125 -15.5 -243t-48.5 -235t-87 -232.5t-131 -233.5l-81 49q-11 7 -18 16.5t-7 23.5q0 8 2 16.5t8 19.5q106 187 162.5 393.5 t56.5 425.5z" />
-<glyph unicode="*" horiz-adv-x="819" d="M362 884v201q0 19 3 37t10 34q-20 -26 -54 -46l-177 -101l-45 76l176 103q37 22 75 24q-20 2 -38 8t-37 18l-177 103l45 77l178 -102q36 -20 58 -53q-9 18 -13 37t-4 39v203h91v-202q0 -42 -15 -73q11 15 25 26.5t32 22.5l176 101l45 -77l-176 -102q-17 -11 -34.5 -17.5 t-35.5 -8.5q18 -2 35 -7.5t35 -16.5l177 -104l-45 -76l-177 102q-18 11 -33 22.5t-26 27.5q16 -34 17 -74v-202h-91z" />
-<glyph unicode="+" d="M667 1194v-437h416v-139h-416v-440h-150v440h-415v139h415v437h150z" />
-<glyph unicode="," horiz-adv-x="434" d="M96 126q0 24 9 44.5t24.5 36.5t38 25.5t49.5 9.5q31 0 55 -11.5t40 -31.5t24 -46t8 -57q0 -46 -13.5 -95.5t-38 -98t-60.5 -95t-82 -85.5l-31 30q-13 12 -14 29q0 13 15 28l26 30q16 19 32.5 43.5t30 54t19.5 63.5h-13q-27 0 -48.5 9t-37 26t-24.5 40t-9 51z" />
-<glyph unicode="-" horiz-adv-x="710" d="M102 691h506v-154h-506v154z" />
-<glyph unicode="." horiz-adv-x="434" d="M90 113q0 27 10 50t26.5 40.5t40 28t50.5 10.5t50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5t-40 27t-26.5 40.5t-10 51z" />
-<glyph unicode="/" horiz-adv-x="763" d="M165 -22q-14 -36 -42.5 -53t-57.5 -17h-77l615 1533q13 33 38 50t58 17h77z" />
-<glyph unicode="0" d="M1126 733q0 -193 -41.5 -333.5t-113 -232.5t-169 -137t-209.5 -45q-113 0 -209.5 45t-168.5 137t-113 233t-41 333q0 193 41 334t113 234t168.5 138t209.5 45q112 0 209.5 -45t169 -138t113 -234t41.5 -334zM937 733q0 168 -28 282t-76 184t-110.5 100t-129.5 30 q-68 0 -130.5 -30t-109.5 -100t-75 -184t-28 -282t28 -281.5t75 -183t109.5 -100t130.5 -30.5t130 30.5t110 100t76 183t28 281.5z" />
-<glyph unicode="1" d="M294 139h315v1001q0 45 3 91l-262 -224q-10 -8 -20.5 -12t-19.5 -4q-15 0 -27.5 7t-18.5 16l-57 79l436 377h149v-1331h288v-139h-786v139z" />
-<glyph unicode="2" d="M615 1484q93 0 174 -28t140 -80.5t93 -128.5t34 -172q0 -82 -24.5 -151.5t-66.5 -133.5t-97 -124l-116 -122l-386 -396q41 11 82.5 18t80.5 7h492q30 0 47 -17.5t17 -44.5v-111h-979v62q0 19 8 40t25 38l470 472q58 59 106.5 114t83 110.5t52.5 112.5t18 121 q0 65 -20.5 113.5t-56 80t-84 47.5t-103.5 16t-102 -16.5t-83.5 -45.5t-61.5 -69t-35 -88q-8 -30 -24.5 -43t-43.5 -13q-5 0 -10.5 0.5t-13.5 1.5l-95 16q14 100 55 177.5t104 130t144.5 79.5t175.5 27z" />
-<glyph unicode="3" d="M635 1484q93 0 172 -26.5t135.5 -76t88.5 -119t32 -154.5q0 -70 -18 -124.5t-51 -96t-80.5 -70.5t-105.5 -46q143 -38 215.5 -127t72.5 -223q0 -101 -38.5 -182t-105 -138t-155 -87t-190.5 -30q-117 0 -199.5 29t-140 80t-94.5 121.5t-62 152.5l77 32q22 9 43 10 q20 0 36.5 -9t24.5 -27q2 -4 4 -9l4 -10q14 -30 34.5 -67t55.5 -70t86.5 -55.5t128.5 -22.5t135 25t96 65t57.5 89.5t19.5 97.5q0 59 -15.5 108t-57 85t-115 56.5t-187.5 20.5v132q93 1 159 20.5t108 53.5t61 81t19 104q0 63 -20 110.5t-55 78t-82.5 46t-102.5 15.5 t-102.5 -16.5t-84 -45.5t-61 -69.5t-36.5 -87.5q-8 -30 -24.5 -43t-42.5 -13q-5 0 -10.5 0.5t-12.5 1.5l-95 16q14 100 55 177.5t104 130t144.5 79.5t175.5 27z" />
-<glyph unicode="4" d="M925 529h222v-104q0 -16 -10 -27.5t-30 -11.5h-182v-386h-161v386h-650q-20 0 -35.5 12t-19.5 29l-18 93l714 947h170v-938zM764 1135q0 27 1.5 57.5t6.5 62.5l-533 -726h525v606z" />
-<glyph unicode="5" d="M1001 1388q0 -39 -24.5 -64.5t-82.5 -25.5h-461l-67 -385q115 25 212 25q115 0 202 -34t146.5 -93t90 -140t30.5 -176q0 -117 -41 -211.5t-112.5 -161.5t-167.5 -102.5t-208 -35.5q-65 0 -124 12.5t-110.5 34t-95.5 49.5t-77 58l55 78q18 27 49 27q19 0 45.5 -16 t63 -35.5t86.5 -35.5t118 -16q77 0 138.5 24.5t105 70.5t67 109.5t23.5 141.5q0 69 -20 124.5t-60.5 94t-100.5 60t-141 21.5q-55 0 -114.5 -9t-123.5 -29l-115 33l119 686h695v-79z" />
-<glyph unicode="6" d="M666 899q88 0 166.5 -29t138 -85t94.5 -137.5t35 -185.5q0 -101 -37 -188.5t-103 -152t-159 -101t-205 -36.5q-111 0 -200.5 35t-153 100t-97.5 158t-34 207q0 96 43 205t136 234l372 500q14 18 39.5 31t58.5 13h162l-509 -644q52 36 115.5 56t137.5 20zM287 453 q0 -71 20.5 -129.5t60 -100.5t96 -65t129.5 -23q74 0 133 23.5t101.5 65.5t65.5 99.5t23 125.5q0 72 -22.5 129.5t-63 98t-98 62t-126.5 21.5q-74 0 -133 -25t-100.5 -67.5t-63.5 -98.5t-22 -116z" />
-<glyph unicode="7" d="M1110 1467v-82q0 -35 -7.5 -57t-16.5 -38l-607 -1225q-13 -27 -36.5 -46t-63.5 -19h-130l616 1210q13 26 27 47.5t32 40.5h-766q-17 0 -31 14t-14 31v124h997z" />
-<glyph unicode="8" d="M593 -16q-110 0 -201 29t-156.5 83.5t-101.5 131.5t-36 173q0 141 74 233t211 131q-116 43 -174.5 128.5t-58.5 204.5q0 81 31.5 151.5t90 122.5t140 82t181.5 30q99 0 181 -30t140.5 -82t90 -122.5t31.5 -151.5q0 -119 -59 -204.5t-174 -128.5q137 -39 210.5 -130.5 t73.5 -233.5q0 -96 -36 -173t-101 -131.5t-156 -83.5t-201 -29zM593 129q72 0 128.5 20t96 56.5t60.5 87t21 111.5q0 76 -25 130t-67.5 87.5t-98 49.5t-115.5 16t-115.5 -16t-98 -49.5t-67.5 -87.5t-25 -130q0 -61 21 -111.5t60.5 -87t96 -56.5t128.5 -20zM593 834 q72 0 122.5 22t82 58t46 83t14.5 98t-17 96t-50 79t-83 53t-115 19q-66 0 -115.5 -19t-83 -53t-50 -79t-16.5 -96q0 -50 14 -97.5t46 -83.5t82.5 -58t122.5 -22z" />
-<glyph unicode="9" d="M562 602q-83 0 -157 27.5t-130.5 81.5t-89.5 132.5t-33 179.5q0 96 35.5 180t100 146.5t153.5 98.5t196 36q105 0 191 -35t147.5 -97.5t95 -149.5t33.5 -192q0 -63 -12 -120t-34.5 -111.5t-53.5 -108.5t-71 -111l-358 -516q-13 -19 -37.5 -31t-56.5 -12h-168l447 585 l42 56l37 53q-56 -45 -127 -68.5t-150 -23.5zM929 1031q0 69 -22 124.5t-61 94.5t-93 60t-118 21q-68 0 -123.5 -22t-95 -61t-61 -93t-21.5 -119q0 -70 20 -124.5t57.5 -92.5t91 -57.5t120.5 -19.5q74 0 130.5 24.5t95.5 64t59.5 92t20.5 108.5z" />
-<glyph unicode=":" horiz-adv-x="516" d="M131 113q0 27 10 50t26.5 40.5t40 28t50.5 10.5t50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5t-40 27t-26.5 40.5t-10 51zM131 881q0 27 10 50t26.5 40.5t40 28t50.5 10.5t50.5 -10.5t41 -28t27 -41t9.5 -49.5 q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5t-40 27t-26.5 40.5t-10 51z" />
-<glyph unicode=";" horiz-adv-x="516" d="M137 126q0 24 9 44.5t24.5 36.5t38 25.5t49.5 9.5q31 0 55 -11.5t40 -31.5t24 -46t8 -57q0 -46 -13.5 -95.5t-38 -98t-60.5 -95t-83 -85.5l-30 30q-13 12 -14 29q0 13 15 28l26 30q16 19 32.5 43.5t30 54t19.5 63.5h-13q-27 0 -48.5 9t-37 26t-24.5 40t-9 51zM131 881 q0 27 10 50t26.5 40.5t40 28t50.5 10.5t50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5t-40 27t-26.5 40.5t-10 51z" />
-<glyph unicode="&#x3c;" d="M152 727l792 411v-130q0 -17 -8 -30t-29 -24l-460 -233q-20 -11 -43 -19t-49 -14q26 -5 49 -13t43 -19l460 -232q20 -10 28.5 -23.5t8.5 -29.5v-131l-792 411v76z" />
-<glyph unicode="=" d="M154 588h879v-138h-879v138zM154 931h879v-138h-879v138z" />
-<glyph unicode="&#x3e;" d="M244 240v131q0 16 8 29.5t29 23.5l459 232q20 10 42.5 18.5t47.5 13.5q-26 6 -47.5 14t-42.5 19l-459 233q-20 10 -28.5 23t-8.5 31v130l791 -411v-76z" />
-<glyph unicode="?" horiz-adv-x="815" d="M35 1336q32 30 70 56.5t83.5 47t98.5 32.5t114 12q81 0 150.5 -23.5t119.5 -66.5t78.5 -104.5t28.5 -138.5q0 -78 -23 -134t-58 -98.5t-77 -74.5l-79 -59q-36 -28 -62 -55.5t-30 -60.5l-19 -157h-125l-12 170v11q0 43 23 76.5t58.5 62.5t75.5 58.5t75.5 64.5t58.5 80 t23 107q0 44 -17.5 79.5t-47 61t-70 38.5t-86.5 13q-62 0 -107 -15t-75.5 -33.5t-49.5 -34t-31 -15.5q-26 0 -40 24zM236 113q0 27 9.5 50t26.5 40.5t40.5 28t49.5 10.5q27 0 50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50 9.5 t-40 27t-26.5 40.5t-9.5 51z" />
-<glyph unicode="@" horiz-adv-x="1683" d="M1195 190q-80 0 -130 38.5t-64 118.5q-59 -83 -128.5 -118.5t-149.5 -35.5q-61 0 -106.5 20.5t-75.5 58t-45 89t-15 110.5q0 87 33.5 175.5t99 160t163 116.5t225.5 45q69 0 121 -11t98 -31l-96 -370q-19 -77 -19 -127q0 -37 9 -61t25 -38t37 -19t45 -5q50 0 95 29 t79.5 81t54 125t19.5 162q0 141 -45.5 248t-124.5 178t-187 106.5t-233 35.5q-137 0 -257 -52.5t-209 -144.5t-140.5 -218t-51.5 -274q0 -174 55 -306t149.5 -221t222 -134t274.5 -45q156 0 275 34t206 86q15 9 28 9q22 0 31 -24l26 -68q-110 -74 -249.5 -116t-316.5 -42 t-330 56.5t-265 162.5t-176 259.5t-64 348.5q0 112 28 215t79.5 192.5t123 164t159.5 127t189.5 82t212.5 29.5q94 0 184 -20.5t170.5 -60.5t148 -99t116 -135.5t76 -170t27.5 -203.5q0 -111 -31.5 -204t-86 -162t-129 -108t-160.5 -39zM759 313q32 0 64 10.5t62 36 t55.5 69.5t42.5 111l78 302q-40 9 -87 9q-77 0 -141 -32.5t-110 -84.5t-72 -119.5t-26 -138.5q0 -74 33.5 -118.5t100.5 -44.5z" />
-<glyph unicode="A" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5z" />
-<glyph unicode="B" horiz-adv-x="1325" d="M178 0v1467h468q135 0 233 -26.5t161 -75.5t93 -120t30 -161q0 -54 -17 -104t-51 -93t-86 -77t-121 -55q161 -32 242.5 -116t81.5 -221q0 -93 -34 -170t-100 -132.5t-162 -85.5t-219 -30h-519zM377 669v-511h317q85 0 146 19.5t100.5 54.5t58 84t18.5 107 q0 114 -80.5 180t-243.5 66h-316zM377 810h262q84 0 145.5 18.5t102 51t60 79.5t19.5 102q0 129 -78 189.5t-242 60.5h-269v-501z" />
-<glyph unicode="C" horiz-adv-x="1402" d="M1212 303q16 0 30 -13l78 -85q-90 -104 -218.5 -162.5t-309.5 -58.5q-159 0 -288 54.5t-220 153.5t-141.5 237t-50.5 304t54 304.5t151 237.5t233 154t299 55q162 0 279.5 -50.5t208.5 -136.5l-65 -91q-7 -10 -16 -16.5t-27 -6.5q-13 0 -28 9l-35 25q-20 14 -48 30.5 t-66 30.5t-88 24t-116 10q-118 0 -215.5 -40.5t-168 -115.5t-110 -182.5t-39.5 -240.5q0 -137 39.5 -244.5t107.5 -182t161 -113t201 -38.5q66 0 118 7.5t96.5 24t83 41.5t77.5 60q17 15 33 15z" />
-<glyph unicode="D" horiz-adv-x="1542" d="M1450 733q0 -165 -52 -300t-147.5 -231.5t-228.5 -149t-295 -52.5h-549v1467h549q162 0 295 -52.5t228.5 -149.5t147.5 -232t52 -300zM1246 733q0 135 -37 241.5t-104.5 180.5t-163.5 113t-214 39h-349v-1146h349q118 0 214 39t163.5 112t104.5 179.5t37 241.5z" />
-<glyph unicode="E" horiz-adv-x="1189" d="M1082 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-904v1467h904z" />
-<glyph unicode="F" horiz-adv-x="1159" d="M1082 1467v-161h-704v-513h602v-162h-602v-631h-200v1467h904z" />
-<glyph unicode="G" horiz-adv-x="1503" d="M833 144q59 0 108.5 6t93.5 17t83 27t78 36v324h-227q-19 0 -31 11.5t-12 27.5v113h450v-564q-55 -40 -115 -69.5t-128 -49.5t-146 -29.5t-169 -9.5q-160 0 -293 54.5t-229 153.5t-150 237t-54 304q0 168 53 306.5t150.5 237t236.5 153t311 54.5q87 0 161.5 -13 t138.5 -37t118.5 -58.5t101.5 -77.5l-56 -90q-17 -28 -45 -27q-16 0 -36 11q-26 14 -57.5 34.5t-77 39.5t-107.5 32.5t-147 13.5q-124 0 -224.5 -40.5t-171 -116t-108.5 -182.5t-38 -240q0 -139 39.5 -248t111 -185t170 -116t217.5 -40z" />
-<glyph unicode="H" horiz-adv-x="1548" d="M1368 0h-200v668h-790v-668h-200v1467h200v-654h790v654h200v-1467z" />
-<glyph unicode="I" horiz-adv-x="628" d="M414 0h-199v1467h199v-1467z" />
-<glyph unicode="J" horiz-adv-x="909" d="M730 507q0 -123 -30 -220.5t-89 -164.5t-145 -102.5t-198 -35.5q-99 0 -207 28q2 30 6 59l6 58q2 17 12.5 28t32.5 11q18 0 49 -9t82 -9q68 0 120.5 20t89 63t55 110.5t18.5 159.5v964h198v-960z" />
-<glyph unicode="K" horiz-adv-x="1394" d="M396 824h75q39 0 62 10t44 33l488 553q23 26 43.5 36.5t53.5 10.5h169l-559 -631q-22 -24 -40.5 -40.5t-40.5 -26.5q29 -9 50.5 -27.5t44.5 -46.5l584 -695h-172q-19 0 -32.5 3t-23 8t-18 13.5t-16.5 17.5l-507 583q-11 12 -21 20.5t-22.5 15t-29.5 9t-42 2.5h-90v-672 h-197v1467h197v-643z" />
-<glyph unicode="L" horiz-adv-x="1052" d="M377 167h635v-167h-834v1467h199v-1300z" />
-<glyph unicode="M" horiz-adv-x="1884" d="M900 530q14 -25 25 -51l21 -55q10 29 21.5 55t25.5 52l497 903q13 24 27.5 28.5t41.5 4.5h146v-1467h-174v1078q0 22 1 46.5t3 50.5l-503 -918q-26 -46 -71 -46h-29q-46 0 -72 46l-514 921q3 -27 4.5 -52.5t1.5 -47.5v-1078h-174v1467h147q27 0 41 -5t27 -28z" />
-<glyph unicode="N" horiz-adv-x="1548" d="M281 1467q27 0 39.5 -6.5t28.5 -26.5l850 -1106q-3 27 -4 51.5t-1 48.5v1039h174v-1467h-100q-24 0 -40 8t-31 28l-849 1105q2 -26 3 -50.5t1 -44.5v-1046h-174v1467h103z" />
-<glyph unicode="O" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242z" />
-<glyph unicode="P" horiz-adv-x="1251" d="M396 549v-549h-197v1467h433q139 0 242 -32t170.5 -91.5t101 -143.5t33.5 -187q0 -102 -36 -187.5t-105 -147t-171.5 -95.5t-234.5 -34h-236zM396 707h236q85 0 150 22.5t109 63t66.5 96.5t22.5 124q0 140 -86.5 219t-261.5 79h-236v-604z" />
-<glyph unicode="Q" horiz-adv-x="1634" d="M1541 733q0 -103 -21 -196.5t-61 -173.5t-97 -145.5t-129 -114.5l377 -406h-164q-37 0 -65.5 10t-52.5 36l-258 281q-58 -18 -121 -28.5t-132 -10.5q-162 0 -295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155 t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242z" />
-<glyph unicode="R" horiz-adv-x="1318" d="M396 612v-612h-197v1467h414q139 0 240.5 -28t167.5 -81t98 -128.5t32 -168.5q0 -78 -24.5 -145.5t-71 -121.5t-114 -91.5t-151.5 -57.5q37 -22 65 -62l428 -583h-176q-54 0 -80 42l-381 524q-17 25 -37.5 35.5t-61.5 10.5h-151zM396 757h208q87 0 153 21t110.5 59.5 t67 91.5t22.5 118q0 131 -86.5 197.5t-257.5 66.5h-217v-554z" />
-<glyph unicode="S" horiz-adv-x="1085" d="M930 1238q-9 -15 -19.5 -23t-26.5 -8q-17 0 -40.5 17.5t-58.5 38.5t-85 38.5t-120 17.5q-67 0 -118 -18t-85.5 -48.5t-52 -72t-17.5 -89.5q0 -61 30.5 -102t80 -69.5t112.5 -49.5l129 -44q66 -23 129 -50.5t112.5 -70.5t80 -105.5t30.5 -154.5q0 -96 -33 -180.5t-96 -147 t-154.5 -98t-208.5 -35.5q-142 0 -259.5 51.5t-200.5 139.5l58 94q8 11 19.5 19t26.5 8q22 0 49.5 -23t69 -50.5t100 -51t143.5 -23.5q71 0 126.5 19.5t93.5 55t58.5 84.5t20.5 110q0 67 -30 109t-79 71t-112 49l-129 41q-66 21 -129 48.5t-112.5 71.5t-79.5 110t-30 163 q0 78 30 151t87.5 129t142 90t194.5 34q123 0 224 -39t177 -113z" />
-<glyph unicode="T" horiz-adv-x="1208" d="M1178 1467v-167h-475v-1300h-198v1300h-476v167h1149z" />
-<glyph unicode="U" horiz-adv-x="1495" d="M749 158q91 0 162.5 30.5t121 86t76 132t26.5 168.5v892h197v-892q0 -127 -40.5 -235.5t-115.5 -187.5t-183.5 -124t-243.5 -45t-244 45t-184.5 124t-116 188t-40.5 235v892h197v-890q0 -92 26.5 -169t76 -132.5t122 -86.5t163.5 -31z" />
-<glyph unicode="V" horiz-adv-x="1392" d="M8 1467h159q27 0 43 -13t24 -34l415 -1035q14 -35 26 -76t23 -85q9 44 20 85t25 76l413 1035q7 17 24.5 32t43.5 15h159l-598 -1467h-179z" />
-<glyph unicode="W" horiz-adv-x="2086" d="M14 1467h165q27 0 44.5 -13t23.5 -34l303 -1020q8 -28 14.5 -59.5l13.5 -66.5l14 68q7 32 16 58l345 1020q6 17 24 32t44 15h57q27 0 44 -13t24 -34l343 -1020q18 -53 33 -121l11 64q5 31 13 57l304 1020q5 18 23 32.5t44 14.5h155l-458 -1467h-178l-372 1119 q-11 32 -21 74l-9 -39q-5 -19 -10 -35l-374 -1119h-178z" />
-<glyph unicode="X" horiz-adv-x="1316" d="M519 754l-484 713h197q22 0 32 -7t19 -20l383 -588q7 22 21 47l362 537q9 14 19.5 22.5t26.5 8.5h189l-486 -704l502 -763h-196q-23 0 -35.5 12t-20.5 26l-394 615q-7 -22 -18 -41l-383 -574q-9 -14 -21 -26t-33 -12h-185z" />
-<glyph unicode="Y" horiz-adv-x="1288" d="M743 584v-584h-197v584l-538 883h174q27 0 42.5 -13t26.5 -33l336 -570q20 -36 34 -67.5t25 -62.5q11 32 24.5 63.5t34.5 66.5l334 570q9 16 25 31t42 15h176z" />
-<glyph unicode="Z" horiz-adv-x="1277" d="M1200 1467v-73q0 -35 -21 -66l-831 -1166h838v-162h-1098v78q0 31 20 58l831 1170h-812v161h1073z" />
-<glyph unicode="[" horiz-adv-x="614" d="M145 -296v1866h377v-72q0 -23 -13.5 -35.5t-36.5 -12.5h-173v-1625h173q23 0 36.5 -13t13.5 -36v-72h-377z" />
-<glyph unicode="\" horiz-adv-x="768" d="M-20 1508h77q34 0 58.5 -17t38.5 -50l615 -1533h-77q-30 0 -58.5 17.5t-41.5 52.5z" />
-<glyph unicode="]" horiz-adv-x="614" d="M92 -224q0 20 14 34.5t36 14.5h173v1625h-173q-23 0 -36.5 14t-13.5 34v72h377v-1866h-377v72z" />
-<glyph unicode="^" d="M528 1467h118l367 -661h-132q-17 0 -29.5 10t-21.5 25l-200 360q-13 24 -23 46t-17 43q-14 -45 -38 -89l-199 -360q-8 -14 -19.5 -24.5t-32.5 -10.5h-139z" />
-<glyph unicode="_" horiz-adv-x="806" d="M807 -169v-123h-807v123h807z" />
-<glyph unicode="`" horiz-adv-x="628" d="M212 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5t-27 22.5l-240 264h173z" />
-<glyph unicode="a" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5z" />
-<glyph unicode="b" horiz-adv-x="1144" d="M156 0v1508h183v-620q65 75 148 120.5t191 45.5q90 0 162.5 -34t124 -101t79 -166t27.5 -228q0 -115 -30.5 -213.5t-88.5 -170.5t-141.5 -113.5t-187.5 -41.5q-100 0 -170.5 38.5t-122.5 108.5l-9 -94q-8 -39 -48 -39h-117zM618 908q-89 0 -156 -41t-123 -115v-502 q49 -68 109 -95.5t134 -27.5q145 0 223 103.5t78 294.5q0 101 -18 174t-52 119.5t-83.5 68t-111.5 21.5z" />
-<glyph unicode="c" horiz-adv-x="956" d="M857 853q-8 -11 -16 -17.5t-24 -6.5q-15 0 -33 13t-45.5 28.5t-67 28t-97.5 12.5q-76 0 -134 -27t-97.5 -78t-59.5 -124t-20 -163q0 -94 21.5 -167t60.5 -123t95 -76t125 -26q67 0 110 16t71.5 35.5t47 35t36.5 15.5q24 0 35 -17l51 -67q-68 -83 -169 -121t-213 -38 q-97 0 -181 35.5t-145.5 104t-96.5 167.5t-35 226q0 116 32 214t94 169.5t153 111.5t209 40q109 0 193 -35.5t148 -99.5z" />
-<glyph unicode="d" horiz-adv-x="1144" d="M880 0q-39 0 -50 38l-16 126q-67 -81 -152 -129.5t-196 -48.5q-89 0 -162 34t-124 100.5t-78.5 166t-27.5 228.5q0 115 30.5 213.5t88.5 171.5t141 114.5t188 41.5q95 0 163 -32.5t121 -90.5v575h182v-1508h-108zM526 133q89 0 156.5 41t123.5 116v502q-50 68 -110 94.5 t-133 26.5q-145 0 -223 -103t-78 -295q0 -101 17.5 -173.5t51.5 -119t83 -68t112 -21.5z" />
-<glyph unicode="e" horiz-adv-x="1073" d="M560 1054q93 0 172 -31.5t136.5 -90.5t89.5 -145.5t32 -196.5q0 -43 -9 -57.5t-35 -14.5h-690q2 -98 26.5 -171t67.5 -121.5t102.5 -72.5t133.5 -24q69 0 118.5 16t85 34.5t59.5 34t42 15.5q23 0 35 -17l51 -67q-34 -41 -81 -71t-101 -49.5t-111 -29t-114 -9.5 q-108 0 -198 36t-156 106.5t-103 174t-37 237.5q0 109 33 203t95.5 163t152.5 108.5t203 39.5zM564 920q-132 0 -207.5 -76.5t-94.5 -211.5h564q0 63 -17 116t-51 91.5t-83 59.5t-111 21z" />
-<glyph unicode="f" horiz-adv-x="690" d="M190 0v882l-114 13q-22 5 -35.5 16t-13.5 31v75h163v100q0 89 25.5 158.5t72 117t112 72t147.5 24.5q70 0 129 -21l-4 -91q-1 -20 -17.5 -24t-46.5 -4h-31q-47 0 -85.5 -12.5t-66.5 -40t-42.5 -72.5t-14.5 -112v-95h300v-132h-294v-885h-184z" />
-<glyph unicode="g" horiz-adv-x="1046" d="M499 1055q68 0 126.5 -15t106.5 -44h282v-67q0 -34 -43 -43l-118 -17q35 -67 35 -148q0 -76 -29.5 -138t-81 -106t-122.5 -67.5t-156 -23.5q-73 0 -138 17q-33 -20 -49.5 -43.5t-16.5 -46.5q0 -37 29.5 -55.5t79 -27t112 -10.5t127.5 -6.5t127.5 -16t111.5 -37 t78.5 -70.5t29.5 -117q0 -67 -33 -129t-95.5 -110.5t-153 -78t-203.5 -29.5q-114 0 -199.5 22.5t-141.5 60.5t-84.5 87.5t-28.5 104.5q0 77 48.5 130.5t133.5 85.5q-44 20 -70 54.5t-26 91.5q0 23 8.5 47t25 47.5t41.5 45t57 37.5q-77 43 -120.5 114.5t-43.5 166.5 q0 76 29.5 138t81.5 105.5t124.5 67t158.5 23.5zM822 -56q0 39 -21.5 62.5t-58 36t-85 19t-101.5 9t-108.5 5.5t-105.5 11q-58 -28 -94.5 -67.5t-36.5 -95.5q0 -35 18 -65t55 -52t92.5 -35t131.5 -13q74 0 132 13.5t98.5 38t62 58.5t21.5 75zM499 507q55 0 97.5 15.5t71 43 t43 66t14.5 84.5q0 95 -58 151.5t-168 56.5t-168 -56.5t-58 -151.5q0 -46 15 -84.5t43.5 -66t71 -43t96.5 -15.5z" />
-<glyph unicode="h" horiz-adv-x="1138" d="M150 0v1508h182v-610q67 71 147.5 113.5t186.5 42.5q85 0 150 -28.5t108.5 -80t66 -124t22.5 -161.5v-660h-183v660q0 118 -53.5 183t-164.5 65q-81 0 -151 -39t-129 -105v-764h-182z" />
-<glyph unicode="i" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182zM393 1363q0 -27 -10.5 -50t-28.5 -41t-41.5 -28t-50.5 -10t-50 10t-40.5 28t-28 41t-10.5 50t10.5 51t28 42t41 28t49.5 10q27 0 50.5 -10t41.5 -28t28.5 -42t10.5 -51z" />
-<glyph unicode="j" horiz-adv-x="520" d="M352 1037v-1114q0 -62 -16.5 -116t-51.5 -94t-91 -63t-134 -23q-34 0 -61.5 5.5t-54.5 15.5l8 98q2 13 9 17t23 4q8 0 17 -0.5t23 -0.5q80 0 113.5 37t33.5 120v1114h182zM393 1363q0 -27 -10.5 -50t-28.5 -41t-41.5 -28t-50.5 -10t-50 10t-40.5 28t-28 41t-10.5 50 t10.5 51t28 42t41 28t49.5 10q27 0 50.5 -10t41.5 -28t28.5 -42t10.5 -51z" />
-<glyph unicode="k" horiz-adv-x="1073" d="M339 1508v-887h47q20 0 33.5 5.5t30.5 22.5l327 351q15 16 30.5 26.5t41.5 10.5h166l-382 -406q-14 -17 -28 -30.5t-32 -23.5q18 -12 33.5 -28.5t28.5 -36.5l405 -512h-163q-23 0 -39 8.5t-30 27.5l-341 425q-15 22 -30.5 28.5t-46.5 6.5h-51v-496h-183v1508h183z" />
-<glyph unicode="l" horiz-adv-x="524" d="M352 1508v-1508h-182v1508h182z" />
-<glyph unicode="m" horiz-adv-x="1681" d="M150 0v1037h108q39 0 49 -38l14 -106q57 71 128 116t165 45q105 0 170.5 -58.5t94.5 -157.5q22 56 57 97t79 67.5t93.5 39t100.5 12.5q82 0 146 -26.5t108.5 -76.5t68 -123t23.5 -168v-660h-182v660q0 122 -53 185t-155 63q-45 0 -85.5 -15.5t-71 -46.5t-48.5 -77.5 t-18 -108.5v-660h-182v660q0 125 -50.5 186.5t-146.5 61.5q-68 0 -125.5 -36t-105.5 -99v-773h-182z" />
-<glyph unicode="n" horiz-adv-x="1138" d="M150 0v1037h108q39 0 49 -38l15 -112q68 75 151 121t193 46q85 0 150 -28.5t108.5 -80t66 -124t22.5 -161.5v-660h-183v660q0 118 -53.5 183t-164.5 65q-81 0 -151 -39t-129 -105v-764h-182z" />
-<glyph unicode="o" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5z" />
-<glyph unicode="p" horiz-adv-x="1130" d="M150 -351v1388h108q39 0 49 -38l16 -122q67 81 152 130t197 49q89 0 161.5 -34.5t124 -101.5t79 -166.5t27.5 -228.5q0 -115 -31 -213.5t-88 -170.5t-140.5 -113.5t-188.5 -41.5q-96 0 -164 31.5t-120 90.5v-459h-182zM611 908q-89 0 -156 -41t-123 -115v-502 q50 -68 110 -95.5t133 -27.5q144 0 222.5 103.5t78.5 294.5q0 101 -18 174t-52 119.5t-83.5 68t-111.5 21.5z" />
-<glyph unicode="q" horiz-adv-x="1144" d="M988 1037v-1388h-182v505q-66 -76 -149.5 -122t-190.5 -46q-89 0 -162 34t-124 100.5t-78.5 166t-27.5 228.5q0 115 30.5 213.5t88.5 171.5t141 114.5t188 41.5q100 0 170.5 -36t125.5 -101l12 80q10 38 50 38h108zM526 133q89 0 156.5 41t123.5 116v502 q-49 66 -109.5 93.5t-133.5 27.5q-145 0 -223 -103t-78 -295q0 -101 17.5 -173.5t51.5 -119t83 -68t112 -21.5z" />
-<glyph unicode="r" horiz-adv-x="825" d="M150 0v1037h104q30 0 41 -11t15 -39l13 -162q53 109 131 170t184 61q43 0 78 -10t64 -27l-23 -136q-7 -26 -32 -26q-14 0 -44 10t-83 10q-95 0 -159 -55.5t-107 -161.5v-660h-182z" />
-<glyph unicode="s" horiz-adv-x="888" d="M743 866q-12 -23 -37 -22q-15 0 -35 11t-48 25t-67 26t-92 12q-46 0 -83 -12t-63 -32.5t-40 -47.5t-14 -59q0 -40 23 -66.5t61 -46t86 -34.5l99 -32q51 -17 99 -37.5t86 -51t61 -75t23 -107.5q0 -72 -25.5 -132.5t-76 -105t-123 -70t-167.5 -25.5q-109 0 -197 35t-150 91 l43 69q8 13 19.5 20.5t30.5 7.5q18 0 38.5 -14.5t49.5 -32t70.5 -31.5t104.5 -14q53 0 93 13.5t66.5 37t39.5 54.5t13 66q0 43 -23 71t-61 48t-87 35l-99 31q-51 16 -99.5 37t-86.5 53t-61 78.5t-23 113.5q0 59 24.5 114t71.5 96.5t116 66t157 24.5q102 0 183.5 -32.5 t140.5 -88.5z" />
-<glyph unicode="t" horiz-adv-x="763" d="M464 -16q-123 0 -189 68.5t-66 197.5v635h-125q-16 0 -27.5 9.5t-11.5 30.5v72l170 22l42 320q2 15 13.5 25t28.5 10h92v-357h297v-132h-297v-623q0 -66 32 -97.5t82 -31.5q29 0 49.5 7.5t36 17t26.5 17t19 7.5q14 0 26 -17l53 -87q-47 -44 -113.5 -69t-137.5 -25z" />
-<glyph unicode="u" horiz-adv-x="1138" d="M307 1037v-661q0 -118 54.5 -182.5t163.5 -64.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-68 -75 -151.5 -120.5t-192.5 -45.5q-85 0 -150 28t-109 79t-66 124t-22 161v661h182z" />
-<glyph unicode="v" horiz-adv-x="1048" d="M18 1037h150q22 0 36 -11t20 -27l263 -667q14 -37 22.5 -74t15.5 -73l18 73q9 37 23 74l267 667q6 16 19.5 27t34.5 11h142l-423 -1037h-165z" />
-<glyph unicode="w" horiz-adv-x="1568" d="M14 1037h144q23 0 37 -11t19 -27l199 -667l15 -71q7 -34 12 -70q8 35 19 70l21 71l219 672q5 15 18 25t33 10h78q20 0 34 -10t19 -25l214 -672q11 -36 20 -71l17 -68q5 34 13 70.5t17 68.5l203 667q5 16 19.5 27t33.5 11h137l-335 -1037h-145q-27 0 -37 35l-229 703 q-8 24 -13 48l-11 48l-10 -49q-5 -25 -13 -48l-233 -702q-11 -35 -42 -35h-137z" />
-<glyph unicode="x" horiz-adv-x="1032" d="M392 531l-349 506h175q23 0 33 -7t18 -20l254 -389q9 29 27 57l223 328q10 14 20.5 22.5t25.5 8.5h168l-349 -495l363 -542h-175q-23 0 -35.5 12t-20.5 26l-261 406q-7 -30 -22 -53l-241 -353q-10 -14 -22 -26t-33 -12h-162z" />
-<glyph unicode="y" horiz-adv-x="1048" d="M454 -306q-9 -20 -23 -32.5t-43 -12.5h-135l189 411l-428 977h158q24 0 37 -11.5t19 -26.5l278 -653q9 -23 15.5 -45t12.5 -46l14 46q7 23 16 46l270 652q6 16 20.5 27t32.5 11h145z" />
-<glyph unicode="z" horiz-adv-x="946" d="M873 959q0 -19 -7 -37t-18 -32l-561 -748h566v-142h-781v76q0 13 6.5 31t18.5 34l565 753h-559v143h770v-78z" />
-<glyph unicode="{" horiz-adv-x="614" d="M185 435q0 65 -35.5 106.5t-104.5 41.5v109q69 0 104.5 41t35.5 107q0 51 -8 101t-17.5 100.5t-18 101.5t-8.5 104q0 71 21 130.5t63.5 102.5t105.5 66.5t147 23.5h54v-81q0 -20 -14 -29.5t-27 -9.5h-20q-79 0 -124.5 -51.5t-45.5 -140.5q0 -57 7 -110t16.5 -104 t16.5 -101t7 -101q0 -39 -11.5 -72.5t-32.5 -59.5t-49 -45t-62 -28q34 -9 62 -28t49 -45.5t32.5 -59.5t11.5 -71q0 -51 -7 -101t-16.5 -101t-16.5 -104t-7 -111q0 -89 45.5 -140t124.5 -51h20q12 0 26.5 -9.5t14.5 -29.5v-82h-54q-84 0 -147 24t-105.5 67t-63.5 102.5 t-21 130.5q0 53 8.5 103.5t18 101.5t17.5 101t8 101z" />
-<glyph unicode="|" horiz-adv-x="614" d="M236 1570h141v-1921h-141v1921z" />
-<glyph unicode="}" horiz-adv-x="614" d="M429 435q0 -51 8 -101t18 -101t18 -101.5t8 -103.5q0 -71 -21.5 -130.5t-63.5 -102.5t-105 -67t-147 -24h-54v82q0 20 14.5 29.5t26.5 9.5h21q79 0 124.5 51t45.5 140q0 57 -7.5 110.5t-16.5 104.5t-16.5 101t-7.5 101q0 38 11.5 71t32.5 59.5t49 45.5t62 28 q-34 9 -62 28t-49 45t-32.5 59.5t-11.5 72.5q0 51 7.5 101t16.5 101t16.5 104t7.5 110q0 88 -46 140t-124 52h-21q-12 0 -26.5 9t-14.5 30v81h54q84 0 147 -23.5t105 -66.5t63.5 -102.5t21.5 -130.5q0 -53 -8 -104t-18 -101.5t-18 -100.5t-8 -101q0 -66 36 -107t104 -41 v-109q-69 0 -104.5 -41.5t-35.5 -106.5z" />
-<glyph unicode="~" d="M777 628q67 0 104.5 43.5t38.5 114.5h147q0 -69 -19 -126t-54.5 -98t-87.5 -63.5t-118 -22.5q-53 0 -105 16.5t-101 36.5l-93 37q-44 17 -80 17q-67 0 -104.5 -43t-38.5 -116h-147q0 69 19 126t54 98t87 64t118 23q53 0 105.5 -17t101.5 -37l92 -36q44 -17 81 -17z" />
-<glyph unicode="&#xa1;" horiz-adv-x="702" d="M268 -351v554q0 46 1.5 89.5t5 88t8 91.5t10.5 100h124q6 -53 10.5 -100t7.5 -91.5t4.5 -88t1.5 -89.5v-554h-173zM223 926q0 28 10 50.5t27.5 40t40.5 27.5t50 10t50 -10t40.5 -27.5t27.5 -40.5t10 -50t-10 -50.5t-27.5 -41t-40.5 -27.5t-50 -10q-28 0 -50.5 10 t-40 27.5t-27.5 41t-10 50.5z" />
-<glyph unicode="&#xa2;" d="M574 -11q-94 10 -173 50.5t-137 108t-90.5 160.5t-32.5 210q0 114 34 209.5t98.5 166.5t158.5 112.5t216 44.5l12 183q2 20 16 35t36 15h67l-16 -238q84 -12 151.5 -44.5t122.5 -82.5l-47 -64q-8 -11 -15.5 -16.5t-22.5 -5.5q-12 0 -29 8l-40 21q-23 12 -55 24.5 t-75 19.5l-54 -780q65 4 108.5 20t73.5 33.5t49.5 31.5t36.5 14q11 0 20 -4.5t14 -11.5l50 -65q-61 -74 -156 -111.5t-205 -44.5l-12 -179q-2 -19 -16 -34.5t-35 -15.5h-68zM323 518q0 -166 69 -264t193 -122l53 778q-78 -6 -137 -35t-99 -80t-59.5 -120.5t-19.5 -156.5z " />
-<glyph unicode="&#xa3;" d="M53 688q0 27 16.5 45.5t46.5 18.5h137v267q0 96 27.5 180.5t84 147.5t140.5 99.5t196 36.5q80 0 142 -20t110 -55t83.5 -81t60.5 -99l-74 -47q-10 -6 -21 -9t-21 -3q-14 0 -27 6t-24 20l-42 50q-21 24 -47 42t-59.5 28.5t-80.5 10.5q-65 0 -113.5 -21.5t-81.5 -61.5 t-49.5 -96t-16.5 -126v-269h452v-74q0 -18 -15.5 -33.5t-37.5 -15.5h-399v-249q0 -77 -29 -133t-80 -102q30 5 59 9t60 4h692v-78q0 -14 -6 -28t-16 -26t-24.5 -19t-32.5 -7h-987v118q35 10 66.5 27.5t56 43.5t39.5 61.5t15 82.5v296h-200v59z" />
-<glyph unicode="&#xa4;" d="M228 688q0 58 17 110t47 97l-157 157l93 92l155 -156q45 32 98.5 49.5t112.5 17.5q58 0 110.5 -17t96.5 -48l156 157l92 -93l-155 -156q32 -45 49.5 -97.5t17.5 -112.5q0 -58 -17 -110.5t-47 -96.5l156 -154l-94 -95l-155 156q-45 -31 -98.5 -48t-111.5 -17t-110 16.5 t-97 46.5l-157 -157l-91 94l155 155q-31 45 -48.5 98t-17.5 112zM364 688q0 -47 17.5 -88.5t49.5 -72.5t73.5 -49.5t89.5 -18.5t90.5 18.5t74 49.5t49.5 72.5t18 88.5q0 48 -18 90t-49.5 74t-74 50t-90.5 18t-89.5 -18t-73.5 -50t-49.5 -74t-17.5 -90z" />
-<glyph unicode="&#xa5;" d="M150 640h313l-418 827h153q27 0 42.5 -12.5t25.5 -33.5l283 -579q14 -36 24.5 -66t17.5 -59q7 30 16 60t24 65l281 579q8 17 25 31.5t43 14.5h154l-419 -827h314v-104h-348v-108h348v-105h-348v-323h-183v323h-348v105h348v108h-348v104z" />
-<glyph unicode="&#xa6;" horiz-adv-x="614" d="M236 1570h141v-813h-141v813zM236 463h141v-814h-141v814z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1030" d="M837 1295q-12 -23 -38 -22q-15 0 -35 11t-48 25t-67 26t-92 12q-49 0 -88.5 -13t-66.5 -34.5t-41.5 -50t-14.5 -60.5q0 -39 25 -68t65.5 -53.5t92.5 -46.5l106 -45q54 -24 106.5 -52t92.5 -64.5t65.5 -83.5t25.5 -109q0 -83 -40 -148t-126 -104q50 -38 81.5 -88.5 t31.5 -120.5q0 -72 -25.5 -133t-75 -105.5t-123 -70t-167.5 -25.5q-109 0 -196.5 35.5t-149.5 90.5l42 70q8 13 20 20t29 7q18 0 39 -14t50.5 -32t73 -32.5t108.5 -14.5q51 0 91.5 13t68 36t42 54.5t14.5 70.5q0 46 -25.5 80t-67.5 60t-96 48l-109 44q-56 23 -109.5 48.5 t-95.5 61.5t-67.5 83.5t-25.5 113.5q0 80 44 144t139 99q-51 39 -83.5 93t-32.5 131q0 59 24.5 114t72 96t116 65.5t156.5 24.5q102 0 183.5 -32t141.5 -88zM279 743q0 -52 35.5 -88.5t91.5 -65.5t123.5 -56t130.5 -59q55 27 80 65.5t25 86.5q0 37 -15.5 65.5t-42 52 t-62.5 43t-76 37.5l-84 36q-43 18 -84 38q-68 -31 -95 -68.5t-27 -86.5z" />
-<glyph unicode="&#xa8;" horiz-adv-x="628" d="M245 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM612 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5t-36.5 24.5 t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1634" d="M1055 474l14 9q6 4 11 3q11 0 15.5 -3t10.5 -9l62 -65q-58 -68 -143 -105.5t-204 -37.5q-100 0 -182.5 35t-141.5 97.5t-91 148.5t-32 188q0 103 35 190t97.5 149t148 96t186.5 34q111 0 188.5 -34.5t135.5 -91.5l-47 -66q-5 -6 -13 -12.5t-21 -6.5q-14 0 -30 11.5 t-41.5 25t-64.5 25.5t-99 12q-72 0 -129.5 -23t-98 -66t-62.5 -104.5t-22 -138.5q0 -79 22 -141t60.5 -103.5t93 -64t117.5 -22.5q49 0 83 6.5t58.5 16.5t43.5 23zM70 733q0 103 26.5 199t75 179.5t117 151.5t151.5 117.5t178.5 76t198.5 26.5t199 -26.5t179 -76 t151.5 -117.5t117 -151.5t75.5 -179t27 -199.5q0 -102 -27 -198t-75.5 -179t-117 -151t-151.5 -117t-178.5 -75.5t-199.5 -26.5q-103 0 -198.5 26.5t-178.5 75.5t-151.5 117t-117 151t-75 178.5t-26.5 198.5zM172 733q0 -91 22.5 -175t64.5 -157t100.5 -132.5t130 -102 t154.5 -65.5t173 -23q135 0 253.5 51t206 139.5t138 208t50.5 256.5q0 91 -23 176t-65 158.5t-100.5 134t-130.5 103t-155.5 66t-173.5 23.5q-135 0 -253 -52t-205 -141.5t-137 -210t-50 -257.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="700" d="M610 860h-61q-18 0 -27.5 5.5t-17.5 24.5l-12 50q-25 -22 -48.5 -38t-49 -28t-54.5 -17.5t-64 -5.5q-39 0 -72 10t-57.5 31t-38.5 52t-14 73q0 35 19.5 69t64.5 61.5t119.5 45t183.5 19.5v38q0 65 -29.5 95.5t-87.5 30.5q-39 0 -65 -9t-45 -20l-33 -19q-15 -9 -32 -9 q-14 0 -24 7.5t-15 18.5l-23 43q53 50 115 73.5t137 23.5q55 0 98 -17.5t73 -48t45 -73.5t15 -96v-390zM316 945q52 0 90 19.5t75 55.5v107q-72 -2 -121.5 -10.5t-80 -22.5t-44 -32t-13.5 -39q0 -43 26.5 -60.5t67.5 -17.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="948" d="M141 530v24l255 398l60 -28q14 -7 21 -18.5t7 -24.5q0 -17 -10 -34l-163 -267q-14 -25 -28 -38q15 -14 28 -37l163 -267q5 -8 7.5 -17.5t2.5 -17.5q0 -29 -28 -42l-60 -29zM444 530v24l255 398l60 -28q14 -7 21 -18.5t7 -24.5q0 -17 -10 -34l-163 -267q-14 -25 -28 -38 q15 -14 28 -37l163 -267q5 -8 7.5 -17.5t2.5 -17.5q0 -29 -28 -42l-60 -29z" />
-<glyph unicode="&#xac;" d="M152 757h880v-434h-154v295h-726v139z" />
-<glyph unicode="&#xad;" horiz-adv-x="0" />
-<glyph unicode="&#xae;" horiz-adv-x="1634" d="M70 733q0 103 26.5 199t75 179.5t117 151.5t151.5 117.5t178.5 76t198.5 26.5t199 -26.5t179 -76t151.5 -117.5t117 -151.5t75.5 -179t27 -199.5q0 -102 -27 -198t-75.5 -179t-117 -151t-151.5 -117t-178.5 -75.5t-199.5 -26.5q-103 0 -198.5 26.5t-178.5 75.5 t-151.5 117t-117 151t-75 178.5t-26.5 198.5zM172 733q0 -91 22.5 -175t64.5 -157t100.5 -132.5t130 -102t154.5 -65.5t173 -23q135 0 253.5 51t206 139.5t138 208t50.5 256.5q0 91 -23 176t-65 158.5t-100.5 134t-130.5 103t-155.5 66t-173.5 23.5q-135 0 -253 -52 t-205 -141.5t-137 -210t-50 -257.5zM670 641v-362h-160v913h295q176 0 261 -64t85 -189q0 -96 -55 -163.5t-163 -93.5q17 -10 30 -25.5t24 -35.5l234 -342h-152q-34 0 -50 25l-206 309q-9 13 -22 20.5t-39 7.5h-82zM670 758h118q56 0 96 10.5t64 31t34.5 50.5t10.5 69 q0 38 -9.5 66.5t-31.5 47t-58 27.5t-89 9h-135v-311z" />
-<glyph unicode="&#xaf;" horiz-adv-x="628" d="M20 1380h588v-119h-588v119z" />
-<glyph unicode="&#xb0;" horiz-adv-x="813" d="M72 1155q0 69 25.5 129.5t70.5 105t106 70t132 25.5t131.5 -25.5t105.5 -70t70.5 -105t25.5 -129.5q0 -68 -25.5 -127.5t-70.5 -104t-106 -71t-131 -26.5q-71 0 -132 26.5t-106 71t-70.5 104t-25.5 127.5zM202 1154q0 -43 15 -80.5t43 -65t65 -43.5t81 -16q43 0 79.5 16 t64.5 43.5t43 65t15 80.5t-15 81t-43 66t-64.5 44t-79.5 16t-80.5 -16t-65.5 -44t-43 -66t-15 -81z" />
-<glyph unicode="&#xb1;" d="M667 1231v-385h416v-139h-416v-377h-150v377h-415v139h415v385h150zM102 220h981v-138h-981v138z" />
-<glyph unicode="&#xb2;" horiz-adv-x="679" d="M354 1676q53 0 97 -15t74.5 -43t47.5 -67.5t17 -87.5q0 -41 -13 -76t-34.5 -67t-48.5 -62l-59 -60l-166 -169q24 6 48 10t45 4h200q22 0 33.5 -11t11.5 -32v-78h-523v44q0 13 5 27.5t17 26.5l227 224q26 26 48 52.5t38.5 53.5t26.5 54.5t10 54.5q0 52 -31 80.5t-77 28.5 q-47 0 -76 -24.5t-44 -67.5q-8 -14 -17.5 -22.5t-27.5 -8.5q-4 0 -8.5 0.5t-9.5 1.5l-73 12q15 109 86 163t176 54z" />
-<glyph unicode="&#xb3;" horiz-adv-x="679" d="M362 1676q52 0 94.5 -14.5t72.5 -41t46.5 -61t16.5 -75.5q0 -131 -122 -177q68 -19 103 -59.5t35 -103.5q0 -56 -21.5 -99.5t-56.5 -72.5t-82 -44t-96 -15q-58 0 -101 13t-74.5 38t-53.5 62t-37 85l56 25q15 6 30 6q30 0 41 -24q6 -13 15.5 -29.5t24.5 -31t37 -24 t55 -9.5q32 0 56 10t40.5 26t24.5 36.5t8 42.5q0 31 -8.5 52.5t-28.5 36t-53.5 21.5t-81.5 7v90q89 1 125.5 31.5t36.5 83.5q0 51 -30 78t-79 27t-78 -24t-41 -65q-8 -16 -17 -24t-24 -8q-4 0 -9 0.5t-10 1.5l-68 12q7 54 29.5 94.5t55.5 68t76 41t93 13.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="628" d="M611 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5h178z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1138" d="M307 1037v-673q0 -112 55.5 -173.5t162.5 -61.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-69 -74 -141 -109t-161 -35q-76 0 -133 26t-97 73q7 -43 10 -87.5t3 -83.5v-285h-91q-39 0 -60 20.5t-21 57.5v1310h182z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1370" d="M1333 1467v-156h-224v-1517h-161v1517h-283v-1517h-161v882q-106 0 -191.5 31t-145 85t-92 126.5t-32.5 155.5q0 88 32.5 160.5t92 124t144.5 80t192 28.5h829z" />
-<glyph unicode="&#xb7;" horiz-adv-x="559" d="M127 607q0 32 12 60.5t33 49t48.5 33t58.5 12.5q32 0 60.5 -12.5t49 -33t32.5 -49t12 -60.5q0 -31 -12 -58.5t-32.5 -48.5t-49.5 -32.5t-60 -11.5t-58.5 11.5t-48.5 32.5t-33 48.5t-12 58.5z" />
-<glyph unicode="&#xb8;" horiz-adv-x="628" d="M176 -253q6 0 14 -4l20 -8q11 -5 27.5 -8t37.5 -3q43 0 65 16.5t22 43.5q0 19 -11 32.5t-32 22.5t-51.5 15.5t-69.5 11.5l44 144h114l-24 -82q92 -20 133.5 -55.5t41.5 -90.5q0 -33 -16.5 -59t-45.5 -44.5t-70 -28t-90 -9.5q-42 0 -80 8.5t-70 22.5l18 57q6 18 23 18z " />
-<glyph unicode="&#xb9;" horiz-adv-x="679" d="M177 1009h151v450l4 44l-110 -90q-12 -9 -26 -9q-24 0 -33 14l-40 58l227 194h111v-661h133v-87h-417v87z" />
-<glyph unicode="&#xba;" horiz-adv-x="780" d="M391 1484q72 0 130 -22t98.5 -63t63.5 -100t23 -132q0 -74 -23 -133t-63.5 -100.5t-98.5 -63.5t-130 -22q-73 0 -131 22t-99.5 63.5t-64 101t-22.5 132.5t22.5 132t64 100t99.5 63t131 22zM391 956q86 0 128.5 54t42.5 156t-42.5 155.5t-128.5 53.5q-89 0 -131.5 -53 t-42.5 -156q0 -102 42.5 -156t131.5 -54z" />
-<glyph unicode="&#xbb;" horiz-adv-x="948" d="M242 132l-60 29q-29 13 -28 42q0 17 10 35l163 267q13 25 27 37q-12 11 -27 38l-163 267q-10 17 -10 35q0 29 28 42l60 28l255 -398v-24zM800 554v-24l-255 -398l-60 29q-29 13 -28 42q0 17 10 35l163 267q13 25 27 37q-12 11 -27 38l-163 267q-10 17 -10 35q0 29 28 42 l60 28z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1458" d="M1326 273h112v-66q0 -11 -7.5 -19t-20.5 -8h-84v-180h-112v180h-313q-18 0 -29 8.5t-13 20.5l-10 58l350 479h127v-473zM159 807h150v450l4 45l-109 -91q-12 -9 -27 -9q-24 0 -33 15l-40 57l228 194h110v-661h133v-87h-416v87zM1214 520q0 19 1.5 42t4.5 46l-247 -335 h241v247zM444 54q-19 -32 -41.5 -43t-52.5 -11h-78l838 1405q18 30 42 46t56 16h79z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1458" d="M1153 755q53 0 96.5 -15.5t74.5 -43t48 -67t17 -87.5q0 -41 -13 -76.5t-34.5 -67t-49.5 -61.5l-58 -61l-166 -168q24 6 48 10t45 4h200q22 0 33.5 -11.5t11.5 -31.5v-79h-523v44q0 13 5 27.5t17 26.5l227 225q26 26 48 52t38.5 53.5t26 54.5t9.5 55q0 52 -30.5 80 t-76.5 28q-47 0 -76.5 -24.5t-43.5 -67.5q-8 -14 -18 -22.5t-27 -8.5q-4 0 -8.5 0.5t-9.5 1.5l-73 13q15 109 86 163t176 54zM159 807h150v450l4 45l-109 -91q-12 -9 -27 -9q-24 0 -33 15l-40 57l228 194h110v-661h133v-87h-416v87zM399 54q-19 -32 -41.5 -43t-52.5 -11h-78 l838 1405q18 30 41.5 46t56.5 16h79z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1460" d="M1327 273h112v-66q0 -11 -7.5 -19t-20.5 -8h-84v-180h-112v180h-313q-18 0 -29 8.5t-13 20.5l-10 58l350 479h127v-473zM346 1475q52 0 94 -15t72.5 -41t46.5 -61t16 -76q0 -131 -121 -177q68 -19 103 -59t35 -104q0 -56 -21.5 -99t-57 -72.5t-82 -44t-95.5 -14.5 q-58 0 -101.5 12.5t-74.5 37.5t-53 62t-37 85l56 25q15 6 30 6q30 0 41 -24q6 -13 15 -29.5t24.5 -30.5t37.5 -24t55 -10q32 0 56 10.5t40 26t24.5 36t8.5 42.5q0 31 -9 53t-29 36t-53 21.5t-81 7.5v89q89 1 125 31.5t36 84.5q0 51 -29.5 77.5t-78.5 26.5t-78.5 -24 t-41.5 -65q-8 -16 -16.5 -24t-24.5 -8q-4 0 -8.5 0.5t-9.5 1.5l-69 12q7 54 29.5 95t56 68t76.5 41t93 14zM1215 520q0 19 1.5 42t4.5 46l-247 -335h241v247zM450 54q-19 -32 -42 -43t-53 -11h-77l837 1405q18 30 42 46t56 16h79z" />
-<glyph unicode="&#xbf;" horiz-adv-x="815" d="M788 -217q-32 -30 -70 -56.5t-83 -47t-98.5 -32.5t-114.5 -12q-81 0 -150 23t-119.5 64.5t-79 102t-28.5 137.5q0 78 23 132t58.5 93t77.5 67l78 52q36 25 62.5 50t30.5 59l18 157h125l12 -171v-12q0 -45 -23 -76.5t-58 -57.5t-75.5 -50t-76 -54.5t-58.5 -71.5t-23 -102 q0 -45 17.5 -80t47 -60t70 -38.5t86.5 -13.5q62 0 107 15.5t75.5 34t50 33.5t31.5 15q14 0 23 -6t16 -17zM332 925q0 27 9.5 50t26.5 40.5t40.5 28t50.5 10.5t50 -10.5t40.5 -28t27.5 -41t10 -49.5q0 -28 -10 -51t-27.5 -40.5t-41 -27t-49.5 -9.5q-27 0 -50.5 9.5t-40.5 27 t-26.5 40.5t-9.5 51z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM533 1825q16 0 28 -1.5t21.5 -5t18 -10.5t18.5 -17l216 -208h-142 q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM1046 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208 q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM1030 1583h-138q-12 0 -26.5 3.5t-23.5 9.5l-133 98q-8 4 -13 8 q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138l243 215h180z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM820 1703q36 0 55 21t20 59h100q0 -44 -11 -81t-32.5 -64t-53.5 -42 t-73 -15q-36 0 -68.5 13.5t-62.5 29.5l-57 29q-27 13 -51 13q-35 0 -54 -22t-20 -59h-102q0 44 11.5 81.5t33.5 64t54.5 42t72.5 15.5q36 0 68.5 -13.5t62.5 -29.5l56 -29q26 -13 51 -13z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM592 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9 t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM1028 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5 t24.5 -36t9 -45z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1392" d="M1385 0h-153q-27 0 -43.5 13.5t-24.5 33.5l-137 354h-658l-138 -354q-7 -18 -24.5 -32.5t-42.5 -14.5h-154l587 1467h202zM424 545h548l-231 597q-23 55 -44 138q-11 -42 -21.5 -77.5t-21.5 -61.5zM501 1699q0 40 16 73.5t42 57.5t60.5 37.5t73.5 13.5q40 0 75.5 -13.5 t62.5 -37.5t42.5 -57.5t15.5 -73.5q0 -39 -15.5 -72t-42.5 -56.5t-62.5 -36.5t-75.5 -13q-39 0 -73.5 13t-60.5 36.5t-42 56.5t-16 72zM592 1699q0 -44 27.5 -73.5t75.5 -29.5q46 0 74.5 29.5t28.5 73.5q0 46 -28.5 74.5t-74.5 28.5q-48 0 -75.5 -28.5t-27.5 -74.5z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1902" d="M751 1467h1045v-161h-767l62 -488h572v-155h-553l62 -501h624v-162h-790l-51 401h-569l-183 -355q-11 -20 -30 -33t-46 -13h-152zM461 545h476l-96 771q-12 -42 -27 -77l-30 -68z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1402" d="M658 -253q6 0 15 -4l19 -8q11 -5 27.5 -8t38.5 -3q43 0 65 16.5t22 43.5q0 19 -11.5 32.5t-32.5 22.5t-51.5 15.5t-69.5 11.5l37 121q-142 12 -258 72t-197.5 157.5t-125.5 229t-44 287.5q0 166 54 304.5t151 237.5t233 154t299 55q162 0 279.5 -50.5t208.5 -136.5 l-65 -91q-7 -10 -16 -16.5t-27 -6.5q-13 0 -28 9l-35 25q-20 14 -48 30.5t-66 30.5t-88 24t-116 10q-118 0 -215.5 -40.5t-168 -115.5t-110 -182.5t-39.5 -240.5q0 -137 39.5 -244.5t107.5 -182t161 -113t201 -38.5q66 0 118 7.5t96.5 24t83 41.5t77.5 60q17 15 33 15 t30 -13l78 -85q-85 -99 -204.5 -156.5t-285.5 -63.5l-16 -57q92 -20 133.5 -55.5t41.5 -90.5q0 -33 -16.5 -59t-45.5 -44.5t-70 -28t-90 -9.5q-42 0 -80 8.5t-70 22.5l18 57q6 18 23 18z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1189" d="M1082 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-904v1467h904zM479 1825q16 0 28 -1.5t21.5 -5t18 -10.5t18.5 -17l216 -208h-142q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1189" d="M1082 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-904v1467h904zM992 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph unicode="&#xca;" horiz-adv-x="1189" d="M1082 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-904v1467h904zM977 1583h-138q-12 0 -26.5 3.5t-23.5 9.5l-133 98q-8 4 -13 8q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138l243 215h180z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1189" d="M1082 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-904v1467h904zM539 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM975 1706 q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph unicode="&#xcc;" horiz-adv-x="628" d="M414 0h-199v1467h199v-1467zM153 1825q16 0 28 -1.5t21.5 -5t18 -10.5t18.5 -17l216 -208h-142q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph unicode="&#xcd;" horiz-adv-x="628" d="M414 0h-199v1467h199v-1467zM666 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph unicode="&#xce;" horiz-adv-x="628" d="M414 0h-199v1467h199v-1467zM650 1583h-138q-12 0 -26.5 3.5t-23.5 9.5l-133 98q-8 4 -13 8q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138l243 215h180z" />
-<glyph unicode="&#xcf;" horiz-adv-x="628" d="M414 0h-199v1467h199v-1467zM211 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM647 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9 q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1615" d="M51 799h202v668h548q162 0 295.5 -52.5t228.5 -149.5t147.5 -232t52.5 -300t-52.5 -300t-147.5 -231.5t-228.5 -149t-295.5 -52.5h-548v682h-202v117zM1321 733q0 135 -37 241.5t-104.5 180.5t-163.5 113t-215 39h-349v-508h390v-117h-390v-521h349q119 0 215 39 t163.5 112t104.5 179.5t37 241.5z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1548" d="M281 1467q27 0 39.5 -6.5t28.5 -26.5l850 -1106q-3 27 -4 51.5t-1 48.5v1039h174v-1467h-100q-24 0 -40 8t-31 28l-849 1105q2 -26 3 -50.5t1 -44.5v-1046h-174v1467h103zM922 1703q36 0 55 21t20 59h100q0 -44 -11 -81t-32.5 -64t-53.5 -42t-73 -15q-36 0 -68.5 13.5 t-62.5 29.5l-57 29q-27 13 -51 13q-35 0 -54 -22t-20 -59h-102q0 44 11.5 81.5t33.5 64t54.5 42t72.5 15.5q36 0 68.5 -13.5t62.5 -29.5l56 -29q26 -13 51 -13z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242zM656 1825q16 0 28 -1.5t21.5 -5t18 -10.5t18.5 -17l216 -208h-142q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242zM1169 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242zM1153 1583h-138q-12 0 -26.5 3.5t-23.5 9.5l-133 98q-8 4 -13 8q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138 l243 215h180z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242zM943 1703q36 0 55 21t20 59h100q0 -44 -11 -81t-32.5 -64t-53.5 -42t-73 -15q-36 0 -68.5 13.5t-62.5 29.5l-57 29q-27 13 -51 13 q-35 0 -54 -22t-20 -59h-102q0 44 11.5 81.5t33.5 64t54.5 42t72.5 15.5q36 0 68.5 -13.5t62.5 -29.5l56 -29q26 -13 51 -13z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5t-295 54.5t-228 154t-147.5 237t-52.5 302.5t52.5 303t147.5 237.5t228 155t295 55.5t295.5 -55.5t229 -155t147.5 -237.5t52 -303zM1337 733q0 135 -36.5 242.5t-104.5 182t-164 114.5t-215 40 q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5t37 -242t105 -181t164 -113.5t214 -39.5q119 0 215 39.5t164 113.5t104.5 181t36.5 242zM715 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5 t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM1151 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph unicode="&#xd7;" d="M1041 1038l-352 -352l363 -361l-98 -99l-362 363l-366 -365l-97 99l365 364l-354 353l98 99l353 -355l352 353z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1634" d="M1541 733q0 -165 -52 -302.5t-147.5 -237t-229 -154t-295.5 -54.5q-111 0 -207 25t-177 74l-102 -139q-23 -30 -52.5 -43.5t-59.5 -13.5h-80l196 267q-115 100 -178 247.5t-63 330.5q0 165 52.5 303t147.5 237.5t228 155t295 55.5q118 0 220.5 -30t187.5 -85l84 114 q20 28 36.5 39.5t49.5 11.5h102l-176 -241q105 -100 162.5 -242.5t57.5 -317.5zM297 733q0 -138 38.5 -246t108.5 -183l675 921q-61 43 -137 65t-165 22q-118 0 -214 -40t-164 -114.5t-105 -182t-37 -242.5zM1337 733q0 129 -33 232t-95 177l-670 -914q119 -72 278 -71 q119 0 215 39.5t164 113.5t104.5 181t36.5 242z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1495" d="M749 158q91 0 162.5 30.5t121 86t76 132t26.5 168.5v892h197v-892q0 -127 -40.5 -235.5t-115.5 -187.5t-183.5 -124t-243.5 -45t-244 45t-184.5 124t-116 188t-40.5 235v892h197v-890q0 -92 26.5 -169t76 -132.5t122 -86.5t163.5 -31zM584 1825q16 0 28 -1.5t21.5 -5 t18 -10.5t18.5 -17l216 -208h-142q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph unicode="&#xda;" horiz-adv-x="1495" d="M749 158q91 0 162.5 30.5t121 86t76 132t26.5 168.5v892h197v-892q0 -127 -40.5 -235.5t-115.5 -187.5t-183.5 -124t-243.5 -45t-244 45t-184.5 124t-116 188t-40.5 235v892h197v-890q0 -92 26.5 -169t76 -132.5t122 -86.5t163.5 -31zM1097 1825l-301 -221 q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1495" d="M749 158q91 0 162.5 30.5t121 86t76 132t26.5 168.5v892h197v-892q0 -127 -40.5 -235.5t-115.5 -187.5t-183.5 -124t-243.5 -45t-244 45t-184.5 124t-116 188t-40.5 235v892h197v-890q0 -92 26.5 -169t76 -132.5t122 -86.5t163.5 -31zM1081 1583h-138q-12 0 -26.5 3.5 t-23.5 9.5l-133 98q-8 4 -13 8q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138l243 215h180z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1495" d="M749 158q91 0 162.5 30.5t121 86t76 132t26.5 168.5v892h197v-892q0 -127 -40.5 -235.5t-115.5 -187.5t-183.5 -124t-243.5 -45t-244 45t-184.5 124t-116 188t-40.5 235v892h197v-890q0 -92 26.5 -169t76 -132.5t122 -86.5t163.5 -31zM643 1706q0 -23 -9.5 -42.5 t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM1079 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36 t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1288" d="M743 584v-584h-197v584l-538 883h174q27 0 42.5 -13t26.5 -33l336 -570q20 -36 34 -67.5t25 -62.5q11 32 24.5 63.5t34.5 66.5l334 570q9 16 25 31t42 15h176zM995 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206 z" />
-<glyph unicode="&#xde;" horiz-adv-x="1251" d="M396 279v-279h-197v1467h197v-270h236q139 0 242 -32t170.5 -91.5t101 -143.5t33.5 -188q0 -102 -36 -187t-105 -146.5t-171.5 -95.5t-234.5 -34h-236zM396 436h236q85 0 150 22.5t109 63t66.5 97t22.5 123.5q0 140 -86.5 219t-261.5 79h-236v-604z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1247" d="M689 1489q105 0 182.5 -31t128 -78.5t74.5 -103.5t24 -109q0 -61 -22 -105t-55 -78t-71.5 -59.5t-71 -50t-54.5 -50.5t-22 -59q0 -40 27 -66.5t68 -49.5t88.5 -47t88.5 -60t68 -88.5t27 -131.5q0 -80 -29 -142.5t-80 -106t-120.5 -66.5t-149.5 -23q-99 0 -180.5 35 t-142.5 91l42 69q8 13 20 20.5t29 7.5q18 0 38.5 -14.5t49 -32t67 -31.5t92.5 -14q45 0 81 13.5t61 37t38 56.5t13 71q0 57 -28.5 93t-71.5 62t-93 47.5t-93 51.5t-72 72.5t-29 109.5q0 54 23 94.5t57.5 73t74.5 60t74 58.5t57.5 67t23.5 85q0 33 -13 66.5t-41.5 60 t-74.5 43.5t-110 17q-70 0 -126.5 -21.5t-97 -64.5t-62.5 -107.5t-22 -150.5v-1010h-184v1016q0 106 35.5 193t101 149.5t157.5 96.5t205 34z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM438 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5t-27 22.5l-240 264h173z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM837 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5h178z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM853 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18l-132 -129q-6 -5 -17.5 -9.5t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM653 1357q37 0 57 21.5t21 66.5h110q0 -48 -12.5 -88.5t-36.5 -69.5t-57.5 -44.5t-74.5 -15.5q-36 0 -67 14.5t-59 32.5l-52 32q-25 15 -48 15q-74 0 -76 -90h-114q0 49 13.5 89.5t38 69.5t58.5 45t74 16q36 0 67 -15t59 -32l51 -32q24 -15 48 -15z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM471 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM838 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5 t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1038" d="M911 0h-81q-27 0 -43 8t-21 35l-21 96q-41 -37 -79.5 -66t-81.5 -49t-92 -30t-108 -10q-60 0 -113 16.5t-92 50.5t-62 85.5t-23 122.5q0 61 34 118t109 101t197 72.5t298 32.5v81q0 121 -51.5 182.5t-153.5 61.5q-67 0 -112 -17t-78.5 -37.5t-57.5 -37.5t-48 -17 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 185.5 124t220.5 41q87 0 154.5 -29t113.5 -80t69.5 -123.5t23.5 -159.5v-664zM438 112q48 0 88 9.5t75.5 27.5t67.5 43.5t63 58.5v216q-126 -4 -214 -20t-143.5 -41.5t-80.5 -60.5t-25 -78q0 -41 13.5 -70.5t36 -48.5t53 -27.5 t66.5 -8.5zM336 1347q0 43 16 77.5t44.5 60t65 39.5t77.5 14q42 0 79.5 -14t66 -39.5t45 -60t16.5 -77.5q0 -42 -16.5 -77t-45 -59.5t-66 -38.5t-79.5 -14q-41 0 -77.5 14t-65 38.5t-44.5 59.5t-16 77zM438 1347q0 -45 27.5 -74t75.5 -29q46 0 74.5 29t28.5 74 q0 46 -28.5 74.5t-74.5 28.5q-48 0 -75.5 -28.5t-27.5 -74.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1671" d="M1194 1054q84 0 156 -33t125 -95.5t83 -152t30 -204.5q0 -42 -8 -56.5t-34 -14.5h-642q4 -93 27.5 -162.5t63 -115.5t93.5 -68.5t120 -22.5q71 0 118 15t78.5 33.5t51 33t35.5 14.5q14 0 23.5 -4.5t15.5 -12.5l48 -63q-34 -41 -78.5 -71t-95 -49.5t-105 -29t-107.5 -9.5 q-120 0 -217.5 57.5t-154.5 176.5q-28 -63 -72.5 -108t-98.5 -74t-115 -41.5t-121 -12.5q-71 0 -129.5 17.5t-101 53.5t-65.5 90.5t-23 127.5q0 61 34 121t109 107t197 77t298 34v52q0 121 -51.5 185t-153.5 64q-67 0 -112 -17.5t-78.5 -39t-57.5 -39.5t-48 -18 q-18 0 -32 9.5t-22 24.5l-33 58q86 83 179 124t208 41q123 0 198 -52.5t109 -145.5q55 90 143.5 143t212.5 53zM732 498q-126 -5 -214 -23t-143.5 -47t-80.5 -65.5t-25 -79.5q0 -89 51.5 -130t134.5 -41q58 0 108.5 18t88 56t59 94.5t21.5 132.5v85zM1187 920 q-62 0 -111.5 -21t-85 -61t-56.5 -97.5t-28 -129.5h520q0 67 -15.5 124t-46.5 97.5t-75.5 64t-101.5 23.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="956" d="M410 -253q6 0 14 -4l19 -8q11 -5 27.5 -8t38.5 -3q43 0 65 16.5t22 43.5q0 19 -11.5 32.5t-32.5 22.5t-51.5 15.5t-69.5 11.5l38 124q-85 11 -157 51.5t-124.5 108t-82 160.5t-29.5 209t32 214t94 169.5t153 111.5t209 40q109 0 193 -35.5t148 -99.5l-48 -66 q-8 -11 -16 -17.5t-24 -6.5q-15 0 -33 13t-45.5 28.5t-67 28t-97.5 12.5q-76 0 -134 -27t-97.5 -78t-59.5 -124t-20 -163q0 -94 21.5 -167t60.5 -123t95 -76t125 -26q67 0 110 16t71.5 35.5t47 35t36.5 15.5q11 0 20 -4.5t15 -12.5l51 -67q-60 -74 -147 -111.5t-186 -45.5 l-18 -60q92 -20 133.5 -55.5t41.5 -90.5q0 -33 -16 -59t-45.5 -44.5t-70.5 -28t-90 -9.5q-42 0 -80 8.5t-69 22.5l17 57q7 18 24 18z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1073" d="M560 1054q93 0 172 -31.5t136.5 -90.5t89.5 -145.5t32 -196.5q0 -43 -9 -57.5t-35 -14.5h-690q2 -98 26.5 -171t67.5 -121.5t102.5 -72.5t133.5 -24q69 0 118.5 16t85 34.5t59.5 34t42 15.5q23 0 35 -17l51 -67q-34 -41 -81 -71t-101 -49.5t-111 -29t-114 -9.5 q-108 0 -198 36t-156 106.5t-103 174t-37 237.5q0 109 33 203t95.5 163t152.5 108.5t203 39.5zM564 920q-132 0 -207.5 -76.5t-94.5 -211.5h564q0 63 -17 116t-51 91.5t-83 59.5t-111 21zM462 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5t-27 22.5l-240 264 h173z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1073" d="M560 1054q93 0 172 -31.5t136.5 -90.5t89.5 -145.5t32 -196.5q0 -43 -9 -57.5t-35 -14.5h-690q2 -98 26.5 -171t67.5 -121.5t102.5 -72.5t133.5 -24q69 0 118.5 16t85 34.5t59.5 34t42 15.5q23 0 35 -17l51 -67q-34 -41 -81 -71t-101 -49.5t-111 -29t-114 -9.5 q-108 0 -198 36t-156 106.5t-103 174t-37 237.5q0 109 33 203t95.5 163t152.5 108.5t203 39.5zM564 920q-132 0 -207.5 -76.5t-94.5 -211.5h564q0 63 -17 116t-51 91.5t-83 59.5t-111 21zM861 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5 h178z" />
-<glyph unicode="&#xea;" horiz-adv-x="1073" d="M560 1054q93 0 172 -31.5t136.5 -90.5t89.5 -145.5t32 -196.5q0 -43 -9 -57.5t-35 -14.5h-690q2 -98 26.5 -171t67.5 -121.5t102.5 -72.5t133.5 -24q69 0 118.5 16t85 34.5t59.5 34t42 15.5q23 0 35 -17l51 -67q-34 -41 -81 -71t-101 -49.5t-111 -29t-114 -9.5 q-108 0 -198 36t-156 106.5t-103 174t-37 237.5q0 109 33 203t95.5 163t152.5 108.5t203 39.5zM564 920q-132 0 -207.5 -76.5t-94.5 -211.5h564q0 63 -17 116t-51 91.5t-83 59.5t-111 21zM877 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18l-132 -129q-6 -5 -17.5 -9.5 t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1073" d="M560 1054q93 0 172 -31.5t136.5 -90.5t89.5 -145.5t32 -196.5q0 -43 -9 -57.5t-35 -14.5h-690q2 -98 26.5 -171t67.5 -121.5t102.5 -72.5t133.5 -24q69 0 118.5 16t85 34.5t59.5 34t42 15.5q23 0 35 -17l51 -67q-34 -41 -81 -71t-101 -49.5t-111 -29t-114 -9.5 q-108 0 -198 36t-156 106.5t-103 174t-37 237.5q0 109 33 203t95.5 163t152.5 108.5t203 39.5zM564 920q-132 0 -207.5 -76.5t-94.5 -211.5h564q0 63 -17 116t-51 91.5t-83 59.5t-111 21zM495 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5 t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM862 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z " />
-<glyph unicode="&#xec;" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182zM166 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5t-27 22.5l-240 264h173z" />
-<glyph unicode="&#xed;" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182zM565 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5h178z" />
-<glyph unicode="&#xee;" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182zM580 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18l-132 -129q-6 -5 -17.5 -9.5t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#xef;" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182zM199 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM566 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5 t-44 -9.5q-24 0 -45 9.5t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1132" d="M427 1091q-4 7 -6.5 13.5t-2.5 12.5q0 23 23 38l106 74q-46 20 -98 37.5t-110 31.5q-18 5 -31 19t-13 38q0 15 5 29l21 64q98 -16 190 -47t175 -80l171 125l36 -58q8 -13 8 -25q0 -22 -22 -38l-100 -69q61 -50 112 -113.5t87 -142.5t56 -174t20 -208q0 -146 -32 -262.5 t-95 -198.5t-156.5 -126t-216.5 -44q-100 0 -187 33.5t-151 96.5t-101 154t-37 206q0 96 31.5 181.5t91 150t144 102.5t191.5 38q102 0 192.5 -44t157.5 -133q-20 139 -80.5 236.5t-156.5 162.5l-188 -138zM558 128q73 0 132 27.5t100 83.5t65 140.5t27 198.5 q-16 44 -43 85.5t-65.5 73.5t-89 51t-114.5 19q-77 0 -134.5 -25.5t-96.5 -70t-59 -105.5t-20 -131q0 -83 23.5 -148t64.5 -109t95 -67t115 -23z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1138" d="M150 0v1037h108q39 0 49 -38l15 -112q68 75 151 121t193 46q85 0 150 -28.5t108.5 -80t66 -124t22.5 -161.5v-660h-183v660q0 118 -53.5 183t-164.5 65q-81 0 -151 -39t-129 -105v-764h-182zM691 1357q37 0 57 21.5t21 66.5h110q0 -48 -12.5 -88.5t-36.5 -69.5 t-57.5 -44.5t-74.5 -15.5q-36 0 -67 14.5t-59 32.5l-52 32q-25 15 -48 15q-74 0 -76 -90h-114q0 49 13.5 89.5t38 69.5t58.5 45t74 16q36 0 67 -15t59 -32l51 -32q24 -15 48 -15z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5zM469 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5t-27 22.5l-240 264h173z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5zM868 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5h178z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5zM884 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18l-132 -129q-6 -5 -17.5 -9.5t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5zM684 1357q37 0 57 21.5t21 66.5h110q0 -48 -12.5 -88.5t-36.5 -69.5t-57.5 -44.5t-74.5 -15.5q-36 0 -67 14.5t-59 32.5l-52 32q-25 15 -48 15 q-74 0 -76 -90h-114q0 49 13.5 89.5t38 69.5t58.5 45t74 16q36 0 67 -15t59 -32l51 -32q24 -15 48 -15z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1138" d="M569 1054q114 0 205.5 -38t155.5 -107.5t98.5 -168.5t34.5 -221q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37t-205.5 37t-156 107t-99 168t-34.5 221q0 122 34.5 221t99 168.5t156 107.5t205.5 38zM569 128q154 0 229.5 103t75.5 287q0 185 -75.5 288.5 t-229.5 103.5q-78 0 -135 -26.5t-95.5 -76.5t-57.5 -123.5t-19 -165.5t19 -164.5t57.5 -122.5t95.5 -76.5t135 -26.5zM502 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5 t37 -25.5t25.5 -37t9.5 -45zM869 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z" />
-<glyph unicode="&#xf7;" d="M102 757h981v-139h-981v139zM465 1051q0 27 9.5 50t26.5 40.5t40 28t51 10.5q27 0 50 -10.5t40 -28t27.5 -41t10.5 -49.5q0 -28 -10.5 -51t-27.5 -40.5t-40.5 -27t-49.5 -9.5q-28 0 -51 9.5t-40 27t-26.5 40.5t-9.5 51zM465 322q0 27 9.5 50t26.5 40.5t40 28t51 10.5 q27 0 50 -10.5t40 -28t27.5 -41t10.5 -49.5q0 -28 -10.5 -51t-27.5 -40.5t-40.5 -27t-49.5 -9.5q-28 0 -51 9.5t-40 27t-26.5 40.5t-9.5 51z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1138" d="M934 905q62 -70 96 -167.5t34 -218.5q0 -123 -34.5 -221t-98.5 -168t-155.5 -107t-205.5 -37q-78 0 -145 17t-122 50l-56 -76q-23 -30 -53 -42.5t-60 -12.5h-68l148 201q-68 71 -103.5 170t-35.5 226q0 122 34.5 221t99 168.5t156.5 107.5t205 38q81 0 150.5 -19.5 t126.5 -55.5l69 93q20 28 37 39.5t49 11.5h93zM252 518q0 -164 60 -263l447 604q-75 57 -189 57q-78 0 -137 -27.5t-99.5 -78.5t-61 -125.5t-20.5 -166.5zM570 123q77 0 136 27t99.5 78.5t61 124.5t20.5 165q0 155 -53 253l-444 -599q71 -49 180 -49z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1138" d="M307 1037v-661q0 -118 54.5 -182.5t163.5 -64.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-68 -75 -151.5 -120.5t-192.5 -45.5q-85 0 -150 28t-109 79t-66 124t-22 161v661h182zM463 1484q34 0 50.5 -11t30.5 -34l152 -248h-104q-22 0 -35 6.5 t-27 22.5l-240 264h173z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1138" d="M307 1037v-661q0 -118 54.5 -182.5t163.5 -64.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-68 -75 -151.5 -120.5t-192.5 -45.5q-85 0 -150 28t-109 79t-66 124t-22 161v661h182zM862 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248 q14 24 31 34.5t50 10.5h178z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1138" d="M307 1037v-661q0 -118 54.5 -182.5t163.5 -64.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-68 -75 -151.5 -120.5t-192.5 -45.5q-85 0 -150 28t-109 79t-66 124t-22 161v661h182zM878 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18 l-132 -129q-6 -5 -17.5 -9.5t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1138" d="M307 1037v-661q0 -118 54.5 -182.5t163.5 -64.5q80 0 150.5 38t130.5 105v765h182v-1037h-108q-39 0 -50 38l-14 112q-68 -75 -151.5 -120.5t-192.5 -45.5q-85 0 -150 28t-109 79t-66 124t-22 161v661h182zM496 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5 q-23 0 -43 9.5t-36 24.5t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM863 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5 t36.5 -25.5t25 -37t9 -45z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1048" d="M454 -306q-9 -20 -23 -32.5t-43 -12.5h-135l189 411l-428 977h158q24 0 37 -11.5t19 -26.5l278 -653q9 -23 15.5 -45t12.5 -46l14 46q7 23 16 46l270 652q6 16 20.5 27t32.5 11h145zM844 1484l-238 -264q-14 -15 -28 -22t-36 -7h-108l151 248q14 24 31 34.5t50 10.5h178z " />
-<glyph unicode="&#xfe;" horiz-adv-x="1130" d="M150 -351v1859h182v-621q65 76 148.5 121.5t191.5 45.5q89 0 161.5 -34t124 -101t79 -166t27.5 -228q0 -115 -31 -213.5t-88 -170.5t-140.5 -113.5t-188.5 -41.5q-97 0 -164.5 35t-119.5 100v-472h-182zM611 908q-89 0 -156 -41t-123 -115v-502q50 -68 110 -95.5 t133 -27.5q144 0 222.5 103.5t78.5 294.5q0 101 -18 174t-52 119.5t-83.5 68t-111.5 21.5z" />
-<glyph unicode="&#xff;" horiz-adv-x="1048" d="M454 -306q-9 -20 -23 -32.5t-43 -12.5h-135l189 411l-428 977h158q24 0 37 -11.5t19 -26.5l278 -653q9 -23 15.5 -45t12.5 -46l14 46q7 23 16 46l270 652q6 16 20.5 27t32.5 11h145zM478 1320q0 -24 -9.5 -44.5t-25.5 -35.5t-37 -24.5t-45 -9.5q-23 0 -43 9.5t-36 24.5 t-25.5 35.5t-9.5 44.5t9.5 45t25.5 37t36 25.5t43 9.5q24 0 45 -9.5t37 -25.5t25.5 -37t9.5 -45zM845 1320q0 -24 -9 -44.5t-25 -35.5t-37 -24.5t-44 -9.5q-24 0 -45 9.5t-36.5 24.5t-24.5 35.5t-9 44.5t9 45t24.5 37t36.5 25.5t45 9.5t44.5 -9.5t36.5 -25.5t25 -37t9 -45z " />
-<glyph unicode="&#x131;" horiz-adv-x="524" d="M352 1037v-1037h-182v1037h182z" />
-<glyph unicode="&#x141;" horiz-adv-x="1112" d="M435 824l393 201v-132q0 -30 -27 -44l-366 -193v-489h635v-167h-833v567l-192 -97v136q0 27 26 40l166 88v733h198v-643z" />
-<glyph unicode="&#x142;" horiz-adv-x="657" d="M419 1508v-587l182 78v-104q0 -16 -6 -27t-22 -18l-154 -69v-781h-182v714l-182 -78v107q0 30 26 41l156 70v654h182z" />
-<glyph unicode="&#x152;" horiz-adv-x="2244" d="M2137 1467v-161h-704v-488h570v-155h-570v-501h704v-162h-881v246q-86 -123 -216 -191.5t-295 -68.5q-145 0 -265 54.5t-206 153.5t-133 236.5t-47 302.5t47 303t133 237.5t206 155t265 55.5q165 0 295 -69t216 -193v245h881zM1233 733q0 135 -33 243t-93.5 184 t-147.5 116.5t-193 40.5t-193 -40.5t-148 -116.5t-94.5 -184t-33.5 -243t33.5 -243t94.5 -183.5t147.5 -115t193.5 -39.5q106 0 193 39.5t147.5 115t93.5 183.5t33 243z" />
-<glyph unicode="&#x153;" horiz-adv-x="1775" d="M1298 1054q84 0 156.5 -33t125 -95.5t83 -152t30.5 -204.5q0 -42 -8.5 -56.5t-33.5 -14.5h-642q4 -93 27.5 -162.5t63 -115.5t93 -68.5t120.5 -22.5q62 0 107.5 16t78.5 34.5t56 34t41 15.5q22 0 34 -17l52 -67q-34 -41 -78 -71t-95 -49.5t-105 -29t-108 -9.5 q-122 0 -219.5 58.5t-153.5 180.5q-55 -115 -154 -177t-240 -62q-102 0 -186 37t-144 107t-92.5 168t-32.5 221q0 122 32.5 221t93.5 168.5t146.5 107.5t190.5 38q134 0 231 -62t152 -175q51 108 146.5 172.5t231.5 64.5zM547 128q142 0 211.5 103t69.5 287q0 92 -17 165.5 t-52 123.5t-88.5 76.5t-123.5 26.5q-73 0 -126 -26.5t-88.5 -76.5t-53 -123.5t-17.5 -165.5q0 -184 70.5 -287t214.5 -103zM1292 920q-62 0 -111 -21t-84.5 -61t-57 -97.5t-28.5 -129.5h520q0 67 -16 124t-46.5 97.5t-75.5 64t-101 23.5z" />
-<glyph unicode="&#x160;" horiz-adv-x="1085" d="M930 1238q-9 -15 -19.5 -23t-26.5 -8q-17 0 -40.5 17.5t-58.5 38.5t-85 38.5t-120 17.5q-67 0 -118 -18t-85.5 -48.5t-52 -72t-17.5 -89.5q0 -61 30.5 -102t80 -69.5t112.5 -49.5l129 -44q66 -23 129 -50.5t112.5 -70.5t80 -105.5t30.5 -154.5q0 -96 -33 -180.5t-96 -147 t-154.5 -98t-208.5 -35.5q-142 0 -259.5 51.5t-200.5 139.5l58 94q8 11 19.5 19t26.5 8q22 0 49.5 -23t69 -50.5t100 -51t143.5 -23.5q71 0 126.5 19.5t93.5 55t58.5 84.5t20.5 110q0 67 -30 109t-79 71t-112 49l-129 41q-66 21 -129 48.5t-112.5 71.5t-79.5 110t-30 163 q0 78 30 151t87.5 129t142 90t194.5 34q123 0 224 -39t177 -113zM682 1583h-180l-243 215h138q12 0 26.5 -3.5t23.5 -9.5l133 -97l12 -9q2 2 6 4.5l7 4.5l133 97q9 6 23.5 9.5t26.5 3.5h138z" />
-<glyph unicode="&#x161;" horiz-adv-x="888" d="M743 866q-12 -23 -37 -22q-15 0 -35 11t-48 25t-67 26t-92 12q-46 0 -83 -12t-63 -32.5t-40 -47.5t-14 -59q0 -40 23 -66.5t61 -46t86 -34.5l99 -32q51 -17 99 -37.5t86 -51t61 -75t23 -107.5q0 -72 -25.5 -132.5t-76 -105t-123 -70t-167.5 -25.5q-109 0 -197 35t-150 91 l43 69q8 13 19.5 20.5t30.5 7.5q18 0 38.5 -14.5t49.5 -32t70.5 -31.5t104.5 -14q53 0 93 13.5t66.5 37t39.5 54.5t13 66q0 43 -23 71t-61 48t-87 35l-99 31q-51 16 -99.5 37t-86.5 53t-61 78.5t-23 113.5q0 59 24.5 114t71.5 96.5t116 66t157 24.5q102 0 183.5 -32.5 t140.5 -88.5zM155 1467h126q12 0 23.5 -5t17.5 -10l131 -128q11 -9 17 -19q5 5 9 10t9 9l131 128q6 6 18 10.5t23 4.5h122l-229 -270h-170z" />
-<glyph unicode="&#x178;" horiz-adv-x="1288" d="M743 584v-584h-197v584l-538 883h174q27 0 42.5 -13t26.5 -33l336 -570q20 -36 34 -67.5t25 -62.5q11 32 24.5 63.5t34.5 66.5l334 570q9 16 25 31t42 15h176zM541 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45 t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM977 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph unicode="&#x17d;" horiz-adv-x="1277" d="M1200 1467v-73q0 -35 -21 -66l-831 -1166h838v-162h-1098v78q0 31 20 58l831 1170h-812v161h1073zM755 1583h-180l-243 215h138q12 0 26.5 -3.5t23.5 -9.5l133 -97l12 -9q2 2 6 4.5l7 4.5l133 97q9 6 23.5 9.5t26.5 3.5h138z" />
-<glyph unicode="&#x17e;" horiz-adv-x="946" d="M873 959q0 -19 -7 -37t-18 -32l-561 -748h566v-142h-781v76q0 13 6.5 31t18.5 34l565 753h-559v143h770v-78zM184 1467h126q12 0 23.5 -5t17.5 -10l131 -128q11 -9 17 -19q5 5 9 10t9 9l131 128q6 6 18 10.5t23 4.5h122l-229 -270h-170z" />
-<glyph unicode="&#x192;" d="M689 786l-91 -747q-26 -210 -148 -304.5t-341 -94.5v96q0 58 61 58q46 0 87.5 13.5t74 43t55 76.5t30.5 117l91 737l-159 16q-22 2 -32.5 14.5t-10.5 32.5v75h218l22 172q25 203 145 300.5t343 97.5v-100q0 -30 -14 -42t-46 -12q-47 0 -88.5 -13t-74.5 -43t-56 -77.5 t-32 -117.5l-23 -165h330v-133h-341z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="628" d="M627 1197h-122q-22 0 -41 14l-131 129l-18 18l-16 -18l-132 -129q-6 -5 -17.5 -9.5t-23.5 -4.5h-126l228 270h170z" />
-<glyph unicode="&#x2c7;" horiz-adv-x="628" d="M0 1467h126q12 0 23.5 -5t17.5 -10l131 -128q11 -9 17 -19q5 5 9 10t9 9l131 128q6 6 18 10.5t23 4.5h122l-229 -270h-170z" />
-<glyph unicode="&#x2c9;" horiz-adv-x="628" d="M20 1380h588v-119h-588v119z" />
-<glyph unicode="&#x2d8;" horiz-adv-x="628" d="M313 1192q-79 0 -132 22t-86.5 59.5t-47.5 87.5t-14 106h129q0 -34 7 -63t24.5 -49.5t46.5 -32t73 -11.5t73.5 11.5t47 32t24.5 50t7 62.5h129q0 -56 -14.5 -106t-47.5 -87.5t-87 -59.5t-132 -22z" />
-<glyph unicode="&#x2d9;" horiz-adv-x="628" d="M443 1370q0 -27 -10.5 -50t-28.5 -40t-41.5 -27.5t-50.5 -10.5t-49.5 10.5t-40 27.5t-28 40t-10.5 50t10.5 51t28 42t40.5 28t49 10q27 0 50.5 -10t41.5 -28t28.5 -42t10.5 -51z" />
-<glyph unicode="&#x2da;" horiz-adv-x="628" d="M109 1347q0 43 16 77.5t44.5 60t65 39.5t77.5 14q42 0 79.5 -14t66 -39.5t45 -60t16.5 -77.5q0 -42 -16.5 -77t-45 -59.5t-66 -38.5t-79.5 -14q-41 0 -77.5 14t-65 38.5t-44.5 59.5t-16 77zM211 1347q0 -45 27.5 -74t75.5 -29q46 0 74.5 29t28.5 74q0 46 -28.5 74.5 t-74.5 28.5q-48 0 -75.5 -28.5t-27.5 -74.5z" />
-<glyph unicode="&#x2db;" horiz-adv-x="628" d="M462 -216q7 0 11.5 -4t6.5 -9l29 -68q-31 -24 -78.5 -38.5t-99.5 -14.5q-90 0 -142 40.5t-52 107.5q0 32 13 62t35 58t52 52t65 43l94 -13q-20 -11 -41.5 -27t-39 -36t-29 -44t-11.5 -51q0 -39 25.5 -61t68.5 -22q24 0 39 4t25 8.5t17 8.5t12 4z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="628" d="M427 1357q37 0 57 21.5t21 66.5h110q0 -48 -12.5 -88.5t-36.5 -69.5t-57.5 -44.5t-74.5 -15.5q-36 0 -67 14.5t-59 32.5l-52 32q-25 15 -48 15q-74 0 -76 -90h-114q0 49 13.5 89.5t38 69.5t58.5 45t74 16q36 0 67 -15t59 -32l51 -32q24 -15 48 -15z" />
-<glyph unicode="&#x2dd;" horiz-adv-x="628" d="M439 1484l-203 -264q-12 -16 -27 -22.5t-37 -6.5h-76l142 248q13 24 30 34.5t50 10.5h121zM761 1484l-249 -264q-14 -15 -28 -22t-34 -7h-89l185 248q16 23 31.5 34t49.5 11h134z" />
-<glyph unicode="&#x3c0;" horiz-adv-x="1265" d="M1228 1037v-73q0 -24 -15.5 -42.5t-45.5 -18.5h-139v-903h-182v903h-407v-653q0 -122 -62 -192t-194 -70q-35 0 -68.5 6t-65.5 23l7 77q2 9 6.5 15t12.5 8.5t21.5 3t33.5 0.5q68 0 97 31.5t29 99.5v651h-194v66q0 11 5 23.5t13.5 22t22 16t30.5 6.5h1095z" />
-<glyph unicode="&#x2000;" horiz-adv-x="940" />
-<glyph unicode="&#x2001;" horiz-adv-x="1881" />
-<glyph unicode="&#x2002;" horiz-adv-x="940" />
-<glyph unicode="&#x2003;" horiz-adv-x="1881" />
-<glyph unicode="&#x2004;" horiz-adv-x="626" />
-<glyph unicode="&#x2005;" horiz-adv-x="470" />
-<glyph unicode="&#x2006;" horiz-adv-x="313" />
-<glyph unicode="&#x2007;" horiz-adv-x="313" />
-<glyph unicode="&#x2008;" horiz-adv-x="234" />
-<glyph unicode="&#x2009;" horiz-adv-x="375" />
-<glyph unicode="&#x200a;" horiz-adv-x="104" />
-<glyph unicode="&#x2010;" horiz-adv-x="710" d="M102 691h506v-154h-506v154z" />
-<glyph unicode="&#x2011;" horiz-adv-x="710" d="M102 691h506v-154h-506v154z" />
-<glyph unicode="&#x2012;" horiz-adv-x="710" d="M102 691h506v-154h-506v154z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1138" d="M160 671h819v-133h-819v133z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1681" d="M160 671h1362v-133h-1362v133z" />
-<glyph unicode="&#x2018;" horiz-adv-x="434" d="M117 1036q-30 49 -44 99t-14 99q0 92 46 176.5t127 155.5l57 -35q8 -5 10.5 -11.5t2.5 -12.5q0 -14 -10 -24q-16 -20 -31.5 -43t-28 -48t-19.5 -52.5t-7 -58.5q0 -33 9.5 -67.5t33.5 -73.5q7 -11 7 -24q0 -25 -28 -35z" />
-<glyph unicode="&#x2019;" horiz-adv-x="434" d="M278 1544q30 -49 43 -98t13 -98q0 -93 -45.5 -178t-126.5 -155l-57 35q-8 5 -10.5 11t-2.5 12q0 14 10 25q16 19 32 42t28 48t19 53t7 58q0 33 -9.5 68t-33.5 74q-7 11 -7 22q0 25 28 36z" />
-<glyph unicode="&#x201a;" horiz-adv-x="434" d="M278 247q30 -49 43 -98.5t13 -98.5q0 -93 -45.5 -177.5t-126.5 -155.5l-57 35q-8 5 -10.5 11.5t-2.5 12.5q0 14 10 24q16 19 32 42.5t28 48.5t19 52.5t7 58.5q0 33 -9.5 67.5t-33.5 73.5q-7 11 -7 23q0 25 28 36z" />
-<glyph unicode="&#x201c;" horiz-adv-x="745" d="M117 1036q-30 49 -44 99t-14 99q0 92 46 176.5t127 155.5l57 -35q8 -5 10.5 -11.5t2.5 -12.5q0 -14 -10 -24q-16 -20 -31.5 -43t-28 -48t-19.5 -52.5t-7 -58.5q0 -33 9.5 -67.5t33.5 -73.5q7 -11 7 -24q0 -25 -28 -35zM428 1036q-30 49 -43.5 99t-13.5 99 q0 92 45.5 176.5t127.5 155.5l56 -35q8 -5 10.5 -11.5t2.5 -12.5q0 -14 -10 -24q-16 -20 -31.5 -43t-28 -48t-19.5 -52.5t-7 -58.5q0 -33 10 -67.5t33 -73.5q7 -11 7 -24q0 -25 -27 -35z" />
-<glyph unicode="&#x201d;" horiz-adv-x="745" d="M278 1544q30 -49 43 -98t13 -98q0 -93 -45.5 -178t-126.5 -155l-57 35q-8 5 -10.5 11t-2.5 12q0 14 10 25q16 19 32 42t28 48t19 53t7 58q0 33 -9.5 68t-33.5 74q-7 11 -7 22q0 25 28 36zM589 1544q30 -49 43 -98t13 -98q0 -93 -45.5 -178t-126.5 -155l-56 35 q-8 5 -11 11t-3 12q0 14 11 25q16 19 31.5 42t27.5 48t19.5 53t7.5 58q0 33 -10 68t-33 74q-7 11 -7 22q0 25 27 36z" />
-<glyph unicode="&#x201e;" horiz-adv-x="745" d="M278 247q30 -49 43 -98.5t13 -98.5q0 -93 -45.5 -177.5t-126.5 -155.5l-57 35q-8 5 -10.5 11.5t-2.5 12.5q0 14 10 24q16 19 32 42.5t28 48.5t19 52.5t7 58.5q0 33 -9.5 67.5t-33.5 73.5q-7 11 -7 23q0 25 28 36zM589 247q30 -49 43 -98.5t13 -98.5q0 -93 -45.5 -177.5 t-126.5 -155.5l-56 35q-8 5 -11 11.5t-3 12.5q0 14 11 24q16 19 31.5 42.5t27.5 48.5t19.5 52.5t7.5 58.5q0 33 -10 67.5t-33 73.5q-7 11 -7 23q0 25 27 36z" />
-<glyph unicode="&#x2020;" d="M121 940q0 32 21 56.5t65 24.5q35 0 74 -5l79 -9q41 -5 82 -11.5t81 -9.5l-24 500q41 24 95 23q56 0 95 -23l-23 -500q80 7 162 20.5t153 14.5q45 0 65.5 -24.5t20.5 -56.5v-61h-401v-426l23 -796q-39 -24 -95 -24q-54 0 -95 24l24 796v426h-402v61z" />
-<glyph unicode="&#x2021;" d="M121 940q0 32 21 56.5t65 24.5q35 0 74 -5l79 -9q41 -5 82 -11.5t81 -9.5l-24 500q41 24 95 23q56 0 95 -23l-23 -500q80 7 162 20.5t153 14.5q45 0 65.5 -24.5t20.5 -56.5v-61h-401v-615h401v-61q0 -32 -20.5 -56.5t-65.5 -24.5q-71 1 -153.5 13.5t-161.5 20.5l23 -499 q-39 -24 -95 -24q-54 0 -95 24l24 499q-80 -7 -162.5 -20t-153.5 -14q-44 0 -65 24.5t-21 56.5v61h402v615h-402v61z" />
-<glyph unicode="&#x2022;" d="M213 609q0 79 30 148.5t81.5 121.5t120.5 82t147 30q79 0 148.5 -30t121 -82t82 -121.5t30.5 -148.5t-30.5 -148t-82 -120t-121 -81.5t-148.5 -30.5q-78 0 -147 30.5t-120.5 81.5t-81.5 120t-30 148z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1488" d="M90 113q0 27 10 50t26.5 40.5t40 28t50.5 10.5t50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50.5 9.5t-40 27t-26.5 40.5t-10 51zM1144 113q0 27 9.5 50t26.5 40.5t40.5 28t50.5 10.5t50.5 -10.5t40.5 -28t27 -41t10 -49.5 q0 -28 -10 -51t-27 -40.5t-41 -27t-50 -9.5q-27 0 -50.5 9.5t-40.5 27t-26.5 40.5t-9.5 51zM616 113q0 27 10 50t27 40.5t40.5 28t49.5 10.5q27 0 50.5 -10.5t41 -28t27 -41t9.5 -49.5q0 -28 -9.5 -51t-27 -40.5t-41 -27t-50.5 -9.5t-50 9.5t-40 27t-27 40.5t-10 51z" />
-<glyph unicode="&#x202f;" horiz-adv-x="375" />
-<glyph unicode="&#x2030;" horiz-adv-x="2361" d="M724 1113q0 -86 -26.5 -154t-71 -114.5t-104 -71t-124.5 -24.5q-70 0 -128.5 24.5t-102.5 71t-68.5 114.5t-24.5 154q0 88 24.5 156.5t68.5 116t103 72t128 24.5t129 -24.5t103.5 -72t68.5 -116t25 -156.5zM582 1113q0 68 -14.5 115t-39.5 77t-58.5 43.5t-71.5 13.5 t-71 -13.5t-57.5 -43.5t-38.5 -77t-14 -115q0 -67 14 -113.5t38.5 -75.5t57.5 -42t71 -13t71.5 13t58.5 42t39.5 75.5t14.5 113.5zM1242 1437q9 13 23.5 21.5t39.5 8.5h131l-1072 -1437q-10 -13 -24.5 -21.5t-34.5 -8.5h-135zM1535 346q0 -86 -26.5 -153.5t-71 -114 t-103.5 -71t-124 -24.5q-70 0 -128.5 24.5t-102.5 71t-68.5 114t-24.5 153.5q0 88 24.5 157t68.5 116.5t103 72t128 24.5t128.5 -24.5t103.5 -72t68.5 -116.5t24.5 -157zM1394 346q0 68 -14.5 115.5t-39.5 77t-58.5 43t-71.5 13.5t-71 -13.5t-57.5 -43t-38.5 -77t-14 -115.5 q0 -67 14 -113t38.5 -75t57.5 -42t71 -13t71.5 13t58.5 42t39.5 75t14.5 113zM2287 346q0 -86 -27 -153.5t-71.5 -114t-104 -71t-123.5 -24.5q-70 0 -128.5 24.5t-102.5 71t-69 114t-25 153.5q0 88 25 157t69 116.5t102.5 72t128.5 24.5q69 0 128.5 -24.5t103 -72t69 -116.5 t25.5 -157zM2144 346q0 68 -14 115.5t-39.5 77t-58.5 43t-71 13.5t-71 -13.5t-58 -43t-38.5 -77t-13.5 -115.5q0 -67 13.5 -113t38.5 -75t58 -42t71 -13t71 13t58.5 42t39.5 75t14 113z" />
-<glyph unicode="&#x2039;" horiz-adv-x="647" d="M141 530v24l255 398l60 -28q14 -7 21 -18.5t7 -24.5q0 -17 -10 -34l-163 -267q-14 -25 -28 -38q15 -14 28 -37l163 -267q5 -8 7.5 -17.5t2.5 -17.5q0 -29 -28 -42l-60 -29z" />
-<glyph unicode="&#x203a;" horiz-adv-x="647" d="M497 554v-24l-255 -398l-60 29q-29 13 -28 42q0 17 10 35l163 267q13 25 27 37q-12 11 -27 38l-163 267q-10 17 -10 35q0 29 28 42l60 28z" />
-<glyph unicode="&#x2044;" horiz-adv-x="628" d="M-20 54q-19 -32 -42 -43t-53 -11h-78l838 1405q18 30 42 46t56 16h79z" />
-<glyph unicode="&#x205f;" horiz-adv-x="470" />
-<glyph unicode="&#x20ac;" d="M35 921h150q20 129 69 232.5t121 177t166.5 112.5t204.5 39q137 0 234.5 -51.5t169.5 -141.5l-63 -69q-8 -9 -16 -16t-22 -7q-17 0 -36.5 19.5t-51 43t-81.5 43t-126 19.5q-150 0 -248.5 -102.5t-131.5 -298.5h560v-57q0 -18 -14 -33t-38 -15h-521q-1 -20 -1.5 -40.5 t-0.5 -42.5v-32q0 -15 1 -30h479v-58q0 -17 -14.5 -32t-39.5 -15h-415q29 -211 127 -316.5t247 -105.5q55 0 97.5 11t73 27.5t52.5 35.5t38.5 35t29.5 27t25 11q8 0 14 -3.5t15 -11.5l76 -71q-72 -104 -178 -162t-253 -58q-119 0 -214 40.5t-164.5 115.5t-114 183t-61.5 242 h-145v105h137q-1 15 -1 30v32q0 20 0.5 41.5t1.5 41.5h-138v105z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1474" d="M986 1136l12 -28q6 -13 10 -27q5 14 9 27t12 28l173 310q9 13 17.5 17t24.5 4h109v-606h-113v374l9 77l-187 -344q-13 -29 -45 -29h-19q-32 0 -44 29l-188 341l8 -74v-374h-112v606h108q17 0 24.5 -4t18.5 -17zM563 1467v-107h-184v-499h-129v499h-184v107h497z" />
-<glyph unicode="&#x2126;" horiz-adv-x="1529" d="M856 0v449q83 15 152.5 48t120.5 86t79 126t28 169q0 110 -35.5 193t-98.5 139t-149.5 84.5t-188.5 28.5t-189 -28.5t-150 -84.5t-98 -139.5t-35 -192.5q0 -95 28 -168.5t78.5 -126.5t120.5 -86t153 -48v-449h-516q-31 0 -49.5 18t-18.5 47v102h429v178q-98 24 -177.5 73 t-134.5 118.5t-85.5 158.5t-30.5 193q0 131 50.5 240.5t140.5 188.5t213.5 123t270.5 44q146 0 270 -44t213.5 -123t140.5 -188.5t51 -240.5q0 -103 -30.5 -192.5t-86 -159t-135 -118.5t-177.5 -73v-178h430v-102q0 -29 -18.5 -47t-49.5 -18h-516z" />
-<glyph unicode="&#x2202;" d="M356 1369q40 28 77.5 49.5t77.5 35.5t84 21.5t96 7.5q92 0 168 -38t129 -109.5t82.5 -175t29.5 -234.5q0 -207 -37.5 -379.5t-113 -297t-188.5 -193.5t-264 -69q-88 0 -162.5 29t-127.5 84t-83 132.5t-30 175.5q0 118 39 221t108.5 179t166 120t210.5 44 q106 0 185.5 -45.5t128.5 -133.5q2 38 2.5 72t0.5 61q0 203 -70.5 306.5t-197.5 103.5q-43 0 -79.5 -10t-65.5 -23l-50 -23q-22 -10 -35 -10q-11 0 -20.5 6t-21.5 24zM518 130q68 0 129 28t110 85.5t85.5 144.5t56.5 205q-10 45 -29.5 87.5t-51.5 75t-76.5 52t-103.5 19.5 q-86 0 -152.5 -31.5t-111.5 -87.5t-68 -132t-23 -165q0 -67 16 -119t47 -88t74.5 -55t97.5 -19z" />
-<glyph unicode="&#x2206;" horiz-adv-x="1425" d="M623 1467h179l609 -1467h-1397zM280 160h865l-393 982l-19.5 53.5t-19.5 64.5q-9 -35 -19 -65.5t-19 -53.5z" />
-<glyph unicode="&#x220f;" horiz-adv-x="1400" d="M1336 1467v-156h-191v-1662h-189v1662h-513v-1662h-188v1662h-192v156h1273z" />
-<glyph unicode="&#x2211;" horiz-adv-x="1400" d="M86 1467h1228v-156h-945l586 -726v-54l-586 -726h945v-156h-1228v66q0 14 4.5 29t14.5 28l645 788l-645 783q-11 13 -15 28t-4 30v66z" />
-<glyph unicode="&#x2212;" d="M152 757h880v-139h-880v139z" />
-<glyph unicode="&#x221a;" horiz-adv-x="1173" d="M293 679h-175q-29 0 -50 17t-21 59v58h343q23 0 37 -11t19 -27l154 -421q12 -33 18.5 -67.5t10.5 -69.5l10 56q6 29 15 59l443 1383q5 16 19 27t35 11h118l-568 -1753h-152z" />
-<glyph unicode="&#x221e;" horiz-adv-x="1400" d="M1026 260q-57 0 -103.5 17.5t-86 47.5t-73 69t-62.5 82q-30 -43 -63 -82t-72 -69t-86 -47.5t-103 -17.5q-63 0 -121 24.5t-101.5 70t-69.5 109t-26 141.5t26 141.5t69.5 108.5t101 70t121.5 25q56 0 103 -17.5t86 -47.5t72.5 -69t62.5 -82q29 43 62.5 82t73 69t86 47.5 t103.5 17.5q63 0 120.5 -25t101.5 -70t69.5 -108.5t25.5 -141.5t-25.5 -141.5t-69.5 -109t-101.5 -70t-120.5 -24.5zM384 410q37 0 68.5 15t60 42.5t54 62.5t50.5 75l-51 75.5t-53.5 62t-60 42.5t-68.5 16t-69 -12.5t-57 -36.5t-39 -61t-14 -86t14 -86t39 -61t57 -36t69 -12 zM1019 410q37 0 69 12t56 36t38.5 61t14.5 86t-14.5 86t-38.5 61t-56 36.5t-69 12.5t-68.5 -16t-60.5 -42.5t-54.5 -62t-51.5 -75.5q26 -40 51.5 -75t54.5 -62.5t60.5 -42.5t68.5 -15z" />
-<glyph unicode="&#x222b;" horiz-adv-x="819" d="M383 1117q22 178 114 272.5t241 94.5q39 0 74.5 -7.5t68.5 -23.5l-9 -88q-2 -9 -6 -16.5t-13 -12.5t-24.5 -7.5t-40.5 -2.5q-102 0 -159 -56t-72 -176l-133 -1055q-13 -104 -46.5 -179t-84 -123.5t-116.5 -71.5t-143 -23q-36 0 -74 6.5t-69 22.5l11 78q3 12 7.5 19 t14.5 10t26.5 3.5t42.5 0.5q59 0 103.5 14t76 44t50.5 77.5t27 115.5z" />
-<glyph unicode="&#x2248;" d="M806 879q30 0 57.5 7t51 17.5t41 23t26.5 23.5l26 -116q-36 -48 -93.5 -72t-119.5 -24q-53 0 -106 17t-105 37.5t-100.5 37.5t-94.5 17q-31 0 -59.5 -6.5t-52 -17.5t-41 -24t-26.5 -25l-30 112q36 52 94 77t125 25q54 0 107.5 -17t105 -38t100 -37.5t94.5 -16.5zM806 532 q30 0 57.5 7t51 17.5t41 23t26.5 23.5l26 -116q-36 -49 -93.5 -72.5t-119.5 -23.5q-53 0 -106 17t-105 38t-100.5 38t-94.5 17q-31 0 -59.5 -7.5t-52 -18t-41 -23.5t-26.5 -25l-30 112q36 52 94 77t125 25q54 0 107.5 -17t105 -37.5t100 -37.5t94.5 -17z" />
-<glyph unicode="&#x2260;" d="M154 931h500l117 247h132l-117 -247h247v-138h-311l-97 -205h408v-138h-473l-122 -259h-132l122 259h-274v138h339l97 205h-436v138z" />
-<glyph unicode="&#x2264;" d="M152 810l792 386v-125q0 -16 -9 -30t-36 -26l-452 -212q-47 -18 -99 -31q27 -5 52.5 -12.5t46.5 -18.5l452 -214q26 -12 35.5 -26t9.5 -30v-125l-792 388v76zM152 220h792v-138h-792v138z" />
-<glyph unicode="&#x2265;" d="M1036 810v-76l-792 -388v125q0 16 9.5 30t35.5 26l451 214q42 19 100 31q-28 6 -53 13.5t-47 17.5l-451 212q-27 11 -36 25.5t-9 30.5v125zM1036 82h-792v138h792v-138z" />
-<glyph unicode="&#x25ca;" d="M131 718l399 841h127l400 -841l-400 -840h-127zM283 718l282 -595q8 -24 16 -43.5t13 -37.5q5 18 12 38l17 43l286 595l-286 596q-18 44 -29 80q-5 -18 -13 -38l-16 -42z" />
-<glyph unicode="&#x2669;" horiz-adv-x="0" d="M-2 1508h4v-1859h-4v1859z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1035" d="M0 1035h1035v-1035h-1035v1035z" />
-<glyph unicode="&#xf6c3;" horiz-adv-x="628" d="M369 -82q24 0 29 -10.5t5 -23.5q0 -10 -2.5 -25.5t-10 -41t-20.5 -62.5l-32 -90q-10 -23 -25 -30t-41 -7h-63l50 290h110z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1167" d="M190 0v882l-114 13q-22 5 -35.5 16t-13.5 31v75h163v57q0 95 30 174.5t89.5 137t148 89t206.5 31.5q39 0 79 -5t70 -15l-6 -95q-2 -13 -12.5 -17t-29.5 -4q-11 0 -23.5 0.5t-27.5 0.5q-181 0 -263.5 -75t-82.5 -227v-52h626v-1017h-182v885h-438v-885h-184z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1216" d="M190 0v882l-114 13q-22 5 -35.5 16t-13.5 31v75h163v55q0 86 27 163.5t80 134.5t133 91t186 34q85 0 163.5 -6.5t152.5 -6.5h102v-1482h-182v1354q-55 2 -111 5t-97 3q-133 0 -204.5 -76.5t-71.5 -213.5v-55h270v-132h-264v-885h-184z" />
-<glyph horiz-adv-x="628" d="M161 1825q16 0 28 -1.5t21.5 -5t18 -10.5t18.5 -17l216 -208h-142q-22 0 -34.5 3.5t-29.5 16.5l-302 222h206z" />
-<glyph horiz-adv-x="628" d="M209 1706q0 -23 -9.5 -42.5t-24.5 -35t-36 -24.5t-45 -9q-22 0 -41.5 9t-35 24.5t-24.5 35t-9 42.5q0 24 9 45t24.5 36t35.5 24.5t41 9.5q24 0 45 -9.5t36 -24.5t24.5 -36t9.5 -45zM645 1706q0 -23 -9 -42.5t-24.5 -35t-36 -24.5t-43.5 -9q-24 0 -44 9t-35.5 24.5t-24 35 t-8.5 42.5q0 24 8.5 45t24 36t36 24.5t43.5 9.5t43.5 -9.5t36 -24.5t24.5 -36t9 -45z" />
-<glyph horiz-adv-x="628" d="M70 1721h489v-108h-489v108z" />
-<glyph horiz-adv-x="628" d="M674 1825l-301 -221q-17 -12 -30.5 -16.5t-35.5 -4.5h-141l216 208q10 10 18.5 17t17.5 10.5t21 5t29 1.5h206z" />
-<glyph horiz-adv-x="628" d="M647 1583h-138q-12 0 -26.5 3.5t-23.5 9.5l-133 98q-8 4 -13 8q-8 -6 -12 -8l-133 -98q-9 -6 -23.5 -9.5t-26.5 -3.5h-138l243 215h180z" />
-<glyph horiz-adv-x="628" d="M403 1583h-180l-243 215h138q12 0 26.5 -3.5t23.5 -9.5l133 -97l12 -9q2 2 6 4.5l7 4.5l133 97q9 6 23.5 9.5t26.5 3.5h138z" />
-<glyph horiz-adv-x="628" d="M314 1564q-140 0 -212.5 58.5t-72.5 175.5h117q0 -60 40 -91.5t128 -31.5t128 31.5t40 91.5h118q0 -108 -73.5 -171t-212.5 -63z" />
-<glyph horiz-adv-x="628" d="M438 1729q0 -25 -10 -47.5t-27.5 -39.5t-40.5 -27t-49 -10q-25 0 -47 10t-39 27t-27 39.5t-10 47.5q0 26 10 48t27 39.5t39.5 27.5t46.5 10q26 0 49 -10t40.5 -27.5t27.5 -39.5t10 -48z" />
-<glyph horiz-adv-x="628" d="M121 1699q0 40 16 73.5t42 57.5t60.5 37.5t73.5 13.5q40 0 75.5 -13.5t62.5 -37.5t42.5 -57.5t15.5 -73.5q0 -39 -15.5 -72t-42.5 -56.5t-62.5 -36.5t-75.5 -13q-39 0 -73.5 13t-60.5 36.5t-42 56.5t-16 72zM212 1699q0 -44 27.5 -73.5t75.5 -29.5q46 0 74.5 29.5 t28.5 73.5q0 46 -28.5 74.5t-74.5 28.5q-48 0 -75.5 -28.5t-27.5 -74.5z" />
-<glyph horiz-adv-x="628" d="M437 1703q36 0 55 21t20 59h100q0 -44 -11 -81t-32.5 -64t-53.5 -42t-73 -15q-36 0 -68.5 13.5t-62.5 29.5l-57 29q-27 13 -51 13q-35 0 -54 -22t-20 -59h-102q0 44 11.5 81.5t33.5 64t54.5 42t72.5 15.5q36 0 68.5 -13.5t62.5 -29.5l56 -29q26 -13 51 -13z" />
-<glyph horiz-adv-x="628" d="M434 1814l-204 -203q-14 -14 -28 -21t-34 -7h-88l145 185q15 20 35.5 33t53.5 13h120zM780 1814l-249 -203q-17 -13 -32 -20.5t-36 -7.5h-98l183 185q20 19 40 32.5t53 13.5h139z" />
-<glyph horiz-adv-x="628" d="M394 1510q23 0 28.5 -10.5t5.5 -22.5q0 -10 -3.5 -27t-13 -47.5t-25.5 -76.5l-42 -114q-10 -23 -25 -29.5t-40 -6.5h-64l58 334h121z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/theme/neo-gnu/fonts/lato-regular-webfont.ttf b/theme/neo-gnu/fonts/lato-regular-webfont.ttf
deleted file mode 100644 (file)
index f77cd55..0000000
Binary files a/theme/neo-gnu/fonts/lato-regular-webfont.ttf and /dev/null differ
diff --git a/theme/neo-gnu/fonts/lato-regular-webfont.woff b/theme/neo-gnu/fonts/lato-regular-webfont.woff
deleted file mode 100644 (file)
index 8995dc4..0000000
Binary files a/theme/neo-gnu/fonts/lato-regular-webfont.woff and /dev/null differ
diff --git a/theme/neo-gnu/fonts/stylesheet.css b/theme/neo-gnu/fonts/stylesheet.css
deleted file mode 100644 (file)
index f913fc6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 14, 2011 */
-
-@font-face {
-    font-family: 'LatoBold';
-    src: url('lato-bold-webfont.eot');
-    src: local('☺'), url('lato-bold-webfont.woff') format('woff'), url('lato-bold-webfont.ttf') format('truetype'), url('lato-bold-webfont.svg#webfontRFDbyVDk') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'LatoItalic';
-    src: url('lato-italic-webfont.eot');
-    src: local('☺'), url('lato-italic-webfont.woff') format('woff'), url('lato-italic-webfont.ttf') format('truetype'), url('lato-italic-webfont.svg#webfont7qSu1Vfu') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'LatoRegular';
-    src: url('lato-regular-webfont.eot');
-    src: local('☺'), url('lato-regular-webfont.woff') format('woff'), url('lato-regular-webfont.ttf') format('truetype'), url('lato-regular-webfont.svg#webfontCjmEHx3G') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
index 1d1c5c639faec38a279cc8c061351b8bc9d7a852..bdaea98e52a7f8c7fc77d314b429cdc99b3f5b52 100644 (file)
   font-style: normal;
 }
 
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/Lato-Regular.eot?') format('eot'), url('../fonts/Lato-Regular.woff') format('woff'), url('../fonts/Lato-Regular.ttf') format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/Lato-Bold.eot?') format('eot'), url('../fonts/Lato-Bold.woff') format('woff'), url('../fonts/Lato-Bold.ttf') format('truetype');
-    font-weight: bold;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Lato';
-    src: url('../fonts/Lato-Italic.eot?') format('eot'), url('../fonts/Lato-Italic.woff') format('woff'), url('../fonts/Lato-Italic.ttf') format('truetype');
-    font-weight: normal;
-    font-style: italic;
-}
-
 @media screen, projection, tv {
 
 /* general styles and layout */
@@ -70,11 +49,11 @@ html, body {
 body {
     background-color: #E9EAED;
     color: #222;
-    font-family: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif;
+    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 
 input, textarea, select, option {
-    font-family: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif;
+    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 
 a {color: #006c9b;}
@@ -107,13 +86,12 @@ h6 {font-size: 1em;}
 #site_nav_object li a:hover,
 #showstream .entry-metadata .repeat,
 body#outbox #core ul.messages .notice:before,
-.form_user_subscribe input[type="submit"],
 #header:before,
 address {
     background-image: url("../icons-hires.png?v=2");
     background-size: 150px 2786px;
     background-repeat:no-repeat;
-    }
+}
 
 address {
     background-position: -10px -600px;
@@ -127,19 +105,21 @@ address {
     width: 89px;
     z-index: 1001;
     background-color:#0084B4;
-    }
+}
+
 address:hover {
     background-position: -10px -635px;
-    }
+}
+
 address a {
     height: 34px;
     width: 89px;
     display:block;
-    }
+}
 
 .logo {
     display: none;
-    }
+}
 
 #header {
     background-color: #fff;
@@ -161,10 +141,6 @@ address a {
     min-height:calc(100vh - 46px);
 }
 
-#content_inner {
-    width:544px;
-    overflow-x:hidden;
-    }
 
 #aside_primary_wrapper {
     background-color: transparent;
@@ -283,7 +259,7 @@ address a {
     width: 20px;
     z-index: 2;
     background-position: 0px -293px;
-    }
+}
 
 /* hide site notice after 5 s */
 #site_notice {
@@ -322,6 +298,7 @@ address a {
         overflow:hidden;
     }
 }
+
 @-webkit-keyframes hideSiteNotice {
     to {
         bottom:-1000px;
@@ -367,6 +344,10 @@ address a {
     padding: 12px 40px 40px 0;
 }
 
+#content_inner {
+    width: 542px; 
+}
+
 /* faq */
 body#doc #content_inner {
     background-color:#fff;
@@ -437,12 +418,21 @@ body#doc #content_inner p.faq-credits {
     width: 542px;
 }
 
+.input_form .form_settings li input {
+    margin: 0 0 5px 5px;
+}
+
+.input_form .form_settings li textarea {
+    margin: 0 0 5px 5px;
+}
+
 .input_form fieldset fieldset label {
-    background: #f7f7f7;
+    left: 10px;
+    background: #fff;
 }
 
 .input_forms > label {
-    margin: 4px 1ex;
+    margin: 10px 1ex;
 }
 
 #input_form_nav {
@@ -463,6 +453,7 @@ body#doc #content_inner p.faq-credits {
     padding: 5px 10px;
     cursor: pointer;
     text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+    margin: 5px;
 }
 
 #input_form_nav li.current a {
@@ -495,6 +486,10 @@ body#doc #content_inner p.faq-credits {
     text-decoration: none;
 }
 
+#input_form_event .form_settings .form_data li {
+    width: 100% !important;
+}
+
 .form_notice .error, .form_notice .success, .form_notice .notice-status {
     background-color: #33bcef;
     border: 0 none;
@@ -538,7 +533,6 @@ body #aside_primary .account_profile_block .user_profile_tags {
     border-style: solid;
     border-width: 1px;
     padding: 12px 12px 0;
-    width: 518px;
     padding:20px;
     margin-bottom:20px;
 }
@@ -577,7 +571,7 @@ ul.profile_list li {
     content:"@";
 }
 
-#groupdirectory    .profile_list .h-card .p-nickname:before {
+#groupdirectory .profile_list .h-card .p-nickname:before {
     content:"!";
 }
 
@@ -587,6 +581,7 @@ ul.profile_list li {
 }
 
 .profile_list .h-card .u-photo {
+    margin-left: 10px;
     margin-right: 10px;
 }
 
@@ -687,115 +682,6 @@ ul.profile_list li {
     margin-top: 0;
 }
 
-#aside_primary .account_profile_block .entity_actions {
-    opacity:1;
-}
-
-#aside_primary .account_profile_block .entity_actions li {
-    margin-bottom:3px;
-}
-
-#aside_primary .account_profile_block .entity_actions input[type="submit"],
-#aside_primary .account_profile_block .entity_actions p {
-    width:114px;
-    text-align:center;
-}
-
-#aside_primary .account_profile_block .entity_actions input[type="submit"],
-#aside_primary .account_profile_block .entity_actions p,
-.form_user_subscribe input[type="submit"],
-.form_user_unsubscribe input[type="submit"],
-.form_user_block input[type="submit"] {
-    background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(221,221,221,1) 100%);
-    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(221,221,221,1)));
-    background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%);
-    background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%);
-    background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%);
-    background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%);
-    background-repeat: repeat-x;
-    border: 1px solid #cccccc;
-    border-radius: 4px;
-    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-    color: rgba(0,0,0,0.8);
-    cursor: pointer;
-    display: inline-block;
-    font-family: "Helvetica Neue",Arial,sans-serif;
-    font-size: 13px;
-    font-weight: bold;
-    line-height: 18px;
-    margin: 0;
-    padding: 0;
-    position: relative;
-    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-    padding:5px 10px;
-    margin-bottom:4px;
-    box-sizing: border-box;
-    margin-left:-4px;
-    text-align:center;
-}
-
-#aside_primary .account_profile_block .entity_actions input[type="submit"]:hover,
-#aside_primary .account_profile_block .entity_actions p:hover,
-.form_user_subscribe input[type="submit"]:hover {
-    background-color: #D8D8D8;
-    background: -moz-linear-gradient(top, rgba(248,248,248,1) 0%, rgba(216,216,216,1) 100%);
-    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(248,248,248,1)), color-stop(100%,rgba(216,216,216,1)));
-    background: -webkit-linear-gradient(top, rgba(248,248,248,1) 0%,rgba(216,216,216,1) 100%);
-    background: -o-linear-gradient(top, rgba(248,248,248,1) 0%,rgba(216,216,216,1) 100%);
-    background: -ms-linear-gradient(top, rgba(248,248,248,1) 0%,rgba(216,216,216,1) 100%);
-    background: linear-gradient(to bottom, rgba(248,248,248,1) 0%,rgba(216,216,216,1) 100%);
-    border-color: #BBBBBB;
-    text-decoration: none;
-}
-
-.form_user_subscribe input[type="submit"] {
-    background: url("../icons-hires.png?v=1") no-repeat scroll 2px -219px / 150px 2786px, linear-gradient(to bottom, rgba(255, 255, 255, 1) 0%, rgba(221, 221, 221, 1) 100%) repeat scroll 0 0 rgba(0, 0, 0, 0) !important;
-    padding: 5px 0 5px 30px !important;
-    padding:5px 0 5px 30px !important;
-}
-
-.form_user_subscribe input[type="submit"]:hover {
-    background: url("../icons-hires.png?v=1") 2px -219px / 150px 2786px no-repeat, linear-gradient(to bottom, rgba(248,248,248,1) 0%,rgba(216,216,216,1) 100%) !important;
-    padding:5px 0 5px 30px !important;
-}
-
-.form_user_unsubscribe input[type="submit"] {
-    background-color: #019AD2 !important;
-    background: -moz-linear-gradient(top, rgba(51,188,239,1) 0%, rgba(1,154,210,1) 100%) !important;
-    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(51,188,239,1)), color-stop(100%,rgba(1,154,210,1))) !important;
-    background: -webkit-linear-gradient(top, rgba(51,188,239,1) 0%,rgba(1,154,210,1) 100%) !important;
-    background: -o-linear-gradient(top, rgba(51,188,239,1) 0%,rgba(1,154,210,1) 100%) !important;
-    background: -ms-linear-gradient(top, rgba(51,188,239,1) 0%,rgba(1,154,210,1) 100%) !important;
-    background: linear-gradient(to bottom, rgba(51,188,239,1) 0%,rgba(1,154,210,1) 100%) !important;
-    background-repeat: repeat-x;
-    border-color: #057ED0 !important;
-    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset !important;
-    color: #FFFFFF !important;
-    text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25) !important;
-}
-
-.form_user_unsubscribe input[type="submit"]:hover,
-.form_user_block input[type="submit"]:hover {
-    background-color: #c43c35 !important;
-    background: -moz-linear-gradient(top, rgba(238,95,91,1) 0%, rgba(196,60,53,1) 100%) !important;
-    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(238,95,91,1)), color-stop(100%,rgba(196,60,53,1))) !important;
-    background: -webkit-linear-gradient(top, rgba(238,95,91,1) 0%,rgba(196,60,53,1) 100%) !important;
-    background: -o-linear-gradient(top, rgba(238,95,91,1) 0%,rgba(196,60,53,1) 100%) !important;
-    background: -ms-linear-gradient(top, rgba(238,95,91,1) 0%,rgba(196,60,53,1) 100%) !important;
-    background: linear-gradient(to bottom, rgba(238,95,91,1) 0%,rgba(196,60,53,1) 100%) !important;
-    background-repeat: repeat-x;
-    border-color: #a93730 #a93730 #952f2a !important;
-    color:#ffffff !important;
-    text-shadow: none !important;
-}
-
-/*  smaller button in userdirectory */
-#userdirectory .form_user_subscribe input[type="submit"],
-#userdirectory .form_user_unsubscribe input[type="submit"] {
-    font-size:11px;
-    width:110px;
-}
-
 .form_notice_placeholder .placeholder,
 .form_notice textarea ,
 .input_form .form_settings li input,
@@ -806,7 +692,7 @@ ul.profile_list li {
 }
 
 .input_form .form_settings .submit {
-    font-size: 1.1em;
+    line-height: 16px;
 }
 
 /* site nav local views */
@@ -1056,6 +942,7 @@ background:none;
 .threaded-replies .placeholder {
     border-radius: 0;
     box-shadow: none;
+    background: none repeat scroll 0 0 #fff;
 }
 
 .form_notice textarea {
@@ -1071,20 +958,19 @@ background:none;
     height: 60px;
 }
 
-.form_notice label.notice_data-attach {
+.checkbox-wrapper.checked label.checkbox,
+.checkbox-wrapper.unchecked label.checkbox {
     background-image:none;
-    display: block;
-    left: 5px;
-    position: absolute;
-    top: 90px;
+    color:transparent;
 }
 
-.form_notice label.notice_data-attach:before {
-    content: "\f416";
+.checkbox-wrapper.checked label.checkbox:before,
+.checkbox-wrapper.unchecked label.checkbox:before {
+    content: "\f023";
     display: block;
-    font: 35px/1 "Genericons";
+    font: 22px/1 "fa";
     height: 35px;
-    left: 0px;
+    left: 10px;
     position: absolute;
     top: 0px;
     width: 35px;
@@ -1095,20 +981,22 @@ background:none;
     text-align:left;
 }
 
-.checkbox-wrapper.checked label.checkbox,
-.checkbox-wrapper.unchecked label.checkbox {
+.checkbox-wrapper.unchecked label.checkbox:before {
+    content: "\f09c";
+}
+
+.form_notice label.notice_data-attach {
     background-image:none;
-    opacity: 0.6;
-    padding-left: 30px;
-    font-size:0;
-    color:transparent;
+    display: block;
+    left: 5px;
+    position: absolute;
+    top: 93px;
 }
 
-.checkbox-wrapper.checked label.checkbox:before,
-.checkbox-wrapper.unchecked label.checkbox:before {
-    content: "\f023";
+.form_notice label.notice_data-attach:before {
+    content: "\f416";
     display: block;
-    font: 20px/1 "fa";
+    font: 35px/1 "Genericons";
     height: 35px;
     left: 0px;
     position: absolute;
@@ -1121,18 +1009,13 @@ background:none;
     text-align:left;
 }
 
-.checkbox-wrapper.unchecked label.checkbox:before {
-    content: "\f09c";
-}
-
 .form_notice .count {
     right: -18px;
     top:65px;
 }
 
 .form_notice fieldset {
-    background-color: #F6F7F8;
-    height:130px;
+    height:135px;
 }
 
 .form_notice {
@@ -1141,12 +1024,9 @@ background:none;
 
 .form_notice .checkbox-wrapper {
     display: block;
-    left: 35px;
-    margin-left: 10px;
-    overflow: hidden;
+    top: 96px;
+    left: 280px;
     position: absolute;
-    top: 97px;
-    width: 17px;
 }
 
 .form_notice .to-selector > label {
@@ -1157,7 +1037,7 @@ background:none;
     display:block;
     position:absolute;
     top:99px;
-    left:75px;
+    left:45px;
 }
 
 #notice_action-submit {
@@ -1182,7 +1062,6 @@ background:none;
 }
 
 .threaded-replies .form_notice textarea {
-    width: 495px;
     border:1px solid #dcdee3;
 }
 
@@ -1265,6 +1144,7 @@ body#outbox #core ul.messages .notice:before {
     text-align: center;
     width: 533px;
 }
+
 #pagination .nav_prev {
     display:none;
 }
@@ -1320,6 +1200,16 @@ body#outbox #core ul.messages .notice:before {
     padding-top:20px;
 }
 
+#page_notice {
+    clear: both;
+    margin-bottom: 18px;
+    color:rgba(0,0,0,0.4);
+    font-size:13px;
+    letter-spacing: 0.3px;
+}
+
+/* notices etc */
+
 #content h1 {
     color: rgba(0,0,0,0.4);
     font-size: 13px;
@@ -1331,14 +1221,6 @@ body#outbox #core ul.messages .notice:before {
     text-transform: uppercase;
 }
 
-#page_notice {
-    clear: both;
-    margin-bottom: 18px;
-    color:rgba(0,0,0,0.4);
-    font-size:13px;
-    letter-spacing: 0.3px;
-}
-
 
 #content #content_inner > .threaded-notices > .notice,
 #content #content_inner > .threaded-notices > .infscr-pages > .notice,
@@ -1359,160 +1241,50 @@ body#outbox #core ul.messages .notice:before {
     padding-bottom:0;
 }
 
-#content #content_inner > .threaded-notices > .notice:hover,
-#content #content_inner > .threaded-notices > .infscr-pages > .notice:hover,
-#content #content_inner > .notices > .infscr-pages > .notice:hover,
-#content #content_inner > .notices > .notice:hover,
-#content #notices_primary > .threaded-notices > .notice:hover,
-#content #notices_primary > .threaded-notices > .infscr-pages > .notice:hover,
-#content #notices_primary > .notices > .infscr-pages > .notice:hover,
-#content #notices_primary > .notices > .notice:hover {
-    border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.15) rgba(0,0,0,0.25);
-}
-
-#content .notice .p-author {
-    display: inline-block;
-    font-weight: bold;
-    height: 56px;
-    margin-right: 0;
-    white-space: nowrap;
-    padding-right:5px;
-}
-
-
-ul.messages .notice .p-author {
-}
-
-#content .notices > .notice > .threaded-replies .addressees {
-    display:none;
-}
-
-.notice .addressees:before {
-    content: "\f105\00a0";
-    color:#aaa;
-    font-family:fa;
-    font-weight:normal;
-}
-
-.notice .addressees {
-}
-
-.notice .addressees {
-    display: inline-block;
-    font-weight: bold;
-    margin-bottom: 4px;
-    white-space: nowrap;
-    }
-
-.notice .addressees .group {
-    font-style:normal;
-    font-weight:bold;
-}
-
-.notice .addressees .addressee.group:before {
-    content: "!";
-}
-
-#popular_notices .notice .p-author {
-    display: inline;
-}
-
-#core .p-author .u-photo {
-    float: left;
-    margin-right: 8px;
-    border-radius: 5px;
-}
-
-#core #content .p-author:before {
-    border: 1px solid rgba(0, 0, 0, 0.2);
-    box-sizing: border-box;
-    content: "";
-    display: block;
-    height: 48px;
-    left: 12px;
-    position: absolute;
-    top: 12px;
-    width: 48px;
-    border-radius: 5px;
-}
-
-#core #content .peopletag-profile .p-author:before {
-    width:96px;
-    height:96px;
-    left: 0;
-    top: 0;
-}
-
-#content .notice .e-content,
-.user_in #content .notice .e-content {
-    font-size: 15px;
-    margin-left: 0;
-    margin-top: 0;
-    position: relative;
-    white-space: normal;
-    z-index: 10;
-}
-
-.notice .attachment:not(.more) {
-    background: none;
-    padding-left:0;
-}
-
-#content #content_inner > .threaded-notices > .notice > .entry-metadata,
-#content #content_inner > .notices > .notice > .entry-metadata,
-#content #notices_primary > .threaded-notices > .notice > .entry-metadata,
-#content #notices_primary > .notices > .notice > .entry-metadata {
-    color: #9197a3;
-    margin-bottom: 7px;
-    margin-left: 56px;
-    margin-top: 12px;
-    position: absolute;
-    top: 24px;
-    width: 468px;
-    z-index: 10;
+#content .notice {
+    padding-bottom: 4px;
 }
 
-#content #content_inner > .threaded-notices > .notice.notice-source-activity > .entry-metadata,
-#content #content_inner > .notices > .notice.notice-source-activity > .entry-metadata,
-#content #notices_primary > .threaded-notices > .notice.notice-source-activity > .entry-metadata,
-#content #notices_primary > .notices > .notice.notice-source-activity > .entry-metadata {
-    margin-left: 0;
+.notice div.entry-content {
+    font-size: 0.88em;
+    line-height: 1.2em;
+    margin-top: 6px;
+    opacity: 0.6;
 }
 
-#content .threaded-notices > .notice > .entry-metadata a,
-#content .notices > .notice > .entry-metadata a {
-    color:#9197a3;
+.notice:hover div.entry-content {
+    opacity: 1;
 }
 
-#content .notices > .notice > .entry-metadata .conversation {
-    color:#006c9b;
-    font-style:italic;
+.user_in .notice div.entry-content {
+    max-width: 440px;
 }
 
-#content .notices > .notice > .threaded-replies .entry-metadata .conversation,
-#content .notices > .notice > .threaded-replies .entry-metadata .source {
-    display:none;
+div.entry-content a.response:before {
+        content: "(";
 }
 
-.entry-metadata span.source:before {
-    content:"\00a0·\00a0";
+div.entry-content a.response:after {
+        content: ")";
 }
 
-.e-content a.conversation:before {
-    content: " (";
+.notice-options {
+    margin-top: 4px;
 }
 
-.e-content a.conversation:after {
-    content: ")";
+.notice-options {
+    margin-top: 4px;
 }
 
 .notice-options .form_repeat.dialogbox {
     margin-right: 0px;
     border: 1px solid #aaa;
+    -webkit-border-radius: 4px;
+    -moz-border-radius: 4px;
     border-radius: 4px;
     box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.4);
-    z-index: 90;
-    min-width:160px;
+    -moz-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.4);
+    -webkit-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.4);
 }
 
 .notice-options .form_repeat.dialogbox legend {
@@ -1523,6 +1295,12 @@ ul.messages .notice .p-author {
     min-width: 80px;
 }
 
+#content .threaded-replies .notice .author .photo {
+    box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
+    -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
+    -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
+}
+
 .user_in.realtime-popup .notice div.e-content {
     max-width: 320px;
 }
@@ -1540,6 +1318,11 @@ ul.messages .notice .p-author {
     right: 10px !important;
 }
 
+
+#realtime_actions button {
+    margin-right: 5px;
+}
+
 .pagination {
     height: 1.2em;
 }
@@ -1620,355 +1403,8 @@ ul.messages .notice .p-author {
     color: rgba(0, 0, 0, 0.3);
 }
 
-
-/* replies */
-
-.notice-reply-placeholder {
-    display:none !important;
-    }
-
-.threaded-replies {
-    color: #222;
-    font-size: 13px;
-}
-.threaded-replies .notice-repeats, .threaded-replies .notice-faves {
-    font-size: 13px;
-}
-
-.threaded-replies {
-    background: none repeat scroll 0 0 #F6F7F8;
-    border-left: 0 none;
-    border-top: 1px solid #e1e2e3;
-    clear: both;
-    color: #222;
-    float: left;
-    margin-bottom: 0px;
-    margin-left: -12px;
-    padding-right: 2px;
-    padding-top: 0;
-    width: 540px;
-}
-
-#conversation .notices .notices {
-    background-color: rgba(200, 200, 200, 0.05);
-    float: left;
-    margin-left: -12px;
-    width: 540px;
-}
-
-.threaded-replies:empty {
-    display:none;
-}
-
-.threaded-replies .notice-faves:before,
-.threaded-replies .notice-repeats:before,
-.notice-reply-comments > a:before {
-    color: #006c9b;
-    content: "\f005";
-    display: inline-block;
-    font: 14px/1 "fa";
-    margin-right: 5px;
-    margin-top: -4px;
-    vertical-align: middle;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-}
-
-.threaded-replies .notice-repeats:before {
-    content: "\f079";
-}
-
-.notice-reply-comments > a:before {
-    font: 14px/1 "Genericons";
-    content: "\f431";
-}
-
-#content .notice .threaded-replies .notice,
-#content .notice .threaded-replies .notice-data,
-#content .notice .threaded-replies .notice-reply-comments {
-    background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
-    border-bottom: 1px solid #e1e2e3;
-    line-height: 1.36em;
-    margin-bottom: 0;
-    margin-left: 10px;
-    margin-top: 0;
-    padding-bottom: 1ex;
-    padding-top: 1ex;
-    width: 522px;
-}
-
-#content .notice .threaded-replies .notice:nth-last-child(2),
-#content .notice .threaded-replies .notice-data:nth-last-child(2),
-#content .notice .threaded-replies .notice-reply-comments:nth-last-child(2) {
-    border-bottom: 0 none;
-}
-
-.threaded-replies .notice .p-author {
-    float: left;
-    font-size: 13px;
-    height: auto;
-    margin-left: 40px;
-    padding-right: 5px;
-    position: relative;
-    z-index: 20;
-}
-
-#core #content .threaded-replies .p-author:before {
-    height: 32px;
-    left: -40px;
-    top: 3px;
-    width: 32px;
-    z-index: 10;
-}
-
-.threaded-replies .notice.h-entry .attachments,
-.threaded-replies .notice .notice-faves,
-.threaded-replies .notice .notice-repeats {
-    padding-left: 40px;
-}
-
-.threaded-replies .notice .addressees,
-.threaded-replies .notice .addressees li {
-    display: inline;
-}
-
-#content .threaded-replies .notice .p-author .u-photo {
-    float: none;
-    height: 32px;
-    margin-left: -40px;
-    position: absolute;
-    top: 10px;
-    width: 32px;
-    top: 3px;
-}
-
-#content .notice .threaded-replies .notice div.e-content {
-    margin: 0;
-    font-size:13px;
-    padding-left: 40px;
-    padding-top:0;
-}
-
-.notice-options {
-    margin-bottom: 8px;
-    margin-top: 8px;
-    margin-right: 0px;
-    height:20px;
-}
-
-#content .threaded-replies .entry-metadata,
-#content .threaded-replies .notice-options {
-    margin-bottom: 2px;
-    margin-top: 2px;
-    margin-left:40px;
-}
-
-#content .threaded-replies .notice-options {
-    bottom:0;
-    right:0px;
-    height:25px;
-}
-
-#content .threaded-replies .notice-faves,
-#content .threaded-replies .notice-repeats {
-    color:#9197a3;
-    font-size:12px;
-}
-
-#content .threaded-notices .notice-options input.submit,
-#content .threaded-notices .notice-options a,
-#content .notices .notice-options input.submit,
-#content .notices .notice-options a {
-    opacity: 1;
-    background-image:none;
-}
-
-#content .threaded-notices .notice-options input.submit:hover,
-#content .threaded-notices .notice-options a:hover,
-#content .notices .notice-options input.submit:hover,
-#content .notices .notice-options a:hover {
-    opacity: 1;
-}
-
-#content .threaded-replies .notice-options input.submit,
-#content .threaded-replies .notice-options a {
-    opacity: 1;
-}
-
-#content .threaded-replies .notice-options input.submit:hover,
-#content .threaded-replies .notice-options a:hover {
-    opacity: 1;
-}
-
-.notice-options form:not(.dialogbox),
-.notice-options a,
-.notice-options .repeated {
-    float: left;
-    margin-left: 10px;
-    margin-right:0;
-    background-image:none;
-    position:relative;
-}
-
-#content .threaded-notices .notice-options form:not(.dialogbox),
-#content .threaded-notices .notice-options a,
-#content .notices .notice-options form:not(.dialogbox),
-#content .notices .notice-options a {
-    position:relative;
-}
-
-#content .threaded-notices .notice-options form:not(.dialogbox) input,
-#content .threaded-notices .notice-options a,
-#content .notices .notice-options form:not(.dialogbox) input,
-#content .notices .notice-options a,
-#content .threaded-notices .notice-options span,
-#content .notices .notice-options span {
-    position:relative;
-    height:25px;
-    width:25px;
-    opacity:1;
-}
-
-.notice-options .notice_delete:before,
-.notice-options .notice_reply:before,
-.notice-options .form_favor:before,
-.notice-options .form_disfavor:before,
-.notice-options .form_repeat:not(.dialogbox):before,
-.notice-options .repeated:before {
-    content: "\f005";
-    display: block;
-    font: 20px/1 "fa";
-    height: 20px;
-    left: 0px;
-    position: absolute;
-    top: 0px;
-    width: 20px;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-    color:#ccc;
-    text-indent:0;
-    text-align:left;
-}
-
-.notice-options .form_disfavor:before {
-    color:#ff9b00;
-}
-
-.notice-options .notice_reply:before {
-    content: "\f112";
-    margin-top:1px;
-}
-
-.notice-options .repeated:before,
-.notice-options .form_repeat:not(.dialogbox):before {
-    content: "\f079";
-}
-
-.notice-options .repeated:before {
-    color:#609928;
-}
-
-.notice-options .notice_delete:before {
-    font: 25px/1 "Genericons";
-    content: "\f407";
-    margin-top:-3px;
-}
-
-.threaded-replies .notice-options .notice_delete,
-.threaded-replies .notice-options .notice_reply,
-.threaded-replies .notice-options .form_favor,
-.threaded-replies .notice-options .form_disfavor,
-.threaded-replies .notice-options .form_repeat,
-.threaded-replies .notice-options .repeated {
-    margin-left:5px;
-}
-
-.threaded-replies .notice-options .notice_reply:before,
-.threaded-replies .notice-options .form_favor:before,
-.threaded-replies .notice-options .form_disfavor:before,
-.threaded-replies .notice-options .form_repeat:not(.dialogbox):before,
-.threaded-replies .notice-options .repeated:before {
-    font: 17px/1 "fa";
-}
-
-.threaded-replies .notice-options .notice_delete:before {
-    font: 22px/1 "Genericons";
-    margin-top:-2px;
-    margin-left:-2px;
-}
-
-#content .threaded-notices .threaded-replies .notice-options form:not(.dialogbox) input,
-#content .threaded-notices .threaded-replies .notice-options a,
-#content .notices .threaded-replies .notice-options form:not(.dialogbox) input,
-#content .notices .threaded-replies .notice-options a,
-#content .notices .threaded-replies .notice-options span {
-    height:20px;
-    width:20px;
-}
-
-.notice-options .notice_delete:before,
-.notice-options .notice_reply:before,
-.notice-options .form_favor:before,
-.notice-options .form_disfavor:before,
-.notice-options .form_repeat:before,
-.notice-options .repeated:before {
-    opacity:0.3;
-    transition:opacity 0.3s;
-}
-
-.notice:hover > .notice-options .notice_delete:before,
-.notice:hover > .notice-options .notice_reply:before,
-.notice:hover > .notice-options .form_favor:before,
-.notice:hover > .notice-options .form_disfavor:before,
-.notice:hover > .notice-options .form_repeat:before,
-.notice:hover > .notice-options .repeated:before {
-    opacity:1;
-}
-
-
-
-
-#showstream .entry-metadata .repeat {
-    background-image:none;
-/*     background-position: -1px -1642px; */
-    color: transparent;
-    display: block;
-    font-size: 0;
-    height: 30px;
-    left: -65px;
-/*     overflow: hidden; */
-    position: absolute;
-    top: -35px;
-    width: 30px;
-}
-
-#showstream .entry-metadata .repeat:before {
-    content: "\f079";
-    background-color: #609928;
-    border-radius: 25px;
-    box-sizing: border-box;
-    color: #fff;
-    display: block;
-    font-family: "fa";
-    font-size: 14px;
-    height: 25px;
-    left: 0px;
-    line-height: 25px;
-    position: absolute;
-    text-align: center;
-    text-indent: 0;
-    top: 2px;
-    width: 25px;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-    box-shadow:1px 1px 5px rgba(255,255,255,0.5);
-}
-
-#notices_primary .notices:not(.threaded-notices) .repeat.h-entry {
-    display:none;
-}
-
 /* loading */
+
 #infscr-loading {
     font-size:20px;
     color: rgba(0,0,0,0.4);
@@ -2021,157 +1457,141 @@ ul.messages .notice .p-author {
 #nav_profile a:before {
     content: "\f304";
     margin-top:-1px;
-    }
+}
+
 #nav_timeline_replies a:before {
     content: "\f086";
     font-family:'fa';
     font-size:14px;
     margin-left:-19px;
-    }
+}
+
 #nav_local_default li:first-child ul.nav li:nth-child(4) a:before {
     content: "\f0e0";
     font-family:'fa';
     font-size:12px;
     margin-left:-18px;
-    }
+}
+
 #nav_timeline_favorites a:before {
     content: "\f005";
     font-family:'fa';
     font-size:14px;
     margin-left:-18px;
-    }
+}
+
 #nav_timeline_public a:before {
     content: "\f475";
-    }
+}
+
 #nav_groups a:before {
     content: "\f0c0";
     font-family:'fa';
     font-size:12px;
     margin-left:-18px;
-    }
+}
+
 #nav_recent-tags a:before {
     content: "\f02c";
     font-family:'fa';
     font-size:12px;
     margin-left:-18px;
-    }
+}
+
 #nav_timeline_favorited a:before {
     content: "\f140";
     font-family:'fa';
     font-size:14px;
     margin-left:-17px;
-    }
+}
+
 #nav_directory a:before {
     content: "\f1ae";
     font-family: "fa";
     font-size: 15px;
     margin-left: -16px;
     margin-top: -1px;
-    }
+}
+
 #nav_lists a:before {
     content: "\f0c9";
     font-family: "fa";
     font-size: 15px;
     margin-left: -18px;
-    }
+}
 
-.form_group_join,
-.form_group_leave,
-.form_group_delete {
-    position:relative;
-    }
-.entity_edit a,
-.entity_remote_subscribe,
-#export_data a,
-.peopletags_edit_button,
-.form_group_join input.submit,
-.form_group_leave input.submit,
-.form_group_delete input.submit {
-    background-image:none !important;
-    }
-.entity_edit a:before,
-.entity_remote_subscribe:before,
-#export_data a:before,
-.peopletags_edit_button:before,
-.form_group_join:before,
-.form_group_leave:before,
-.form_group_delete:before {
-    content: "\f14b";
-    display: inline;
-    font-family:'fa';
-    font-size:18px;
-    line-height:20px;
-    position:absolute;
-    display:block;
-    box-sizing:border-box;
-    height:20px;
-    width:20px;
-    margin-left:-22px;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-    color:rgba(0,0,0,0.6);
-    }
-.entity_edit a:hover:before,
-.entity_remote_subscribe:hover:before,
-.peopletags_edit_button:hover:before,
-.form_group_join:hover:before,
-.form_group_leave:hover:before,
-.form_group_delete:hover:before {
-    color:rgba(0,0,0,0.8);
-    }
-.entity_remote_subscribe:before {
-    content: "\f0fe";
-    }
-#export_data a:before {
-    content: "\f143";
-    margin-left: -25px;
-    margin-top: -2px;
-    }
-#export_data a {
-    padding-left:25px !important;
-    }
-#export_data a:hover:before {
-    color:#ff6600;
-    }
+
+.profile_list td.entity_actions {
+    width: 24px;
+    max-width: 24px;
+    min-width: 24px;
+    height: 20px;
+    padding-left: 6px !important;
+    position: relative;
+    float: none;
+    display: table-cell !important;
+}
+
+.profile_list .entity_actions ul {
+    position: absolute;
+    right: 20px;
+}
+
+.profile_list .entity_actions input {
+    width: 22px;
+    height: 22px;
+    padding-top: 1px;
+    padding-right: 0px;
+    padding-left: 20px;
+    display: block;
+    overflow: hidden;
+    font-size: 0em;
+    border: 1px solid #CDD1DD;
+}
+
+.profile_list .form_group_leave input.submit,
+.profile_list .form_user_unsubscribe input.submit {
+    background-position: 2px -1250px;
+}
+
+.profile_list .form_group_join input.submit,
+.profile_list .form_user_subscribe input.submit {
+    background-position: 2px -1184px;
+}
+
+.profile_list .entity_actions input:hover {
+    width: auto;
+    padding-right: 10px;
+    overflow: visible;
+    font-size: 1em;
+    line-height: 1.3em;
+    border: 1px solid #A6ADBF;
+    box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);
+    -moz-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);
+    -webkit-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);
+}
 
 .peopletags_edit_button {
     position:relative;
-    }
+}
 
 .peopletags_edit_button:before {
     margin-left: -2px;
     top: -2px;
-    }
-
-.form_group_join:before,
-.form_group_leave:before,
-.form_group_delete:before {
-    content: "\f0fe";
-    margin-left:4px;
-    top:4px;
-    }
-.form_group_leave:before {
-    content: "\f146";
-    }
-.form_group_delete:before {
-    content: "\f071";
-    }
-
+}
 
 
 #export_data li a.foaf,
 #export_data li a.json,
 #export_data li:nth-child(2) {
     display:none;
-    }
+}
 
 
 .group_profile_block .entity_actions li a,
 .group_profile_block .entity_actions input.submit {
     background-color:transparent !important;
-    }
-
-
+}
 
 #gnusocial-version {
 border: 1px solid rgba(0, 0, 0, 0.3);
@@ -2181,13 +1601,13 @@ border: 1px solid rgba(0, 0, 0, 0.3);
     font-size: 11px;
     padding: 15px;
     width: 100%;
-    }
+}
+
 #gnusocial-version a,
 #gnusocial-version p {
     margin:0;
     color:rgba(0,0,0,0.5);
-    }
-
+}
 
 .form_notice input.submit, .form_settings input.submit, .form_settings input.cancel, #form_invite input.submit,
 .entity_subscribe .dialogbox input.submit_dialogbox,
@@ -2241,17 +1661,11 @@ border: 1px solid rgba(0, 0, 0, 0.3);
 .entity_tag .dialogbox input.submit_dialogbox:hover,
 .form_repeat.dialogbox input.submit_dialogbox:hover
 {
-
     background: -moz-linear-gradient(top,  #2daddc 0%, #0271bf 100%); /* FF3.6+ */
-
     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2daddc), color-stop(100%,#0271bf)); /* Chrome,Safari4+ */
-
     background: -webkit-linear-gradient(top,  #2daddc 0%,#0271bf 100%); /* Chrome10+,Safari5.1+ */
-
     background: -o-linear-gradient(top,  #2daddc 0%,#0271bf 100%); /* Opera 11.10+ */
-
     background: -ms-linear-gradient(top,  #2daddc 0%,#0271bf 100%); /* IE10+ */
-
     background: linear-gradient(to bottom,  #2daddc 0%,#0271bf 100%); /* W3C */
     background-repeat: repeat-x;
     border-color:#096eb3;
@@ -2345,24 +1759,28 @@ border: 1px solid rgba(0, 0, 0, 0.3);
 }
 
 #content thead th {
-text-align:left;
+    text-align:left;
 }
+
 #content tbody th {
-vertical-align:top;
-text-align:left;
-font-weight:normal;
-padding-top:11px;
-padding-right:18px;
+    vertical-align:top;
+    text-align:left;
+    font-weight:normal;
+    padding-top:11px;
+    padding-right:18px;
 }
+
 #content tbody tr {
     border-top: 1px dotted #bbb;
 }
+
 #content td {
-padding:11px 18px 11px 0;
-vertical-align:top;
+    padding:11px 18px 11px 0;
+    vertical-align:top;
 }
+
 #content td:last-child {
-padding-right:0;
+    padding-right:0;
 }
 
 /* Search */
@@ -2594,20 +2012,20 @@ table.profile_list {
 }
 
 .profile_list th.current {
-        background: none !important;
+    background: none !important;
 }
 
 .profile_list th.current.reverse {
-        background: none !important;
+    background: none !important;
 }
 
 .profile_list th.current a {
-        padding-right: 25px;
-        background: url(../images/bluearrow_down.png) no-repeat top right;
+    padding-right: 25px;
+    background: url(../images/bluearrow_down.png) no-repeat top right;
 }
 
 .profile_list th.current.reverse a {
-        background: url(../images/bluearrow_up.png) no-repeat top right;
+    background: url(../images/bluearrow_up.png) no-repeat top right;
 }
 
 table.profile_list tr.alt {
index be88e6647368a55b9e322f41260ead9b5522e995..af7a8481315353bfd882da21ed8664d593fa6ba4 100755 (executable)
Binary files a/theme/neo-quitter/favicon.ico and b/theme/neo-quitter/favicon.ico differ
diff --git a/theme/neo-quitter/fonts/Lato-Bold.eot b/theme/neo-quitter/fonts/Lato-Bold.eot
deleted file mode 100644 (file)
index 49bc301..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Bold.eot and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Bold.ttf b/theme/neo-quitter/fonts/Lato-Bold.ttf
deleted file mode 100644 (file)
index 7ca4542..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Bold.ttf and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Bold.woff b/theme/neo-quitter/fonts/Lato-Bold.woff
deleted file mode 100644 (file)
index f6d8ebf..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Bold.woff and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Italic.eot b/theme/neo-quitter/fonts/Lato-Italic.eot
deleted file mode 100644 (file)
index 41558ec..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Italic.eot and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Italic.ttf b/theme/neo-quitter/fonts/Lato-Italic.ttf
deleted file mode 100644 (file)
index 3e3af67..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Italic.ttf and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Italic.woff b/theme/neo-quitter/fonts/Lato-Italic.woff
deleted file mode 100644 (file)
index 33d6186..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Italic.woff and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Regular.eot b/theme/neo-quitter/fonts/Lato-Regular.eot
deleted file mode 100644 (file)
index f36f480..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Regular.eot and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Regular.ttf b/theme/neo-quitter/fonts/Lato-Regular.ttf
deleted file mode 100644 (file)
index db3c3a5..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Regular.ttf and /dev/null differ
diff --git a/theme/neo-quitter/fonts/Lato-Regular.woff b/theme/neo-quitter/fonts/Lato-Regular.woff
deleted file mode 100644 (file)
index 52074ee..0000000
Binary files a/theme/neo-quitter/fonts/Lato-Regular.woff and /dev/null differ
diff --git a/theme/neo-quitter/fonts/stylesheet.css b/theme/neo-quitter/fonts/stylesheet.css
deleted file mode 100644 (file)
index f913fc6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 14, 2011 */
-
-@font-face {
-    font-family: 'LatoBold';
-    src: url('lato-bold-webfont.eot');
-    src: local('☺'), url('lato-bold-webfont.woff') format('woff'), url('lato-bold-webfont.ttf') format('truetype'), url('lato-bold-webfont.svg#webfontRFDbyVDk') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'LatoItalic';
-    src: url('lato-italic-webfont.eot');
-    src: local('☺'), url('lato-italic-webfont.woff') format('woff'), url('lato-italic-webfont.ttf') format('truetype'), url('lato-italic-webfont.svg#webfont7qSu1Vfu') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'LatoRegular';
-    src: url('lato-regular-webfont.eot');
-    src: local('☺'), url('lato-regular-webfont.woff') format('woff'), url('lato-regular-webfont.ttf') format('truetype'), url('lato-regular-webfont.svg#webfontCjmEHx3G') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
diff --git a/theme/neo-quitter/images/lock.png b/theme/neo-quitter/images/lock.png
deleted file mode 100644 (file)
index 2ebc4f6..0000000
Binary files a/theme/neo-quitter/images/lock.png and /dev/null differ
diff --git a/theme/neo-quitter/images/lock_open.png b/theme/neo-quitter/images/lock_open.png
deleted file mode 100644 (file)
index a471765..0000000
Binary files a/theme/neo-quitter/images/lock_open.png and /dev/null differ